]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add back the spirit sublibrary of boost.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Mon, 25 Aug 2014 13:06:01 +0000 (08:06 -0500)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Mon, 25 Aug 2014 13:06:01 +0000 (08:06 -0500)
We apparently need it from the serialization sublibrary.

1055 files changed:
bundled/boost-1.56.0/include/boost/spirit/home/classic.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_key_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/clear_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/decrement_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/erase_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/increment_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_at_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_key_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_back_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_front_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_value_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/swap_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/parametric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/assert.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/actions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/composite.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/difference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/directives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/epsilon.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/exclusive_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/alternative.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/difference.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/directives.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/intersection.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/list.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/optional.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/positive.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequence.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/intersection.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/kleene_star.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/no_actions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/positive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_and.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/config.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match_attr_traits.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/parser.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/match.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/nil.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/static.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_id.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/numerics.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/primitives.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/safe_bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/impl/skipper.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/core/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/debug_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/impl/parser_names.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/minimal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/parser_names.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/for.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/if.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/conditions.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/select.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/switch.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/rule_alias.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/select.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/switch.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/while.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/impl/exceptions.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/fixed_size_queue.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/file_iterator.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/position_iterator.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/as_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/fundamental.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/fundamental.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/parser_traits.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/refactoring.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/traverse.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/parser_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/refactoring.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/traverse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/namespace.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/binders.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/casts.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/closures.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/composite.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/functions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/new.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/special_ops.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/statements.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuple_helpers.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuples.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/symbols.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/tst.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parsetree.dtd [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/tree_to_xml.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset_operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/flush_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/functor_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset_operators.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/confix.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/escape_char.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/lists.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/regex.ipp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/loops.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/regex.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/rule_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/scoped_lock.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/classic/version.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/action/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/create_generator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/meta_create.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/attr_cast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eol.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eps.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/padding.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_generator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_flag.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_out.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/alternative_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/as.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/default_width.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/enable_lit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/extract_from.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/fail_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_to.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_casetag.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_stricttag.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/indirect_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/output_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/pass_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_compare.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_generate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/unused_delimiter.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/as.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/buffer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/center_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/columns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/delimit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/duplicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/encoding.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/left_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/maxwidth.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/no_delimit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/omit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/repeat.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/right_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/strict_relaxed.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/upper_lower_case.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/verbatim.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/format.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/format_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/generate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/generate_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/generator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/meta_compiler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler_state.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/fcall.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/parameterized.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/simple_trace.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/bool_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/real_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/uint.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/and_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/kleene.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/not_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/plus.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/phoenix_attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/reference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/iterator_sink.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/ostream_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/string/lit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/string/symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/karma/what.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/argument.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/argument_phoenix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/detail/sequence_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/char_token_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/lexer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/position_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_version.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/pass_flags.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/string_token_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions_expression.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/terminals.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/token_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_lexertl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_static_lexertl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_type.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/meta_compiler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/in_state.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_raw_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid_mask.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/state_switcher.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/reference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/action/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/create_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/meta_create.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr_cast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eoi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eol.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eps.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/binary/binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/copy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/alternative_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/assign_to.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/construct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/enable_lit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/expect_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/fail_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/permute_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/string_parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/unused_skipper.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/as.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/encoding.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/hold.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/lexeme.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/matches.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_case.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/omit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/raw.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/repeat.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/match.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/match_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/meta_compiler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler_state.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/fcall.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/error_handler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/simple_trace.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/success_handler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/real_impl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/numeric_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/uint.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/and_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/difference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/expect.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/kleene.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/not_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/permutation.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/plus.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence_base.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequential_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/parse_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/reference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_flag.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_over.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/iterator_source.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string/detail/tst.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string/lit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string/symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst_map.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/qi/what.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/action_dispatch.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/adapt_adt_attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if_ns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_ns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/argument.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/argument_expression.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/assert_msg.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/attributes_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/auto/meta_create.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/auxiliary/attr_cast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/ascii.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/iso8859_1.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard_wide.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/DerivedCoreProperties.txt [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/PropList.txt [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/Scripts.txt [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/UnicodeData.txt [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/category_table.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/query.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/script_table.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/basic_chset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_functions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run_impl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/common_terminals.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/as_variant.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/cover_operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/endian.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/get_encoding.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/hold_any.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/is_spirit_tag.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/char_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/consts.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/debug.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/file_input.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_cpp.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_re2c.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/input.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/internals.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/charset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/equivset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/rules.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/runtime_error.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/serialise.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/size_t.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/state_machine.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/string_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_cons.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_vector.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/detail/fp_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/fpclassify.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/signbit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/pow10.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/scoped_enum_emulation.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/sign.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/detail/what_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/extended_variant.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/handles_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/has_semantic_action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/info.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/combine_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/functor_input_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/istream_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/no_check_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/istream_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/line_pos_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/look_ahead.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/ostream_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/limits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/make_component.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/meta_compiler.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/modify.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass_wrapper.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/expand_arg.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/extract_param.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/locals.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/numeric_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/sequence_base_id.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/string_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/terminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/terminal_expression.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/unused.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utf8.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail1.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail2.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/any_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eoi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eol.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eps.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/guard.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/any_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/detail/cast_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/literal_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/negated_char_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/char/unicode.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/call.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/proxy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/core/skip_over.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/expect.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/lexeme.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/no_skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/omit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/raw.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/with.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions/seek.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/simple_trace.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real_policies.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/uint.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/and_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/difference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/kleene.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/not_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/plus.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/string_parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/tst.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/literal_string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst_map.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/position_tagged.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/variant.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/pow10.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/sign.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/subcontext.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_category.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_of.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_type.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/container_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/handles_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/has_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_substitute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_variant.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/make_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/move_to.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/numeric_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/optional_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/string_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/transform_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/tuple_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/value_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/unused.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/detail/testing.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/error_reporting.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/integer_sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/is_callable.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/lambda_visitor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/sfinae.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/testing.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/unrefcv.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/utf8.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_actions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_as_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_assert.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_key_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ast_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_attribute.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_basic_chset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_chset.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_chset_operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_clear_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_closure.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_common.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_common_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_composite.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_config.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_confix_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_core.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_debug.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_debug_node.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_decrement_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_difference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_directives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_dynamic.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_epsilon.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_erase_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_error_handling.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_exclusive_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_fixed_size_queue.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_flush_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_for.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_functor_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_fundamental.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_if.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_increment_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_at_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_key_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_intersection.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_kleene_star.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_lists.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_lists_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_loops.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_match.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_meta.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_minimal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_nil.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_no_actions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parametric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_utils.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_id.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_names.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_positive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_push_back_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_push_front_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_range_run.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_value_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_value_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_refactoring.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_regex.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_alias.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_parser.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_safe_bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_scoped_lock.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_select.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_and.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_spirit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_static.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_swap_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_switch.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_traverse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_tree_to_xml.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_typeof.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_utility.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_version.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/classic_while.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_and_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_as.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_attr_cast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_auxiliary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_buffer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_center_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_char_.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_columns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_delimit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_duplicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_eol.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_eps.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_format.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_format_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_format_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_generate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_kleene.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_left_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_maxwidth.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_no_delimit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_not_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_numeric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_omit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_phoenix_attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_plus.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_repeat.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_right_alignment.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_strict_relaxed.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_uint.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_upper_lower_case.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_verbatim.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/karma_what.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_char_token_def.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_generate_static_lexertl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_lexer.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_position_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_plain_token.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_static_lexertl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_actor.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_binders.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_casts.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_closures.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_composite.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_functions.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_new.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_operators.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_primitives.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_special_ops.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_statements.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuple_helpers.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuples.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_algorithm.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_bind.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_core.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_function.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_fusion.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_limits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_object.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_scope.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_statement.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_stl.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/phoenix_version.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_action.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_alternative.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_and_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_as.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_as_string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_attr_cast.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_auxiliary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_binary.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_bool.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_char.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_char_.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_copy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_core.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_difference.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_domain.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_eoi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_eol.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_eps.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_expect.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_grammar.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_hold.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_int.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_kleene.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_lazy.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_lexeme.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_list.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_lit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_match.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_match_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_match_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_matches.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_no_case.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_no_skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_not_predicate.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_numeric.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_omit.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_optional.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_parse.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_attr.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_permutation.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_plus.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_raw.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_real.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_repeat.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_rule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_sequence.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_sequential_or.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_skip.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_stream.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_string.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_symbols.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_uint.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/qi_what.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_adapt_adt_attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_any.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_any_if.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_any_if_ns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_any_ns.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_argument.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_ascii.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_attributes.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_attributes_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_auto.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_char_class.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_container.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_extended_variant.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_info.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_iso8859_1.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_istream_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_line_pos_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_locals.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_look_ahead.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_modify.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass_fwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_ostream_iterator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_standard.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_standard_wide.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_string_traits.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_unused.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/support_utree.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/include/version.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/karma.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive/confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal/subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/distinct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/kwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/seek.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal/subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/detail/keywords.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/keywords.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/advance.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/iter_pos.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/distinct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/flush_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/kwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/seek.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/home/support/subrule_context.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/karma.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_advance.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_confix.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_directive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_distinct.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_flush_multi_pass.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_iter_pos.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_keywords.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_kwd.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_nonterminal.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_primitive.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_seek.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_subrule.hpp [new file with mode: 0644]
bundled/boost-1.56.0/include/boost/spirit/version.hpp [new file with mode: 0644]

diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic.hpp
new file mode 100644 (file)
index 0000000..4d3da2a
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 1998-2008 Joel de Guzman
+    Copyright (c) 2001-2008 Hartmut Kaiser
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2002-2003 Martin Wille
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002 Raghavendra Satish
+    Copyright (c) 2002 Jeff Westfahl
+    Copyright (c) 2001 Bruce Florman
+    Copyright (c) 2003 Giovanni Bajo
+    Copyright (c) 2003 Vaclav Vesely
+    Copyright (c) 2003 Jonathan de Halleux
+    http://spirit.sourceforge.net/
+    http://www.boost.org/libs/spirit
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+  See http://www.boost.org/libs/spirit for documentation
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLASSIC_APRIL_11_2008_0849AM)
+#define BOOST_SPIRIT_CLASSIC_APRIL_11_2008_0849AM
+
+#include <boost/spirit/home/classic/core.hpp>
+#include <boost/spirit/home/classic/meta.hpp>
+#include <boost/spirit/home/classic/error_handling.hpp>
+#include <boost/spirit/home/classic/iterator.hpp>
+#include <boost/spirit/home/classic/symbols.hpp>
+#include <boost/spirit/home/classic/utility.hpp>
+#include <boost/spirit/home/classic/attribute.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor.hpp
new file mode 100644 (file)
index 0000000..7060994
--- /dev/null
@@ -0,0 +1,113 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Actors documentation and convention
+//
+//  Actors
+//
+//  Actors are predefined semantic action functors. They are used to do an
+//  action on the parse result if the parser has had a successful match. An
+//  example of actor is the append_actor described in the Spirit
+//  documentation.
+//
+//  The action takes place through a call to the () operator: single argument
+//  () operator call for character parsers and two argument (first,last) call
+//  for phrase parsers. Actors should implement at least one of the two ()
+//  operator.
+//
+//  Actor instances are not created direcly since they usually involve a
+//  number of template parameters. Instead generator functions ("helper
+//  functions") are provided to generate actors according to their arguments.
+//  All helper functions have the "_a" suffix. For example, append_actor is
+//  created using the append_a function.
+//
+//  Policy holder actors and policy actions
+//
+//  A lot of actors need to store reference to one or more objects. For
+//  example, actions on container need to store a reference to the container.
+//  Therefore, this kind of actor have been broken down into
+//
+//      - a action policy that does the action (act method),
+//      - a policy holder actor that stores the references and feeds the act
+//        method.
+//
+//  Policy holder actors
+//
+//      Policy holder have the following naming convention:
+//          <member>_ >> *<member> >> !value >> actor
+//      where member are the policy stored member, they can be of type:
+//
+//       - ref, a reference,
+//       - const_ref, a const reference,
+//       - value, by value,
+//       - empty, no stored members
+//       - !value states if the policy uses the parse result or not.
+//
+//  The available policy holder are enumerated below:
+//
+//      - empty_actor, nothing stored, feeds parse result
+//      - value_actor, 1 object stored by value, feeds value
+//      - ref_actor, 1 reference stored, feeds ref
+//      - ref_value_actor, 1 reference stored, feeds ref and parse result
+//
+//  Doc. convention
+//
+//      - ref is a reference to an object stored in a policy holder actor,
+//      - value_ref,value1_ref, value2_ref are a const reference stored in a
+//          policy holder actor,
+//      - value is the parse result in the single argument () operator,
+//      - first,last are the parse result in the two argument () operator
+//
+//  Actors (generator functions) and quick description
+//
+//      - assign_a(ref)                 assign parse result to ref
+//      - assign_a(ref, value_ref)      assign value_ref to ref
+//      - increment_a(ref)              increment ref
+//      - decrement_a(ref)              decrement ref
+//      - push_back_a(ref)              push back the parse result in ref
+//      - push_back_a(ref, value_ref)   push back value_ref in ref
+//      - push_front_a(ref)             push front the parse result in ref
+//      - push_front_a(ref, value_ref)  push front value_ref in ref
+//      - insert_key_a(ref,value_ref)   insert value_ref in ref using the
+//                                      parse result as key
+//      - insert_at_a(ref, key_ref)     insert the parse result in ref at key_ref
+//      - insert_at_a(ref, key_ref      insert value_ref in ref at key_ref
+//          , value_ref)                
+//      - assign_key_a(ref, value_ref)  assign value_ref in ref using the
+//                                      parse result as key
+//      - erase_a(ref, key)             erase data at key from ref
+//      - clear_a(ref)                  clears ref
+//      - swap_a(aref, bref)            swaps aref and bref
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/home/classic/actor/ref_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp>
+
+#include <boost/spirit/home/classic/actor/assign_actor.hpp>
+#include <boost/spirit/home/classic/actor/clear_actor.hpp>
+#include <boost/spirit/home/classic/actor/increment_actor.hpp>
+#include <boost/spirit/home/classic/actor/decrement_actor.hpp>
+#include <boost/spirit/home/classic/actor/push_back_actor.hpp>
+#include <boost/spirit/home/classic/actor/push_front_actor.hpp>
+#include <boost/spirit/home/classic/actor/erase_actor.hpp>
+#include <boost/spirit/home/classic/actor/insert_key_actor.hpp>
+#include <boost/spirit/home/classic/actor/insert_at_actor.hpp>
+#include <boost/spirit/home/classic/actor/assign_key_actor.hpp>
+#include <boost/spirit/home/classic/actor/swap_actor.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_actor.hpp
new file mode 100644 (file)
index 0000000..9455130
--- /dev/null
@@ -0,0 +1,100 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that applies the assignement operator.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref = value;
+    //      ref = T(first,last);
+    //      ref = value_ref;
+    //
+    //  Policy name:
+    //      assign_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_value_actor, assign_a( ref );
+    //      ref_const_ref_actor, assign_a( ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_value_actor and ref_const_ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct assign_action
+    {
+        template<
+            typename T,
+            typename ValueT
+        >
+        void act(T& ref_, ValueT const& value_) const
+        {
+            ref_ = value_;
+        }
+        template<
+            typename T,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef T value_type;
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+            value_type value(first_,last_);
+#else
+            value_type value;
+            std::copy(first_, last_, std::inserter(value, value.end()));
+#endif
+            ref_ = value;
+        }
+    };
+
+    // Deprecated. Please use assign_a
+    template<typename T>
+    inline ref_value_actor<T,assign_action> assign(T& ref_)
+    {
+        return ref_value_actor<T,assign_action>(ref_);
+    }
+
+    template<typename T>
+    inline ref_value_actor<T,assign_action> assign_a(T& ref_)
+    {
+        return ref_value_actor<T,assign_action>(ref_);
+    }
+
+    template<
+        typename T,
+        typename ValueT
+    >
+    inline ref_const_ref_actor<T,ValueT,assign_action> assign_a(
+        T& ref_,
+        ValueT const& value_
+    )
+    {
+        return ref_const_ref_actor<T,ValueT,assign_action>(ref_,value_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_key_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/assign_key_actor.hpp
new file mode 100644 (file)
index 0000000..f6711d3
--- /dev/null
@@ -0,0 +1,96 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct assign_key_action
+    {
+        template<
+            typename T,
+            typename ValueT,
+            typename KeyT
+        >
+        void act(T& ref_, ValueT const& value_, KeyT const& key_) const
+        {
+            ref_[ key_ ] = value_;
+        }
+
+        template<
+            typename T,
+            typename ValueT,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            ValueT const& value_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::key_type key_type;
+            key_type key(first_,last_);
+
+            ref_[key] = value_;
+        }
+    };
+
+    template<
+        typename T,
+        typename ValueT
+    >
+    inline ref_const_ref_value_actor<T,ValueT,assign_key_action>
+        assign_key_a(T& ref_, ValueT const& value_)
+    {
+        return ref_const_ref_value_actor<T,ValueT,assign_key_action>(
+            ref_,
+            value_
+            );
+    }
+
+    template<
+        typename T,
+        typename ValueT,
+        typename KeyT
+    >
+    inline ref_const_ref_const_ref_actor<
+        T,
+        ValueT,
+        KeyT,
+        assign_key_action
+    >
+        assign_key_a(
+            T& ref_,
+            ValueT const& value_,
+            KeyT const& key_
+    )
+    {
+        return ref_const_ref_const_ref_actor<
+            T,
+            ValueT,
+            KeyT,
+            assign_key_action
+        >(
+            ref_,
+            value_,
+            key_
+            );
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/clear_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/clear_actor.hpp
new file mode 100644 (file)
index 0000000..9af670d
--- /dev/null
@@ -0,0 +1,61 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that calls clear method.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref.clear();
+    //
+    //  Policy name:
+    //      clear_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_actor, clear_a( ref );
+    //
+    //  () operators: both.
+    //
+    //  See also ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct clear_action
+    {
+        template<
+            typename T
+        >
+        void act(T& ref_) const
+        {
+            ref_.clear();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // helper method that creates a and_assign_actor.
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    inline ref_actor<T,clear_action> clear_a(T& ref_)
+    {
+        return ref_actor<T,clear_action>(ref_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/decrement_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/decrement_actor.hpp
new file mode 100644 (file)
index 0000000..99cdf35
--- /dev/null
@@ -0,0 +1,60 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that calls the -- operator on a reference.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions:
+    //      --ref;
+    //
+    //  Policy name:
+    //      decrement_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_actor, decrement_a( ref );
+    //
+    //  () operators: both.
+    //
+    //  See also ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct decrement_action
+    {
+        template<
+            typename T
+        >
+        void act(T& ref_) const
+        {
+            --ref_;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // helper method that creates a and_assign_actor.
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    inline ref_actor<T,decrement_action> decrement_a(T& ref_)
+    {
+        return ref_actor<T,decrement_action>(ref_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/erase_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/erase_actor.hpp
new file mode 100644 (file)
index 0000000..dca1b40
--- /dev/null
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that calss the erase method.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref.erase( value );
+    //      ref.erase( T::key_type(first,last) );
+    //      ref.erase( key_ref );
+    //
+    //  Policy name:
+    //      erase_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_value_actor, erase_a( ref );
+    //      ref_const_ref_actor, erase_a( ref, key_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_value_actor and ref_const_ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct erase_action
+    {
+        template<
+            typename T,
+            typename KeyT
+        >
+        void act(T& ref_, KeyT const& key_) const
+        {
+            ref_.erase(key_);
+        }
+        template<
+            typename T,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::key_type key_type;
+            key_type key(first_,last_);
+
+            ref_.erase(key);
+        }
+    };
+
+    template<typename T>
+    inline ref_value_actor<T,erase_action> erase_a(T& ref_)
+    {
+        return ref_value_actor<T,erase_action>(ref_);
+    }
+
+    template<
+        typename T,
+        typename KeyT
+    >
+    inline ref_const_ref_actor<T,KeyT,erase_action> erase_a(
+        T& ref_,
+        KeyT const& key_
+    )
+    {
+        return ref_const_ref_actor<T,KeyT,erase_action>(ref_,key_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/increment_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/increment_actor.hpp
new file mode 100644 (file)
index 0000000..7765688
--- /dev/null
@@ -0,0 +1,60 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that calls the ++ operator on a reference.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions:
+    //      ++ref;
+    //
+    //  Policy name:
+    //      increment_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_actor, increment_a( ref );
+    //
+    //  () operators: both.
+    //
+    //  See also ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct increment_action
+    {
+        template<
+            typename T
+        >
+        void act(T& ref_) const
+        {
+            ++ref_;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // helper method that creates a increment_actor.
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T>
+    inline ref_actor<T,increment_action> increment_a(T& ref_)
+    {
+        return ref_actor<T,increment_action>(ref_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_at_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_at_actor.hpp
new file mode 100644 (file)
index 0000000..5dd7497
--- /dev/null
@@ -0,0 +1,121 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that insert data into an associative 
+    //  container using a const reference to a key.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref.insert( T::value_type(key_ref,value) );
+    //      ref.insert( T::value_type(key_ref, T::mapped_type(first,last)));;
+    //      ref.insert( T::value_type(key_ref,value_ref) );
+    //
+    //  Policy name:
+    //      insert_at_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_const_ref_value_actor, insert_at_a( ref, key_ref ); 
+    //      ref_const_ref_const_ref_actor, insert_a( ref, key_ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_const_ref_value_actor and ref_const_ref_const_ref_actor 
+    //  for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct insert_at_action
+    {
+        template<
+            typename T,
+            typename ReferentT,
+            typename ValueT
+        >
+        void act(
+            T& ref_, 
+            ReferentT const& key_,
+            ValueT const& value_
+            ) const
+        {
+            typedef typename T::value_type value_type;
+            ref_.insert( value_type(key_, value_) );
+        }
+
+        template<
+            typename T,
+            typename ReferentT,
+            typename IteratorT
+        >
+        void act(
+            T& ref_, 
+            ReferentT const& key_,
+            IteratorT const& first_, 
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::mapped_type mapped_type;
+            typedef typename T::value_type value_type;
+
+            mapped_type value(first_,last_);
+            value_type key_value(key_, value);
+            ref_.insert( key_value );
+        }
+    };
+
+    template<
+        typename T,
+        typename ReferentT
+        >
+    inline ref_const_ref_value_actor<T,ReferentT,insert_at_action> 
+    insert_at_a(
+            T& ref_,
+            ReferentT const& key_
+        )
+    {
+        return ref_const_ref_value_actor<
+            T,
+            ReferentT,
+            insert_at_action
+            >(ref_,key_);
+    }
+
+    template<
+        typename T,
+        typename ReferentT,
+        typename ValueT
+    >
+    inline ref_const_ref_const_ref_actor<T,ReferentT,ValueT,insert_at_action> 
+    insert_at_a(
+                T& ref_,
+                ReferentT const& key_,
+                ValueT const& value_
+            )
+    {
+        return ref_const_ref_const_ref_actor<
+            T,
+            ReferentT,
+            ValueT,
+            insert_at_action
+            >(ref_,key_,value_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_key_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/insert_key_actor.hpp
new file mode 100644 (file)
index 0000000..859a8d8
--- /dev/null
@@ -0,0 +1,97 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that insert data into an associative
+    //  container using a const reference to data.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref.insert( T::value_type(value,value_ref) );
+    //      ref.insert( T::value_type(T::key_type(first,last), value_ref));;
+    //
+    //  Policy name:
+    //      insert_key_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_const_ref_value_actor, insert_key_a( ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_const_ref_value_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct insert_key_action
+    {
+        template<
+            typename T,
+            typename ValueT,
+            typename ReferentT
+        >
+        void act(
+            T& ref_,
+            ValueT const& value_,
+            ReferentT const& key_
+            ) const
+        {
+            typedef typename T::value_type value_type;
+            value_type key_value(key_, value_);
+            ref_.insert( key_value );
+        }
+
+        template<
+            typename T,
+            typename ValueT,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            ValueT const& value_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::key_type key_type;
+            typedef typename T::value_type value_type;
+
+            key_type key(first_,last_);
+            value_type key_value(key, value_);
+            ref_.insert( key_value );
+        }
+    };
+
+    template<
+        typename T,
+        typename ValueT
+        >
+    inline ref_const_ref_value_actor<T,ValueT,insert_key_action> insert_key_a(
+        T& ref_,
+        ValueT const& value_
+        )
+    {
+        return ref_const_ref_value_actor<
+            T,
+            ValueT,
+            insert_key_action
+            >(ref_,value_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_back_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_back_actor.hpp
new file mode 100644 (file)
index 0000000..cbdd790
--- /dev/null
@@ -0,0 +1,101 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //
+    //  A semantic action policy that appends a value to the back of a
+    //  container.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does and what ref, value_ref must support):
+    //      ref.push_back( value );
+    //      ref.push_back( T::value_type(first,last) );
+    //      ref.push_back( value_ref );
+    //
+    //  Policy name:
+    //      push_back_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_value_actor, push_back_a( ref );
+    //      ref_const_ref_actor, push_back_a( ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_value_actor and ref_const_ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct push_back_action
+    {
+        template<
+            typename T,
+            typename ValueT
+        >
+        void act(T& ref_, ValueT const& value_) const
+        {
+            ref_.push_back( value_ );
+        }
+        template<
+            typename T,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::value_type value_type;
+            value_type value(first_,last_);
+
+            ref_.push_back( value );
+        }
+    };
+
+//  Deprecated interface. Use push_back_a
+    template<typename T>
+    inline ref_value_actor<T,push_back_action> 
+    append(T& ref_)
+    {
+        return ref_value_actor<T,push_back_action>(ref_);
+    }
+
+    template<typename T>
+    inline ref_value_actor<T,push_back_action> 
+    push_back_a(T& ref_)
+    {
+        return ref_value_actor<T,push_back_action>(ref_);
+    }
+
+    template<
+        typename T,
+        typename ValueT
+    >
+    inline ref_const_ref_actor<T,ValueT,push_back_action> 
+    push_back_a(
+        T& ref_,
+        ValueT const& value_
+    )
+    {
+        return ref_const_ref_actor<T,ValueT,push_back_action>(ref_,value_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_front_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/push_front_actor.hpp
new file mode 100644 (file)
index 0000000..43cb183
--- /dev/null
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //
+    //  A semantic action policy that appends a value to the front of a
+    //  container.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does and what ref, value_ref must support):
+    //      ref.push_front( value );
+    //      ref.push_front( T::value_type(first,last) );
+    //      ref.push_front( value_ref );
+    //
+    //  Policy name:
+    //      push_front_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_value_actor, push_front_a( ref );
+    //      ref_const_ref_actor, push_front_a( ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_value_actor and ref_const_ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    struct push_front_action
+    {
+        template<
+            typename T,
+            typename ValueT
+        >
+        void act(T& ref_, ValueT const& value_) const
+        {
+            ref_.push_front( value_ );
+        }
+        template<
+            typename T,
+            typename IteratorT
+        >
+        void act(
+            T& ref_,
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            typedef typename T::value_type value_type;
+            value_type value(first_,last_);
+
+            ref_.push_front( value );
+        }
+    };
+
+    template<typename T>
+    inline ref_value_actor<T,push_front_action> push_front_a(T& ref_)
+    {
+        return ref_value_actor<T,push_front_action>(ref_);
+    }
+
+    template<
+        typename T,
+        typename ValueT
+    >
+    inline ref_const_ref_actor<T,ValueT,push_front_action> push_front_a(
+        T& ref_,
+        ValueT const& value_
+    )
+    {
+        return ref_const_ref_actor<T,ValueT,push_front_action>(ref_,value_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_actor.hpp
new file mode 100644 (file)
index 0000000..4cf7a47
--- /dev/null
@@ -0,0 +1,70 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy holder. This holder stores a reference to ref,
+    //  act methods are fead with this reference. The parse result is not used
+    //  by this holder.
+    //
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Constructor:
+    //      ...(T& ref_);
+    //      where ref_ is stored.
+    //
+    //  Action calls:
+    //      act(ref);
+    //
+    //  () operators: both
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T,
+        typename ActionT
+    >
+    class ref_actor : public ActionT
+    {
+    private:
+        T& ref;
+    public:
+        explicit
+        ref_actor(T& ref_)
+        : ref(ref_){}
+
+
+        template<typename T2>
+        void operator()(T2 const& /*val*/) const
+        {
+            this->act(ref); // defined in ActionT
+        }
+
+
+        template<typename IteratorT>
+        void operator()(
+            IteratorT const& /*first*/,
+            IteratorT const& /*last*/
+            ) const
+        {
+            this->act(ref); // defined in ActionT
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp
new file mode 100644 (file)
index 0000000..80ee6eb
--- /dev/null
@@ -0,0 +1,78 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy holder. This holder stores a reference to ref
+    //  and a const reference to value_ref.
+    //  act methods are feed with ref and value_ref. The parse result is
+    //  not used by this holder.
+    //
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Constructor:
+    //      ...(T& ref_, ValueT const& value_ref_);
+    //      where ref_ and value_ref_ are stored in the holder.
+    //
+    //  Action calls:
+    //      act(ref, value_ref);
+    //
+    //  () operators: both
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T,
+        typename ValueT,
+        typename ActionT
+    >
+    class ref_const_ref_actor : public ActionT
+    {
+    private:
+        T& ref;
+        ValueT const& value_ref;
+    public:
+        ref_const_ref_actor(
+            T& ref_,
+            ValueT const& value_ref_
+            )
+        :
+            ref(ref_),
+            value_ref(value_ref_)
+        {}
+
+
+        template<typename T2>
+        void operator()(T2 const& /*val*/) const
+        {
+            this->act(ref,value_ref); // defined in ActionT
+        }
+
+
+        template<typename IteratorT>
+            void operator()(
+            IteratorT const& /*first*/,
+            IteratorT const& /*last*/
+            ) const
+        {
+            this->act(ref,value_ref); // defined in ActionT
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp
new file mode 100644 (file)
index 0000000..2072334
--- /dev/null
@@ -0,0 +1,87 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy holder. This holder stores a reference to ref
+    //  , a const reference to value1_ref and a const reference to value2_ref.
+    //  Typically, value1_ref is a key and value2_ref is value for associative
+    //  container operations.
+    //  act methods are feed with ref, value1_ref, value2_ref. The parse result
+    //  is not used by this holder.
+    //
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Constructor:
+    //      ...(
+    //          T& ref_,
+    //          Value1T const& value1_ref_,
+    //          Value2T const& value2_ref_ );
+    //      where ref_, value1_ref and value2_ref_ are stored in the holder.
+    //
+    //  Action calls:
+    //      act(ref, value1_ref, value2_ref);
+    //
+    //  () operators: both
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T,
+        typename Value1T,
+        typename Value2T,
+        typename ActionT
+    >
+    class ref_const_ref_const_ref_actor : public ActionT
+    {
+    private:
+        T& ref;
+        Value1T const& value1_ref;
+        Value2T const& value2_ref;
+    public:
+        ref_const_ref_const_ref_actor(
+            T& ref_,
+            Value1T const& value1_ref_,
+            Value2T const& value2_ref_
+            )
+        :
+            ref(ref_),
+            value1_ref(value1_ref_),
+            value2_ref(value2_ref_)
+        {}
+
+
+        template<typename T2>
+        void operator()(T2 const& /*val*/) const
+        {
+            this->act(ref,value1_ref,value2_ref); // defined in ActionT
+        }
+
+
+        template<typename IteratorT>
+            void operator()(
+            IteratorT const& /*first*/,
+            IteratorT const& /*last*/
+            ) const
+        {
+            this->act(ref,value1_ref,value2_ref); // defined in ActionT
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp
new file mode 100644 (file)
index 0000000..56e5fc9
--- /dev/null
@@ -0,0 +1,78 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy holder. This holder stores a reference to ref
+    //  and a const reference to value_ref.
+    //  act methods are feed with ref, value_ref and the parse result.
+    //
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Constructor:
+    //      ...(T& ref_, ValueT const& value_ref_);
+    //      where ref_ and value_ref_ are stored in the holder.
+    //
+    //  Action calls:
+    //      act(ref, value_ref, value);
+    //      act(ref, value_ref, first, last);
+    //
+    //  () operators: both
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T,
+        typename ValueT,
+        typename ActionT
+    >
+    class ref_const_ref_value_actor : public ActionT
+    {
+    private:
+        T& ref;
+        ValueT const& value_ref;
+    public:
+        ref_const_ref_value_actor(
+            T& ref_,
+            ValueT const& value_ref_
+            )
+        :
+            ref(ref_),
+            value_ref(value_ref_)
+        {}
+
+
+        template<typename T2>
+        void operator()(T2 const& val_) const
+        {
+            this->act(ref,value_ref,val_); // defined in ActionT
+        }
+
+
+        template<typename IteratorT>
+            void operator()(
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            this->act(ref,value_ref,first_,last_); // defined in ActionT
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_value_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/ref_value_actor.hpp
new file mode 100644 (file)
index 0000000..596e219
--- /dev/null
@@ -0,0 +1,82 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    Copyright (c) 2011 Bryce Lelbach
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy holder. This holder stores a reference to ref.
+    //  act methods are feed with ref and the parse result.
+    //
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Constructor:
+    //      ...(T& ref_);
+    //      where ref_ is stored.
+    //
+    //  Action calls:
+    //      act(ref, value);
+    //      act(ref, first,last);
+    //
+    //  () operators: both
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T,
+        typename ActionT
+    >
+    class ref_value_actor : public ActionT
+    {
+    private:
+        T& ref;
+    public:
+        explicit
+        ref_value_actor(T& ref_)
+        : ref(ref_){}
+
+
+        template<typename T2>
+        void operator()(T2 const& val_) const
+        {
+            this->act(ref,val_); // defined in ActionT
+        }
+
+
+        template<typename IteratorT>
+        void operator()(
+            IteratorT const& first_,
+            IteratorT const& last_
+            ) const
+        {
+            this->act(ref,first_,last_); // defined in ActionT
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/swap_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/swap_actor.hpp
new file mode 100644 (file)
index 0000000..f3fc5e4
--- /dev/null
@@ -0,0 +1,85 @@
+/*=============================================================================
+    Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Summary:
+    //  A semantic action policy that swaps values.
+    //  (This doc uses convention available in actors.hpp)
+    //
+    //  Actions (what it does):
+    //      ref.swap( value_ref );
+    //
+    //  Policy name:
+    //      swap_action
+    //
+    //  Policy holder, corresponding helper method:
+    //      ref_value_actor, swap_a( ref );
+    //      ref_const_ref_actor, swap_a( ref, value_ref );
+    //
+    //  () operators: both
+    //
+    //  See also ref_value_actor and ref_const_ref_actor for more details.
+    ///////////////////////////////////////////////////////////////////////////
+    template<
+        typename T
+    >
+    class swap_actor
+    {
+    private:
+        T& ref;
+        T& swap_ref;
+
+    public:
+        swap_actor(
+            T& ref_,
+            T& swap_ref_)
+            : ref(ref_), swap_ref(swap_ref_)
+        {};
+
+        template<typename T2>
+        void operator()(T2 const& /*val*/) const
+        {
+            ref.swap(swap_ref);
+        }
+
+
+        template<typename IteratorT>
+        void operator()(
+            IteratorT const& /*first*/,
+            IteratorT const& /*last*/
+            ) const
+        {
+            ref.swap(swap_ref);
+        }
+    };
+
+    template<
+        typename T
+    >
+    inline swap_actor<T> swap_a(
+        T& ref_,
+        T& swap_ref_
+    )
+    {
+        return swap_actor<T>(ref_,swap_ref_);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/actor/typeof.hpp
new file mode 100644 (file)
index 0000000..9d4b91c
--- /dev/null
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
+#define BOOST_SPIRIT_ACTOR_TYPEOF_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/typeof/typeof.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template<typename T, typename ActionT> class ref_actor;
+
+    template<typename T, typename ActionT> class ref_value_actor;
+
+    template<typename T, typename ValueT, typename ActionT> 
+
+    class ref_const_ref_actor;
+    template<typename T, typename ValueT, typename ActionT> 
+
+    class ref_const_ref_value_actor;
+    template<typename T, typename Value1T, typename Value2T, typename ActionT> 
+
+    class ref_const_ref_const_ref_actor;
+
+    struct assign_action; 
+    struct clear_action;
+    struct increment_action;
+    struct decrement_action;
+    struct push_back_action;
+    struct push_front_action;
+    struct insert_key_action;
+    struct insert_at_action;
+    struct assign_key_action;
+    
+    template<typename T> class swap_actor;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_actor,2)
+#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
+// this part also lives in the core master header and is deprecated there...
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_value_actor,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_const_ref_actor,3)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::assign_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::push_back_action)
+#endif
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_const_ref_value_actor,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_const_ref_const_ref_actor,4)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::clear_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::increment_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::decrement_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::push_front_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::insert_key_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::insert_at_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::assign_key_action)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::swap_actor,1)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute.hpp
new file mode 100644 (file)
index 0000000..35b306b
--- /dev/null
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
+#define BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Attributes
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Phoenix predefined maximum limit. This limit defines the maximum
+//  number of elements a tuple can hold. This number defaults to 3. The
+//  actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(PHOENIX_LIMIT)
+#define PHOENIX_LIMIT 6
+#endif // !defined(PHOENIX_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/attribute/parametric.hpp>
+#include <boost/spirit/home/classic/attribute/closure.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure.hpp
new file mode 100644 (file)
index 0000000..681bc7f
--- /dev/null
@@ -0,0 +1,1083 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CLOSURE_HPP
+#define BOOST_SPIRIT_CLOSURE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/home/classic/attribute/parametric.hpp>
+#include <boost/spirit/home/classic/attribute/closure_context.hpp>
+#include <boost/spirit/home/classic/attribute/closure_fwd.hpp>
+
+#include <boost/spirit/home/classic/phoenix/closures.hpp>
+#include <boost/spirit/home/classic/phoenix/primitives.hpp>
+#include <boost/spirit/home/classic/phoenix/casts.hpp>
+#include <boost/spirit/home/classic/phoenix/operators.hpp>
+#include <boost/spirit/home/classic/phoenix/tuple_helpers.hpp>
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit predefined maximum closure limit. This limit defines the maximum
+//  number of elements a closure can hold. This number defaults to 3. The
+//  actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//
+//  It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
+#define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT and SPIRIT_CLOSURE_LIMIT <= 15
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  closure_context class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ClosureT>
+    class closure_context : public parser_context_base
+    {
+    public:
+
+        typedef typename ::phoenix::tuple_element<0,
+            typename ClosureT::tuple_t>::type attr_t;
+        typedef ClosureT base_t;
+        typedef closure_context_linker<closure_context<ClosureT> >
+        context_linker_t;
+
+        closure_context(ClosureT const& clos)
+        : frame(clos) {}
+
+        ~closure_context() {}
+
+        template <typename ParserT, typename ScannerT>
+        void pre_parse(ParserT const&, ScannerT const&) {}
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+        { hit.value(frame[::phoenix::tuple_index<0>()]); return hit; }
+
+    private:
+
+        ::phoenix::closure_frame<typename ClosureT::phoenix_closure_t> frame;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  init_closure_context class
+    //
+    //      The init_closure_context class is a special parser context type
+    //      which additionally initializes a closure contained in the derived
+    //      parser with values from a given tuple. Please note, that this
+    //      given tuple does not contain the required values directly, it
+    //      contains phoenix::actor objects. These actors have to be
+    //      dereferenced to gain the values to be used for initialization
+    //      (this is done by the help of the phoenix::convert_actors<>
+    //      template).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <typename ClosureT>
+    class init_closure_context : public parser_context_base
+    {
+        typedef typename ClosureT::tuple_t      tuple_t;
+        typedef typename ClosureT::closure_t    closure_t;
+
+    public:
+
+        init_closure_context(ClosureT const& clos)
+        : frame(clos.subject(), ::phoenix::convert_actors<tuple_t>(clos.init)) {}
+
+        ~init_closure_context() {}
+
+        template <typename ParserT, typename ScannerT>
+        void pre_parse(ParserT const& /*p*/, ScannerT const&) {}
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+        { hit.value(frame[::phoenix::tuple_index<0>()]); return hit; }
+
+    private:
+
+        ::phoenix::closure_frame<closure_t> frame;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  init_closure_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT, typename ActorTupleT>
+    struct init_closure_parser
+    : public unary<ParserT, parser<init_closure_parser<ParserT, ActorTupleT> > >
+    {
+        typedef init_closure_parser<ParserT, ActorTupleT>           self_t;
+        typedef unary<ParserT, parser<self_t> >                     base_t;
+        typedef typename ParserT::phoenix_closure_t                 closure_t;
+        typedef typename ParserT::tuple_t                           tuple_t;
+        typedef typename ::phoenix::tuple_element<0, tuple_t>::type   attr_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, attr_t>::type type;
+        };
+
+        init_closure_parser(ParserT const& p, ActorTupleT const& init_)
+        : base_t(p), init(init_) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse_main(ScannerT const& scan) const
+        {
+            return this->subject().parse_main(scan);
+        }
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef init_closure_context<self_t> init_context_t;
+            typedef parser_scanner_linker<ScannerT> scanner_t;
+            typedef closure_context_linker<init_context_t> context_t;
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            BOOST_SPIRIT_CONTEXT_PARSE(
+                scan, *this, scanner_t, context_t, result_t);
+        }
+
+        ActorTupleT init;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  closure class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+            typename DerivedT
+        ,   typename T0
+        ,   typename T1
+        ,   typename T2
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+        ,   typename T3
+        ,   typename T4
+        ,   typename T5
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+        ,   typename T6
+        ,   typename T7
+        ,   typename T8
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+        ,   typename T9
+        ,   typename T10
+        ,   typename T11
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+        ,   typename T12
+        ,   typename T13
+        ,   typename T14
+    #endif
+    #endif
+    #endif
+    #endif
+    >
+    struct closure :
+        public ::phoenix::closure<
+            T0, T1, T2
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+        ,   T3, T4, T5
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+        ,   T6, T7, T8
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+        ,   T9, T10, T11
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+        ,   T12, T13, T14
+    #endif
+    #endif
+    #endif
+    #endif
+        >
+    {
+        typedef ::phoenix::closure<
+                T0, T1, T2
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+            ,   T3, T4, T5
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+            ,   T6, T7, T8
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+            ,   T9, T10, T11
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+            ,   T12, T13, T14
+    #endif
+    #endif
+    #endif
+    #endif
+            > phoenix_closure_t;
+
+        typedef closure_context<DerivedT> context_t;
+
+        template <typename DerivedT2>
+        struct aux
+        {
+            DerivedT2& aux_derived()
+            { return *static_cast<DerivedT2*>(this); }
+
+            DerivedT2 const& aux_derived() const
+            { return *static_cast<DerivedT2 const*>(this); }
+
+        // initialization functions
+            template <typename A>
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type
+                >
+            >
+            operator()(A const &a) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef ::phoenix::tuple<a_t> actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a)
+                        )
+                    );
+            }
+
+            template <typename A, typename B>
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type
+                >
+            >
+            operator()(A const &a, B const &b) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef ::phoenix::tuple<a_t, b_t> actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b)
+                        )
+                    );
+            }
+
+            template <typename A, typename B, typename C>
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type
+                >
+            >
+            operator()(A const &a, B const &b, C const &c) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef ::phoenix::tuple<a_t, b_t, c_t> actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c)
+                        )
+                    );
+            }
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+
+            template <
+                typename A, typename B, typename C, typename D
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f)
+                        )
+                    );
+            }
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i)
+                        )
+                    );
+            }
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J,
+                typename K
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type,
+                    typename ::phoenix::as_actor<K>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j,
+                K const &k
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef typename ::phoenix::as_actor<K>::type k_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+                            k_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j),
+                            ::phoenix::as_actor<K>::convert(k)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J,
+                typename K, typename L
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type,
+                    typename ::phoenix::as_actor<K>::type,
+                    typename ::phoenix::as_actor<L>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j,
+                K const &k, L const &l
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef typename ::phoenix::as_actor<K>::type k_t;
+                typedef typename ::phoenix::as_actor<L>::type l_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+                            k_t, l_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j),
+                            ::phoenix::as_actor<K>::convert(k),
+                            ::phoenix::as_actor<L>::convert(l)
+                        )
+                    );
+            }
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J,
+                typename K, typename L, typename M
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type,
+                    typename ::phoenix::as_actor<K>::type,
+                    typename ::phoenix::as_actor<L>::type,
+                    typename ::phoenix::as_actor<M>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j,
+                K const &k, L const &l, M const &m
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef typename ::phoenix::as_actor<K>::type k_t;
+                typedef typename ::phoenix::as_actor<L>::type l_t;
+                typedef typename ::phoenix::as_actor<M>::type m_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+                            k_t, l_t, m_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j),
+                            ::phoenix::as_actor<K>::convert(k),
+                            ::phoenix::as_actor<L>::convert(l),
+                            ::phoenix::as_actor<M>::convert(m)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J,
+                typename K, typename L, typename M, typename N
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type,
+                    typename ::phoenix::as_actor<K>::type,
+                    typename ::phoenix::as_actor<L>::type,
+                    typename ::phoenix::as_actor<M>::type,
+                    typename ::phoenix::as_actor<N>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j,
+                K const &k, L const &l, M const &m, N const &n
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef typename ::phoenix::as_actor<K>::type k_t;
+                typedef typename ::phoenix::as_actor<L>::type l_t;
+                typedef typename ::phoenix::as_actor<M>::type m_t;
+                typedef typename ::phoenix::as_actor<N>::type n_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+                            k_t, l_t, m_t, n_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j),
+                            ::phoenix::as_actor<K>::convert(k),
+                            ::phoenix::as_actor<L>::convert(l),
+                            ::phoenix::as_actor<M>::convert(m),
+                            ::phoenix::as_actor<N>::convert(n)
+                        )
+                    );
+            }
+
+            template <
+                typename A, typename B, typename C, typename D, typename E,
+                typename F, typename G, typename H, typename I, typename J,
+                typename K, typename L, typename M, typename N, typename O
+            >
+            init_closure_parser<
+                DerivedT2,
+                ::phoenix::tuple<
+                    typename ::phoenix::as_actor<A>::type,
+                    typename ::phoenix::as_actor<B>::type,
+                    typename ::phoenix::as_actor<C>::type,
+                    typename ::phoenix::as_actor<D>::type,
+                    typename ::phoenix::as_actor<E>::type,
+                    typename ::phoenix::as_actor<F>::type,
+                    typename ::phoenix::as_actor<G>::type,
+                    typename ::phoenix::as_actor<H>::type,
+                    typename ::phoenix::as_actor<I>::type,
+                    typename ::phoenix::as_actor<J>::type,
+                    typename ::phoenix::as_actor<K>::type,
+                    typename ::phoenix::as_actor<L>::type,
+                    typename ::phoenix::as_actor<M>::type,
+                    typename ::phoenix::as_actor<N>::type,
+                    typename ::phoenix::as_actor<O>::type
+                >
+            >
+            operator()(
+                A const &a, B const &b, C const &c, D const &d, E const &e,
+                F const &f, G const &g, H const &h, I const &i, J const &j,
+                K const &k, L const &l, M const &m, N const &n, O const &o
+            ) const
+            {
+                typedef typename ::phoenix::as_actor<A>::type a_t;
+                typedef typename ::phoenix::as_actor<B>::type b_t;
+                typedef typename ::phoenix::as_actor<C>::type c_t;
+                typedef typename ::phoenix::as_actor<D>::type d_t;
+                typedef typename ::phoenix::as_actor<E>::type e_t;
+                typedef typename ::phoenix::as_actor<F>::type f_t;
+                typedef typename ::phoenix::as_actor<G>::type g_t;
+                typedef typename ::phoenix::as_actor<H>::type h_t;
+                typedef typename ::phoenix::as_actor<I>::type i_t;
+                typedef typename ::phoenix::as_actor<J>::type j_t;
+                typedef typename ::phoenix::as_actor<K>::type k_t;
+                typedef typename ::phoenix::as_actor<L>::type l_t;
+                typedef typename ::phoenix::as_actor<M>::type m_t;
+                typedef typename ::phoenix::as_actor<N>::type n_t;
+                typedef typename ::phoenix::as_actor<O>::type o_t;
+                typedef ::phoenix::tuple<
+                            a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+                            k_t, l_t, m_t, n_t, o_t
+                        > actor_tuple_t;
+
+                return init_closure_parser<DerivedT2, actor_tuple_t>(
+                        aux_derived(),
+                        actor_tuple_t(
+                            ::phoenix::as_actor<A>::convert(a),
+                            ::phoenix::as_actor<B>::convert(b),
+                            ::phoenix::as_actor<C>::convert(c),
+                            ::phoenix::as_actor<D>::convert(d),
+                            ::phoenix::as_actor<E>::convert(e),
+                            ::phoenix::as_actor<F>::convert(f),
+                            ::phoenix::as_actor<G>::convert(g),
+                            ::phoenix::as_actor<H>::convert(h),
+                            ::phoenix::as_actor<I>::convert(i),
+                            ::phoenix::as_actor<J>::convert(j),
+                            ::phoenix::as_actor<K>::convert(k),
+                            ::phoenix::as_actor<L>::convert(l),
+                            ::phoenix::as_actor<M>::convert(m),
+                            ::phoenix::as_actor<N>::convert(n),
+                            ::phoenix::as_actor<O>::convert(o)
+                        )
+                    );
+            }
+
+    #endif
+    #endif
+    #endif
+    #endif
+        };
+
+        ~closure() {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  overloads for chseq_p and str_p taking in phoenix actors
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ActorT>
+    struct container_begin
+    {
+        typedef container_begin<ActorT> self_t;
+
+        template <typename TupleT>
+        struct result
+        {
+            typedef typename ::phoenix::actor_result<ActorT, TupleT>
+                ::plain_type::iterator type;
+        };
+
+        container_begin(ActorT actor_)
+        : actor(actor_) {}
+
+        template <typename TupleT>
+        typename ::phoenix::actor_result<self_t, TupleT>::type
+        eval(TupleT const& /*args*/) const
+        { return actor().begin(); }
+
+        ActorT actor;
+    };
+
+    template <typename ActorT>
+    struct container_end
+    {
+        typedef container_begin<ActorT> self_t;
+
+        template <typename TupleT>
+        struct result
+        {
+            typedef typename ::phoenix::actor_result<ActorT, TupleT>
+                ::plain_type::iterator type;
+        };
+
+        container_end(ActorT actor_)
+        : actor(actor_) {}
+
+        template <typename TupleT>
+        typename ::phoenix::actor_result<self_t, TupleT>::type
+        eval(TupleT const& /*args*/) const
+        { return actor().end(); }
+
+        ActorT actor;
+    };
+
+    template <typename BaseT>
+    inline f_chseq<
+        ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >,
+        ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
+    >
+    f_chseq_p(::phoenix::actor<BaseT> const& a)
+    {
+        typedef ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >
+            container_begin_t;
+        typedef ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
+            container_end_t;
+        typedef f_chseq<container_begin_t, container_end_t> result_t;
+
+        return result_t(container_begin_t(a), container_end_t(a));
+    }
+
+    template <typename BaseT>
+    inline f_strlit<
+        ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >,
+        ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
+    >
+    f_str_p(::phoenix::actor<BaseT> const& a)
+    {
+        typedef ::phoenix::actor<container_begin< ::phoenix::actor<BaseT> > >
+            container_begin_t;
+        typedef ::phoenix::actor<container_end< ::phoenix::actor<BaseT> > >
+            container_end_t;
+        typedef f_strlit<container_begin_t, container_end_t> result_t;
+
+        return result_t(container_begin_t(a), container_end_t(a));
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_context.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_context.hpp
new file mode 100644 (file)
index 0000000..e366854
--- /dev/null
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_HPP)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  closure_context_linker
+//  { helper template for the closure extendability }
+//
+//      This classes can be 'overloaded' (defined elsewhere), to plug
+//      in additional functionality into the closure parsing process.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename ContextT>
+struct closure_context_linker : public ContextT
+{
+    template <typename ParserT>
+    closure_context_linker(ParserT const& p)
+    : ContextT(p) {}
+
+    template <typename ParserT, typename ScannerT>
+    void pre_parse(ParserT const& p, ScannerT const& scan)
+    { ContextT::pre_parse(p, scan); }
+
+    template <typename ResultT, typename ParserT, typename ScannerT>
+    ResultT&
+    post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
+    { return ContextT::post_parse(hit, p, scan); }
+};
+
+#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/closure_fwd.hpp
new file mode 100644 (file)
index 0000000..033d619
--- /dev/null
@@ -0,0 +1,69 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLOSURE_FWD_HPP)
+#define BOOST_SPIRIT_CLOSURE_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
+#   define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template<typename ClosureT>
+    class closure_context;
+
+    template <typename ClosureT>
+    class init_closure_context;
+
+    template <typename ParserT, typename ActorTupleT>
+    struct init_closure_parser;
+
+    template <
+            typename DerivedT
+        ,   typename T0 = ::phoenix::nil_t
+        ,   typename T1 = ::phoenix::nil_t
+        ,   typename T2 = ::phoenix::nil_t
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+        ,   typename T3 = ::phoenix::nil_t
+        ,   typename T4 = ::phoenix::nil_t
+        ,   typename T5 = ::phoenix::nil_t
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+        ,   typename T6 = ::phoenix::nil_t
+        ,   typename T7 = ::phoenix::nil_t
+        ,   typename T8 = ::phoenix::nil_t
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+        ,   typename T9 = ::phoenix::nil_t
+        ,   typename T10 = ::phoenix::nil_t
+        ,   typename T11 = ::phoenix::nil_t
+
+    #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+        ,   typename T12 = ::phoenix::nil_t
+        ,   typename T13 = ::phoenix::nil_t
+        ,   typename T14 = ::phoenix::nil_t
+
+    #endif
+    #endif
+    #endif
+    #endif
+    >
+    struct closure;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/parametric.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/parametric.hpp
new file mode 100644 (file)
index 0000000..0c0b11a
--- /dev/null
@@ -0,0 +1,144 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_PARAMETRIC_HPP
+#define BOOST_SPIRIT_PARAMETRIC_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  f_chlit class [ functional version of chlit ]
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ChGenT>
+    struct f_chlit : public char_parser<f_chlit<ChGenT> >
+    {
+        f_chlit(ChGenT chgen_)
+        : chgen(chgen_) {}
+
+        template <typename T>
+        bool test(T ch) const
+        { return ch == chgen(); }
+
+        ChGenT   chgen;
+    };
+
+    template <typename ChGenT>
+    inline f_chlit<ChGenT>
+    f_ch_p(ChGenT chgen)
+    { return f_chlit<ChGenT>(chgen); }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  f_range class [ functional version of range ]
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ChGenAT, typename ChGenBT>
+    struct f_range : public char_parser<f_range<ChGenAT, ChGenBT> >
+    {
+        f_range(ChGenAT first_, ChGenBT last_)
+        : first(first_), last(last_)
+        {}
+
+        template <typename T>
+        bool test(T ch) const
+        {
+            BOOST_SPIRIT_ASSERT(first() <= last());
+            return (ch >= first()) && (ch <= last());
+        }
+
+        ChGenAT first;
+        ChGenBT last;
+    };
+
+    template <typename ChGenAT, typename ChGenBT>
+    inline f_range<ChGenAT, ChGenBT>
+    f_range_p(ChGenAT first, ChGenBT last)
+    { return f_range<ChGenAT, ChGenBT>(first, last); }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  f_chseq class [ functional version of chseq ]
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IterGenAT, typename IterGenBT>
+    class f_chseq : public parser<f_chseq<IterGenAT, IterGenBT> >
+    {
+    public:
+
+        typedef f_chseq<IterGenAT, IterGenBT> self_t;
+
+        f_chseq(IterGenAT first_, IterGenBT last_)
+        : first(first_), last(last_) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::string_parser_parse<result_t>(first(), last(), scan);
+        }
+
+    private:
+
+        IterGenAT first;
+        IterGenBT last;
+    };
+
+    template <typename IterGenAT, typename IterGenBT>
+    inline f_chseq<IterGenAT, IterGenBT>
+    f_chseq_p(IterGenAT first, IterGenBT last)
+    { return f_chseq<IterGenAT, IterGenBT>(first, last); }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  f_strlit class [ functional version of strlit ]
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IterGenAT, typename IterGenBT>
+    class f_strlit : public parser<f_strlit<IterGenAT, IterGenBT> >
+    {
+    public:
+
+        typedef f_strlit<IterGenAT, IterGenBT> self_t;
+
+        f_strlit(IterGenAT first, IterGenBT last)
+        : seq(first, last) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::contiguous_parser_parse<result_t>
+                (seq, scan, scan);
+        }
+
+    private:
+
+        f_chseq<IterGenAT, IterGenBT> seq;
+    };
+
+    template <typename IterGenAT, typename IterGenBT>
+    inline f_strlit<IterGenAT, IterGenBT>
+    f_str_p(IterGenAT first, IterGenBT last)
+    { return f_strlit<IterGenAT, IterGenBT>(first, last); }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/attribute/typeof.hpp
new file mode 100644 (file)
index 0000000..16bbd10
--- /dev/null
@@ -0,0 +1,67 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP)
+#define BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/typeof.hpp>
+#include <boost/spirit/home/classic/attribute/closure_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // parametric.hpp
+    template<typename ChGenT>                        struct f_chlit;
+    template<typename ChGenAT, typename ChGenBT>     struct f_range;
+    template<typename IterGenAT, typename IterGenBT> class f_chseq;
+    template<typename IterGenAT, typename IterGenBT> class f_strlit;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// parametric.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::f_chlit,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::f_range,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::f_chseq,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::f_strlit,2)
+
+
+// closure.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure,BOOST_SPIRIT_CLOSURE_LIMIT)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure_context,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::init_closure_context,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::init_closure_parser,2)
+
+
+#if BOOST_SPIRIT_CLOSURE_LIMIT  > 12
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure,12)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure, 9)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure, 6)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure, 3)
+#endif
+
+
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core.hpp
new file mode 100644 (file)
index 0000000..4f9d806
--- /dev/null
@@ -0,0 +1,73 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    Copyright (c) 2002-2003 Martin Wille
+    Copyright (c) 2002 Raghavendra Satish
+    Copyright (c) 2001 Bruce Florman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CORE_MAIN_HPP)
+#define BOOST_SPIRIT_CORE_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+#include <boost/spirit/home/classic/debug.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit.Core includes
+//
+///////////////////////////////////////////////////////////////////////////////
+
+//  Spirit.Core.Kernel
+#include <boost/spirit/home/classic/core/config.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+#include <boost/spirit/home/classic/core/match.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+//  Spirit.Core.Primitives
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/primitives/numerics.hpp>
+
+//  Spirit.Core.Scanner
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+#include <boost/spirit/home/classic/core/scanner/skipper.hpp>
+
+//  Spirit.Core.NonTerminal
+#include <boost/spirit/home/classic/core/non_terminal/subrule.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/grammar.hpp>
+
+//  Spirit.Core.Composite
+#include <boost/spirit/home/classic/core/composite/actions.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+#include <boost/spirit/home/classic/core/composite/sequence.hpp>
+#include <boost/spirit/home/classic/core/composite/sequential_and.hpp>
+#include <boost/spirit/home/classic/core/composite/sequential_or.hpp>
+#include <boost/spirit/home/classic/core/composite/alternative.hpp>
+#include <boost/spirit/home/classic/core/composite/difference.hpp>
+#include <boost/spirit/home/classic/core/composite/intersection.hpp>
+#include <boost/spirit/home/classic/core/composite/exclusive_or.hpp>
+#include <boost/spirit/home/classic/core/composite/kleene_star.hpp>
+#include <boost/spirit/home/classic/core/composite/positive.hpp>
+#include <boost/spirit/home/classic/core/composite/optional.hpp>
+#include <boost/spirit/home/classic/core/composite/list.hpp>
+#include <boost/spirit/home/classic/core/composite/no_actions.hpp>
+
+//  Deprecated interface includes
+#include <boost/spirit/home/classic/actor/assign_actor.hpp>
+#include <boost/spirit/home/classic/actor/push_back_actor.hpp>
+
+#if defined(BOOST_SPIRIT_DEBUG)
+    //////////////////////////////////
+    #include <boost/spirit/home/classic/debug/parser_names.hpp>
+
+#endif // BOOST_SPIRIT_DEBUG
+
+#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/assert.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/assert.hpp
new file mode 100644 (file)
index 0000000..47b1b39
--- /dev/null
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASSERT_HPP)
+#define BOOST_SPIRIT_ASSERT_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  BOOST_SPIRIT_ASSERT is used throughout the framework.  It can be
+//  overridden by the user. If BOOST_SPIRIT_ASSERT_EXCEPTION is defined,
+//  then that will be thrown, otherwise, BOOST_SPIRIT_ASSERT simply turns
+//  into a plain BOOST_ASSERT()
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_ASSERT)
+#if defined(NDEBUG)
+    #define BOOST_SPIRIT_ASSERT(x)
+#elif defined (BOOST_SPIRIT_ASSERT_EXCEPTION)
+    #define BOOST_SPIRIT_ASSERT_AUX(f, l, x) BOOST_SPIRIT_ASSERT_AUX2(f, l, x)
+    #define BOOST_SPIRIT_ASSERT_AUX2(f, l, x)                                   \
+    do{ if (!(x)) boost::throw_exception(                                       \
+        BOOST_SPIRIT_ASSERT_EXCEPTION(f "(" #l "): " #x)); } while(0)
+    #define BOOST_SPIRIT_ASSERT(x) BOOST_SPIRIT_ASSERT_AUX(__FILE__, __LINE__, x)
+#else
+    #include <boost/assert.hpp>
+    #define BOOST_SPIRIT_ASSERT(x) BOOST_ASSERT(x)
+#endif
+#endif // !defined(BOOST_SPIRIT_ASSERT)
+
+#endif // BOOST_SPIRIT_ASSERT_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/actions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/actions.hpp
new file mode 100644 (file)
index 0000000..864211f
--- /dev/null
@@ -0,0 +1,136 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTIONS_HPP
+#define BOOST_SPIRIT_ACTIONS_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  action class
+    //
+    //      The action class binds a parser with a user defined semantic
+    //      action. Instances of action are never created manually. Instead,
+    //      action objects are typically created indirectly through
+    //      expression templates of the form:
+    //
+    //          p[f]
+    //
+    //      where p is a parser and f is a function or functor. The semantic
+    //      action may be a function or a functor. When the parser is
+    //      successful, the actor calls the scanner's action_policy policy
+    //      (see scanner.hpp):
+    //
+    //          scan.do_action(actor, attribute, first, last);
+    //
+    //      passing in these information:
+    //
+    //          actor:        The action's function or functor
+    //          attribute:    The match (returned by the parser) object's
+    //                        attribute (see match.hpp)
+    //          first:        Iterator pointing to the start of the matching
+    //                        portion of the input
+    //          last:         Iterator pointing to one past the end of the
+    //                        matching portion of the input
+    //
+    //      It is the responsibility of the scanner's action_policy policy to
+    //      dispatch the function or functor as it sees fit. The expected
+    //      function or functor signature depends on the parser being
+    //      wrapped. In general, if the attribute type of the parser being
+    //      wrapped is a nil_t, the function or functor expect the signature:
+    //
+    //          void func(Iterator first, Iterator last); // functions
+    //
+    //          struct ftor // functors
+    //          {
+    //              void func(Iterator first, Iterator last) const;
+    //          };
+    //
+    //      where Iterator is the type of the iterator that is being used and
+    //      first and last are the iterators pointing to the matching portion
+    //      of the input.
+    //
+    //      If the attribute type of the parser being wrapped is not a nil_t,
+    //      the function or functor usually expect the signature:
+    //
+    //          void func(T val); // functions
+    //
+    //          struct ftor // functors
+    //          {
+    //              void func(T val) const;
+    //          };
+    //
+    //      where T is the attribute type and val is the attribute value
+    //      returned by the parser being wrapped.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT, typename ActionT>
+    class action : public unary<ParserT, parser<action<ParserT, ActionT> > >
+    {
+    public:
+
+        typedef action<ParserT, ActionT>        self_t;
+        typedef action_parser_category          parser_category_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+        typedef ActionT                         predicate_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        action(ParserT const& p, ActionT const& a)
+        : base_t(p)
+        , actor(a) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename ScannerT::iterator_t iterator_t;
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+
+            scan.at_end(); // allow skipper to take effect
+            iterator_t save = scan.first;
+            result_t hit = this->subject().parse(scan);
+            if (hit)
+            {
+                typename result_t::return_t val = hit.value();
+                scan.do_action(actor, val, save, scan.first);
+            }
+            return hit;
+        }
+
+        ActionT const& predicate() const { return actor; }
+
+    private:
+
+        ActionT actor;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/alternative.hpp
new file mode 100644 (file)
index 0000000..5e472a9
--- /dev/null
@@ -0,0 +1,147 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ALTERNATIVE_HPP)
+#define BOOST_SPIRIT_ALTERNATIVE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  alternative class
+    //
+    //      Handles expressions of the form:
+    //
+    //          a | b
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches a or b. One (not both) of the operands may
+    //      be a literal char, wchar_t or a primitive string char const*,
+    //      wchar_t const*.
+    //
+    //      The expression is short circuit evaluated. b is never touched
+    //      when a is returns a successful match.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct alternative_parser_gen;
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    template <typename A, typename B>
+    struct alternative
+    :   public binary<A, B, parser<alternative<A, B> > >
+    {
+        typedef alternative<A, B>               self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef alternative_parser_gen          parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+    
+        alternative(A const& a, B const& b)
+        : base_t(a, b) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            { // scope for save
+                iterator_t save = scan.first;
+                if (result_t hit = this->left().parse(scan))
+                    return hit;
+                scan.first = save;
+            }
+            return this->right().parse(scan);
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+    
+    struct alternative_parser_gen
+    {
+        template <typename A, typename B>
+        struct result 
+        {
+            typedef 
+                alternative<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                > 
+            type;
+        };
+    
+        template <typename A, typename B>
+        static alternative<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return alternative<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+    
+    template <typename A, typename B>
+    alternative<A, B>
+    operator|(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    alternative<A, chlit<char> >
+    operator|(parser<A> const& a, char b);
+    
+    template <typename B>
+    alternative<chlit<char>, B>
+    operator|(char a, parser<B> const& b);
+    
+    template <typename A>
+    alternative<A, strlit<char const*> >
+    operator|(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    alternative<strlit<char const*>, B>
+    operator|(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    alternative<A, chlit<wchar_t> >
+    operator|(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    alternative<chlit<wchar_t>, B>
+    operator|(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    alternative<A, strlit<wchar_t const*> >
+    operator|(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    alternative<strlit<wchar_t const*>, B>
+    operator|(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/alternative.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/composite.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/composite.hpp
new file mode 100644 (file)
index 0000000..b156cab
--- /dev/null
@@ -0,0 +1,151 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
+#define BOOST_SPIRIT_COMPOSITE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/compressed_pair.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  unary class.
+    //
+    //      Composite class composed of a single subject. This template class
+    //      is parameterized by the subject type S and a base class to
+    //      inherit from, BaseT. The unary class is meant to be a base class
+    //      to inherit from. The inheritance structure, given the BaseT
+    //      template parameter places the unary class in the middle of a
+    //      linear, single parent hierarchy. For instance, given a class S
+    //      and a base class B, a class D can derive from unary:
+    //
+    //          struct D : public unary<S, B> {...};
+    //
+    //      The inheritance structure is thus:
+    //
+    //            B
+    //            |
+    //          unary (has S)
+    //            |
+    //            D
+    //
+    //      The subject can be accessed from the derived class D as:
+    //      this->subject();
+    //
+    //      Typically, the subject S is specified as typename S::embed_t.
+    //      embed_t specifies how the subject is embedded in the composite
+    //      (See parser.hpp for details).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename S, typename BaseT>
+    class unary : public BaseT
+    {
+    public:
+
+        typedef BaseT                                           base_t;
+        typedef typename boost::call_traits<S>::param_type      param_t;
+        typedef typename boost::call_traits<S>::const_reference return_t;
+        typedef S                                               subject_t;
+        typedef typename S::embed_t                             subject_embed_t;
+
+        unary(param_t subj_)
+        : base_t(), subj(subj_) {}
+
+        unary(BaseT const& base, param_t subj_)
+        : base_t(base), subj(subj_) {}
+
+        return_t
+        subject() const
+        { return subj; }
+
+    private:
+
+        subject_embed_t subj;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  binary class.
+    //
+    //      Composite class composed of a pair (left and right). This
+    //      template class is parameterized by the left and right subject
+    //      types A and B and a base class to inherit from, BaseT. The binary
+    //      class is meant to be a base class to inherit from. The
+    //      inheritance structure, given the BaseT template parameter places
+    //      the binary class in the middle of a linear, single parent
+    //      hierarchy. For instance, given classes X and Y and a base class
+    //      B, a class D can derive from binary:
+    //
+    //          struct D : public binary<X, Y, B> {...};
+    //
+    //      The inheritance structure is thus:
+    //
+    //            B
+    //            |
+    //          binary (has X and Y)
+    //            |
+    //            D
+    //
+    //      The left and right subjects can be accessed from the derived
+    //      class D as: this->left(); and this->right();
+    //
+    //      Typically, the pairs X and Y are specified as typename X::embed_t
+    //      and typename Y::embed_t. embed_t specifies how the subject is
+    //      embedded in the composite (See parser.hpp for details).
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B, typename BaseT>
+    class binary : public BaseT
+    {
+    public:
+
+        typedef BaseT                                           base_t;
+        typedef typename boost::call_traits<A>::param_type      left_param_t;
+        typedef typename boost::call_traits<A>::const_reference left_return_t;
+        typedef typename boost::call_traits<B>::param_type      right_param_t;
+        typedef typename boost::call_traits<B>::const_reference right_return_t;
+        typedef A                                               left_t;
+        typedef typename A::embed_t                             left_embed_t;
+        typedef B                                               right_t;
+        typedef typename B::embed_t                             right_embed_t;
+
+        binary(left_param_t a, right_param_t b)
+        : base_t(), subj(a, b) {}
+
+        left_return_t
+        left() const
+        { return subj.first(); }
+
+        right_return_t
+        right() const
+        { return subj.second(); }
+
+    private:
+
+        boost::compressed_pair<left_embed_t, right_embed_t> subj;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/difference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/difference.hpp
new file mode 100644 (file)
index 0000000..7d1cb14
--- /dev/null
@@ -0,0 +1,150 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIFFERENCE_HPP)
+#define BOOST_SPIRIT_DIFFERENCE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  difference: a - b; Matches a but not b
+    //
+    //      Handles expressions of the form:
+    //
+    //          a - b
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches a but not b. One (not both) of the operands
+    //      may be a literal char, wchar_t or a primitive string char const*,
+    //      wchar_t const*.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct difference_parser_gen;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    template <typename A, typename B>
+    struct difference
+    :   public binary<A, B, parser<difference<A, B> > >
+    {
+        typedef difference<A, B>                self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef difference_parser_gen           parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+    
+        difference(A const& a, B const& b)
+        : base_t(a, b) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            iterator_t save = scan.first;
+            if (result_t hl = this->left().parse(scan))
+            {
+                std::swap(save, scan.first);
+                result_t hr = this->right().parse(scan);
+                if (!hr || (hr.length() < hl.length()))
+                {
+                    scan.first = save;
+                    return hl;
+                }
+            }
+    
+            return scan.no_match();
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+    
+    struct difference_parser_gen
+    {
+        template <typename A, typename B>
+        struct result 
+        {
+            typedef 
+                difference<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                > 
+            type;
+        };
+    
+        template <typename A, typename B>
+        static difference<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return difference<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+    
+    template <typename A, typename B>
+    difference<A, B>
+    operator-(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    difference<A, chlit<char> >
+    operator-(parser<A> const& a, char b);
+    
+    template <typename B>
+    difference<chlit<char>, B>
+    operator-(char a, parser<B> const& b);
+    
+    template <typename A>
+    difference<A, strlit<char const*> >
+    operator-(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    difference<strlit<char const*>, B>
+    operator-(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    difference<A, chlit<wchar_t> >
+    operator-(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    difference<chlit<wchar_t>, B>
+    operator-(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    difference<A, strlit<wchar_t const*> >
+    operator-(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    difference<strlit<wchar_t const*>, B>
+    operator-(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/difference.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/directives.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/directives.hpp
new file mode 100644 (file)
index 0000000..a66efa2
--- /dev/null
@@ -0,0 +1,607 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIRECTIVES_HPP)
+#define BOOST_SPIRIT_DIRECTIVES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <algorithm>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/scanner/skipper.hpp> 
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/composite/impl/directives.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  contiguous class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct lexeme_parser_gen;
+
+    template <typename ParserT>
+    struct contiguous
+    :   public unary<ParserT, parser<contiguous<ParserT> > >
+    {
+        typedef contiguous<ParserT>             self_t;
+        typedef unary_parser_category           parser_category_t;
+        typedef lexeme_parser_gen               parser_generator_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        contiguous(ParserT const& p)
+        : base_t(p) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::contiguous_parser_parse<result_t>
+                (this->subject(), scan, scan);
+        }
+    };
+
+    struct lexeme_parser_gen
+    {
+        template <typename ParserT>
+        struct result {
+
+            typedef contiguous<ParserT> type;
+        };
+
+        template <typename ParserT>
+        static contiguous<ParserT>
+        generate(parser<ParserT> const& subject)
+        {
+            return contiguous<ParserT>(subject.derived());
+        }
+
+        template <typename ParserT>
+        contiguous<ParserT>
+        operator[](parser<ParserT> const& subject) const
+        {
+            return contiguous<ParserT>(subject.derived());
+        }
+    };
+
+    //////////////////////////////////
+    const lexeme_parser_gen lexeme_d = lexeme_parser_gen();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  lexeme_scanner
+    //
+    //      Given a Scanner, return the correct scanner type that
+    //      the lexeme_d uses. Scanner is assumed to be a phrase
+    //      level scanner (see skipper.hpp)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ScannerT>
+    struct lexeme_scanner
+    {
+        typedef scanner_policies<
+            no_skipper_iteration_policy<
+                typename ScannerT::iteration_policy_t>,
+            typename ScannerT::match_policy_t,
+            typename ScannerT::action_policy_t
+        > policies_t;
+
+        typedef typename
+            rebind_scanner_policies<ScannerT, policies_t>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  inhibit_case_iteration_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BaseT>
+    struct inhibit_case_iteration_policy : public BaseT
+    {
+        typedef BaseT base_t;
+
+        inhibit_case_iteration_policy()
+        : BaseT() {}
+
+        template <typename PolicyT>
+        inhibit_case_iteration_policy(PolicyT const& other)
+        : BaseT(other) {}
+
+        template <typename CharT>
+        CharT filter(CharT ch) const
+        { return impl::tolower_(ch); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  inhibit_case class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct inhibit_case_parser_gen;
+
+    template <typename ParserT>
+    struct inhibit_case
+    :   public unary<ParserT, parser<inhibit_case<ParserT> > >
+    {
+        typedef inhibit_case<ParserT>           self_t;
+        typedef unary_parser_category           parser_category_t;
+        typedef inhibit_case_parser_gen         parser_generator_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        inhibit_case(ParserT const& p)
+        : base_t(p) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::inhibit_case_parser_parse<result_t>
+                (this->subject(), scan, scan);
+        }
+    };
+
+    template <int N>
+    struct inhibit_case_parser_gen_base
+    {
+        //  This hack is needed to make borland happy.
+        //  If these member operators were defined in the
+        //  inhibit_case_parser_gen class, or if this class
+        //  is non-templated, borland ICEs.
+
+        static inhibit_case<strlit<char const*> >
+        generate(char const* str)
+        { return inhibit_case<strlit<char const*> >(str); }
+
+        static inhibit_case<strlit<wchar_t const*> >
+        generate(wchar_t const* str)
+        { return inhibit_case<strlit<wchar_t const*> >(str); }
+
+        static inhibit_case<chlit<char> >
+        generate(char ch)
+        { return inhibit_case<chlit<char> >(ch); }
+
+        static inhibit_case<chlit<wchar_t> >
+        generate(wchar_t ch)
+        { return inhibit_case<chlit<wchar_t> >(ch); }
+
+        template <typename ParserT>
+        static inhibit_case<ParserT>
+        generate(parser<ParserT> const& subject)
+        { return inhibit_case<ParserT>(subject.derived()); }
+
+        inhibit_case<strlit<char const*> >
+        operator[](char const* str) const
+        { return inhibit_case<strlit<char const*> >(str); }
+
+        inhibit_case<strlit<wchar_t const*> >
+        operator[](wchar_t const* str) const
+        { return inhibit_case<strlit<wchar_t const*> >(str); }
+
+        inhibit_case<chlit<char> >
+        operator[](char ch) const
+        { return inhibit_case<chlit<char> >(ch); }
+
+        inhibit_case<chlit<wchar_t> >
+        operator[](wchar_t ch) const
+        { return inhibit_case<chlit<wchar_t> >(ch); }
+
+        template <typename ParserT>
+        inhibit_case<ParserT>
+        operator[](parser<ParserT> const& subject) const
+        { return inhibit_case<ParserT>(subject.derived()); }
+    };
+
+    //////////////////////////////////
+    struct inhibit_case_parser_gen : public inhibit_case_parser_gen_base<0>
+    {
+        inhibit_case_parser_gen() {}
+    };
+
+    //////////////////////////////////
+    //  Depracated
+    const inhibit_case_parser_gen nocase_d = inhibit_case_parser_gen();
+
+    //  Preferred syntax
+    const inhibit_case_parser_gen as_lower_d = inhibit_case_parser_gen();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  as_lower_scanner
+    //
+    //      Given a Scanner, return the correct scanner type that
+    //      the as_lower_d uses. Scanner is assumed to be a scanner
+    //      with an inhibit_case_iteration_policy.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ScannerT>
+    struct as_lower_scanner
+    {
+        typedef scanner_policies<
+            inhibit_case_iteration_policy<
+                typename ScannerT::iteration_policy_t>,
+            typename ScannerT::match_policy_t,
+            typename ScannerT::action_policy_t
+        > policies_t;
+
+        typedef typename
+            rebind_scanner_policies<ScannerT, policies_t>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  longest_alternative class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct longest_parser_gen;
+
+    template <typename A, typename B>
+    struct longest_alternative
+    :   public binary<A, B, parser<longest_alternative<A, B> > >
+    {
+        typedef longest_alternative<A, B>       self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef longest_parser_gen              parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+
+        longest_alternative(A const& a, B const& b)
+        : base_t(a, b) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typename ScannerT::iterator_t save = scan.first;
+            result_t l = this->left().parse(scan);
+            std::swap(scan.first, save);
+            result_t r = this->right().parse(scan);
+
+            if (l || r)
+            {
+                if (l.length() > r.length())
+                {
+                    scan.first = save;
+                    return l;
+                }
+                return r;
+            }
+
+            return scan.no_match();
+        }
+    };
+
+    struct longest_parser_gen
+    {
+        template <typename A, typename B>
+        struct result {
+
+            typedef typename
+                impl::to_longest_alternative<alternative<A, B> >::result_t
+            type;
+        };
+
+        template <typename A, typename B>
+        static typename
+        impl::to_longest_alternative<alternative<A, B> >::result_t
+        generate(alternative<A, B> const& alt)
+        {
+            return impl::to_longest_alternative<alternative<A, B> >::
+                convert(alt);
+        }
+
+        //'generate' for binary composite
+        template <typename A, typename B>
+        static
+        longest_alternative<A, B>
+        generate(A const &left, B const &right)
+        {
+            return longest_alternative<A, B>(left, right);
+        }
+
+        template <typename A, typename B>
+        typename impl::to_longest_alternative<alternative<A, B> >::result_t
+        operator[](alternative<A, B> const& alt) const
+        {
+            return impl::to_longest_alternative<alternative<A, B> >::
+                convert(alt);
+        }
+    };
+
+    const longest_parser_gen longest_d = longest_parser_gen();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  shortest_alternative class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct shortest_parser_gen;
+
+    template <typename A, typename B>
+    struct shortest_alternative
+    :   public binary<A, B, parser<shortest_alternative<A, B> > >
+    {
+        typedef shortest_alternative<A, B>      self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef shortest_parser_gen             parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+
+        shortest_alternative(A const& a, B const& b)
+        : base_t(a, b) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typename ScannerT::iterator_t save = scan.first;
+            result_t l = this->left().parse(scan);
+            std::swap(scan.first, save);
+            result_t r = this->right().parse(scan);
+
+            if (l || r)
+            {
+                if ((l.length() < r.length() && l) || !r)
+                {
+                    scan.first = save;
+                    return l;
+                }
+                return r;
+            }
+
+            return scan.no_match();
+        }
+    };
+
+    struct shortest_parser_gen
+    {
+        template <typename A, typename B>
+        struct result {
+
+            typedef typename
+                impl::to_shortest_alternative<alternative<A, B> >::result_t
+            type;
+        };
+
+        template <typename A, typename B>
+        static typename
+        impl::to_shortest_alternative<alternative<A, B> >::result_t
+        generate(alternative<A, B> const& alt)
+        {
+            return impl::to_shortest_alternative<alternative<A, B> >::
+                convert(alt);
+        }
+
+        //'generate' for binary composite
+        template <typename A, typename B>
+        static
+        shortest_alternative<A, B>
+        generate(A const &left, B const &right)
+        {
+            return shortest_alternative<A, B>(left, right);
+        }
+
+        template <typename A, typename B>
+        typename impl::to_shortest_alternative<alternative<A, B> >::result_t
+        operator[](alternative<A, B> const& alt) const
+        {
+            return impl::to_shortest_alternative<alternative<A, B> >::
+                convert(alt);
+        }
+    };
+
+    const shortest_parser_gen shortest_d = shortest_parser_gen();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  min_bounded class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BoundsT>
+    struct min_bounded_gen;
+
+    template <typename ParserT, typename BoundsT>
+    struct min_bounded
+    :   public unary<ParserT, parser<min_bounded<ParserT, BoundsT> > >
+    {
+        typedef min_bounded<ParserT, BoundsT>   self_t;
+        typedef unary_parser_category           parser_category_t;
+        typedef min_bounded_gen<BoundsT>        parser_generator_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        min_bounded(ParserT const& p, BoundsT const& min__)
+        : base_t(p)
+        , min_(min__) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = this->subject().parse(scan);
+            if (hit.has_valid_attribute() && hit.value() < min_)
+                return scan.no_match();
+            return hit;
+        }
+
+        BoundsT min_;
+    };
+
+    template <typename BoundsT>
+    struct min_bounded_gen
+    {
+        min_bounded_gen(BoundsT const& min__)
+        : min_(min__) {}
+
+        template <typename DerivedT>
+        min_bounded<DerivedT, BoundsT>
+        operator[](parser<DerivedT> const& p) const
+        { return min_bounded<DerivedT, BoundsT>(p.derived(), min_); }
+
+        BoundsT min_;
+    };
+
+    template <typename BoundsT>
+    inline min_bounded_gen<BoundsT>
+    min_limit_d(BoundsT const& min_)
+    { return min_bounded_gen<BoundsT>(min_); }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  max_bounded class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BoundsT>
+    struct max_bounded_gen;
+
+    template <typename ParserT, typename BoundsT>
+    struct max_bounded
+    :   public unary<ParserT, parser<max_bounded<ParserT, BoundsT> > >
+    {
+        typedef max_bounded<ParserT, BoundsT>   self_t;
+        typedef unary_parser_category           parser_category_t;
+        typedef max_bounded_gen<BoundsT>        parser_generator_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        max_bounded(ParserT const& p, BoundsT const& max__)
+        : base_t(p)
+        , max_(max__) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = this->subject().parse(scan);
+            if (hit.has_valid_attribute() && hit.value() > max_)
+                return scan.no_match();
+            return hit;
+        }
+
+        BoundsT max_;
+    };
+
+    template <typename BoundsT>
+    struct max_bounded_gen
+    {
+        max_bounded_gen(BoundsT const& max__)
+        : max_(max__) {}
+
+        template <typename DerivedT>
+        max_bounded<DerivedT, BoundsT>
+        operator[](parser<DerivedT> const& p) const
+        { return max_bounded<DerivedT, BoundsT>(p.derived(), max_); }
+
+        BoundsT max_;
+    };
+
+    //////////////////////////////////
+    template <typename BoundsT>
+    inline max_bounded_gen<BoundsT>
+    max_limit_d(BoundsT const& max_)
+    { return max_bounded_gen<BoundsT>(max_); }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  bounded class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BoundsT>
+    struct bounded_gen;
+
+    template <typename ParserT, typename BoundsT>
+    struct bounded
+    :   public unary<ParserT, parser<bounded<ParserT, BoundsT> > >
+    {
+        typedef bounded<ParserT, BoundsT>       self_t;
+        typedef unary_parser_category           parser_category_t;
+        typedef bounded_gen<BoundsT>            parser_generator_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        bounded(ParserT const& p, BoundsT const& min__, BoundsT const& max__)
+        : base_t(p)
+        , min_(min__)
+        , max_(max__) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = this->subject().parse(scan);
+            if (hit.has_valid_attribute() &&
+                (hit.value() < min_ || hit.value() > max_))
+                    return scan.no_match();
+            return hit;
+        }
+
+        BoundsT min_, max_;
+    };
+
+    template <typename BoundsT>
+    struct bounded_gen
+    {
+        bounded_gen(BoundsT const& min__, BoundsT const& max__)
+        : min_(min__)
+        , max_(max__) {}
+
+        template <typename DerivedT>
+        bounded<DerivedT, BoundsT>
+        operator[](parser<DerivedT> const& p) const
+        { return bounded<DerivedT, BoundsT>(p.derived(), min_, max_); }
+
+        BoundsT min_, max_;
+    };
+
+    template <typename BoundsT>
+    inline bounded_gen<BoundsT>
+    limit_d(BoundsT const& min_, BoundsT const& max_)
+    { return bounded_gen<BoundsT>(min_, max_); }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/epsilon.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/epsilon.hpp
new file mode 100644 (file)
index 0000000..f9654e2
--- /dev/null
@@ -0,0 +1,276 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EPSILON_HPP
+#define BOOST_SPIRIT_EPSILON_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/meta/parser_traits.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/composite/no_actions.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  condition_parser class
+//
+//      handles expresions of the form
+//
+//          epsilon_p(cond)
+//
+//      where cond is a function or a functor that returns a value suitable
+//      to be used in boolean context. The expression returns a parser that
+//      returns an empty match when the condition evaluates to true.
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <typename CondT, bool positive_ = true>
+    struct condition_parser : parser<condition_parser<CondT, positive_> >
+    {
+        typedef condition_parser<CondT, positive_> self_t;
+
+        // not explicit! (needed for implementation of if_p et al.)
+        condition_parser(CondT const& cond_) : cond(cond_) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            if (positive_ == bool(cond())) // allow cond to return int
+                return scan.empty_match();
+            else
+                return scan.no_match();
+        }
+
+        condition_parser<CondT, !positive_>
+        negate() const
+        { return condition_parser<CondT, !positive_>(cond); }
+
+    private:
+
+        CondT cond;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || \
+    BOOST_WORKAROUND(BOOST_MSVC, == 1400) || \
+    BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+// VC 7.1, VC8 and Sun CC <= 5.8 do not support general
+// expressions of non-type template parameters in instantiations
+    template <typename CondT>
+    inline condition_parser<CondT, false>
+    operator~(condition_parser<CondT, true> const& p)
+    { return p.negate(); }
+
+    template <typename CondT>
+    inline condition_parser<CondT, true>
+    operator~(condition_parser<CondT, false> const& p)
+    { return p.negate(); }
+#else // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
+    template <typename CondT, bool positive>
+    inline condition_parser<CondT, !positive>
+    operator~(condition_parser<CondT, positive> const& p)
+    { return p.negate(); }
+#endif // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  empty_match_parser class
+//
+//      handles expressions of the form
+//          epsilon_p(subject)
+//      where subject is a parser. The expresion returns a composite
+//      parser that returns an empty match if the subject parser matches.
+//
+///////////////////////////////////////////////////////////////////////////////
+    struct empty_match_parser_gen;
+    struct negated_empty_match_parser_gen;
+
+    template <typename SubjectT>
+    struct negated_empty_match_parser; // Forward declaration
+
+    template<typename SubjectT>
+    struct empty_match_parser
+    : unary<SubjectT, parser<empty_match_parser<SubjectT> > >
+    {
+        typedef empty_match_parser<SubjectT>        self_t;
+        typedef unary<SubjectT, parser<self_t> >    base_t;
+        typedef unary_parser_category               parser_category_t;
+        typedef empty_match_parser_gen              parser_genererator_t;
+        typedef self_t embed_t;
+
+        explicit empty_match_parser(SubjectT const& p) : base_t(p) {}
+
+        template <typename ScannerT>
+        struct result
+        { typedef typename match_result<ScannerT, nil_t>::type type; };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typename ScannerT::iterator_t save(scan.first);
+            
+            typedef typename no_actions_scanner<ScannerT>::policies_t
+                policies_t;
+
+            bool matches = this->subject().parse(
+                scan.change_policies(policies_t(scan)));
+            if (matches)
+            {
+                scan.first = save; // reset the position
+                return scan.empty_match();
+            }
+            else
+            {
+                return scan.no_match();
+            }
+        }
+
+        negated_empty_match_parser<SubjectT>
+        negate() const
+        { return negated_empty_match_parser<SubjectT>(this->subject()); }
+    };
+
+    template<typename SubjectT>
+    struct negated_empty_match_parser
+    : public unary<SubjectT, parser<negated_empty_match_parser<SubjectT> > >
+    {
+        typedef negated_empty_match_parser<SubjectT>    self_t;
+        typedef unary<SubjectT, parser<self_t> >        base_t;
+        typedef unary_parser_category                   parser_category_t;
+        typedef negated_empty_match_parser_gen          parser_genererator_t;
+
+        explicit negated_empty_match_parser(SubjectT const& p) : base_t(p) {}
+
+        template <typename ScannerT>
+        struct result
+        { typedef typename match_result<ScannerT, nil_t>::type type; };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typename ScannerT::iterator_t save(scan.first);
+
+            typedef typename no_actions_scanner<ScannerT>::policies_t
+                policies_t;
+
+            bool matches = this->subject().parse(
+                scan.change_policies(policies_t(scan)));
+            if (!matches)
+            {
+                scan.first = save; // reset the position
+                return scan.empty_match();
+            }
+            else
+            {
+                return scan.no_match();
+            }
+        }
+
+        empty_match_parser<SubjectT>
+        negate() const
+        { return empty_match_parser<SubjectT>(this->subject()); }
+    };
+
+    struct empty_match_parser_gen
+    {
+        template <typename SubjectT>
+        struct result
+        { typedef empty_match_parser<SubjectT> type; };
+
+        template <typename SubjectT>
+        static empty_match_parser<SubjectT>
+        generate(parser<SubjectT> const& subject)
+        { return empty_match_parser<SubjectT>(subject.derived()); }
+    };
+
+    struct negated_empty_match_parser_gen
+    {
+        template <typename SubjectT>
+        struct result
+        { typedef negated_empty_match_parser<SubjectT> type; };
+
+        template <typename SubjectT>
+        static negated_empty_match_parser<SubjectT>
+        generate(parser<SubjectT> const& subject)
+        { return negated_empty_match_parser<SubjectT>(subject.derived()); }
+    };
+
+    //////////////////////////////
+    template <typename SubjectT>
+    inline negated_empty_match_parser<SubjectT>
+    operator~(empty_match_parser<SubjectT> const& p)
+    { return p.negate(); }
+
+    template <typename SubjectT>
+    inline empty_match_parser<SubjectT>
+    operator~(negated_empty_match_parser<SubjectT> const& p)
+    { return p.negate(); }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  epsilon_ parser and parser generator class
+//
+//      Operates as primitive parser that always matches an empty sequence.
+//
+//      Also operates as a parser generator. According to the type of the
+//      argument an instance of empty_match_parser<> (when the argument is
+//      a parser) or condition_parser<> (when the argument is not a parser)
+//      is returned by operator().
+//
+///////////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        template <typename SubjectT>
+        struct epsilon_selector
+        {
+            typedef typename as_parser<SubjectT>::type subject_t;
+            typedef typename
+                mpl::if_<
+                    is_parser<subject_t>
+                    ,empty_match_parser<subject_t>
+                    ,condition_parser<subject_t>
+                >::type type;
+        };
+    }
+
+    struct epsilon_parser : public parser<epsilon_parser>
+    {
+        typedef epsilon_parser self_t;
+
+        epsilon_parser() {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        { return scan.empty_match(); }
+
+        template <typename SubjectT>
+        typename impl::epsilon_selector<SubjectT>::type
+        operator()(SubjectT const& subject) const
+        {
+            typedef typename impl::epsilon_selector<SubjectT>::type result_t;
+            return result_t(subject);
+        }
+    };
+
+    epsilon_parser const epsilon_p = epsilon_parser();
+    epsilon_parser const eps_p = epsilon_parser();
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/exclusive_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/exclusive_or.hpp
new file mode 100644 (file)
index 0000000..69d4859
--- /dev/null
@@ -0,0 +1,142 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCLUSIVE_OR_HPP)
+#define BOOST_SPIRIT_EXCLUSIVE_OR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  exclusive_or class
+    //
+    //      Handles expressions of the form:
+    //
+    //          a ^ b
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches a or b but not both. One (not both) of the
+    //      operands may be a literal char, wchar_t or a primitive string
+    //      char const*, wchar_t const*.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct exclusive_or_parser_gen;
+
+    template <typename A, typename B>
+    struct exclusive_or
+    :   public binary<A, B, parser<exclusive_or<A, B> > >
+    {
+        typedef exclusive_or<A, B>              self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef exclusive_or_parser_gen         parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+
+        exclusive_or(A const& a, B const& b)
+        : base_t(a, b) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+
+            iterator_t save = scan.first;
+            result_t l = this->left().parse(scan);
+            std::swap(save, scan.first);
+            result_t r = this->right().parse(scan);
+
+            if (l ? !bool(r) : bool(r))
+            {
+                if (l)
+                    scan.first = save;
+                return l ? l : r;
+            }
+
+            return scan.no_match();
+        }
+    };
+
+    struct exclusive_or_parser_gen
+    {
+        template <typename A, typename B>
+        struct result
+        {
+            typedef
+                exclusive_or<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                >
+            type;
+        };
+
+        template <typename A, typename B>
+        static exclusive_or<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return exclusive_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+
+    template <typename A, typename B>
+    exclusive_or<A, B>
+    operator^(parser<A> const& a, parser<B> const& b);
+
+    template <typename A>
+    exclusive_or<A, chlit<char> >
+    operator^(parser<A> const& a, char b);
+
+    template <typename B>
+    exclusive_or<chlit<char>, B>
+    operator^(char a, parser<B> const& b);
+
+    template <typename A>
+    exclusive_or<A, strlit<char const*> >
+    operator^(parser<A> const& a, char const* b);
+
+    template <typename B>
+    exclusive_or<strlit<char const*>, B>
+    operator^(char const* a, parser<B> const& b);
+
+    template <typename A>
+    exclusive_or<A, chlit<wchar_t> >
+    operator^(parser<A> const& a, wchar_t b);
+
+    template <typename B>
+    exclusive_or<chlit<wchar_t>, B>
+    operator^(wchar_t a, parser<B> const& b);
+
+    template <typename A>
+    exclusive_or<A, strlit<wchar_t const*> >
+    operator^(parser<A> const& a, wchar_t const* b);
+
+    template <typename B>
+    exclusive_or<strlit<wchar_t const*>, B>
+    operator^(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/alternative.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/alternative.ipp
new file mode 100644 (file)
index 0000000..7a7599b
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ALTERNATIVE_IPP)
+#define BOOST_SPIRIT_ALTERNATIVE_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  alternative class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline alternative<A, B>
+    operator|(parser<A> const& a, parser<B> const& b)
+    {
+        return alternative<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline alternative<A, chlit<char> >
+    operator|(parser<A> const& a, char b)
+    {
+        return alternative<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline alternative<chlit<char>, B>
+    operator|(char a, parser<B> const& b)
+    {
+        return alternative<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline alternative<A, strlit<char const*> >
+    operator|(parser<A> const& a, char const* b)
+    {
+        return alternative<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline alternative<strlit<char const*>, B>
+    operator|(char const* a, parser<B> const& b)
+    {
+        return alternative<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline alternative<A, chlit<wchar_t> >
+    operator|(parser<A> const& a, wchar_t b)
+    {
+        return alternative<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline alternative<chlit<wchar_t>, B>
+    operator|(wchar_t a, parser<B> const& b)
+    {
+        return alternative<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline alternative<A, strlit<wchar_t const*> >
+    operator|(parser<A> const& a, wchar_t const* b)
+    {
+        return alternative<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline alternative<strlit<wchar_t const*>, B>
+    operator|(wchar_t const* a, parser<B> const& b)
+    {
+        return alternative<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/difference.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/difference.ipp
new file mode 100644 (file)
index 0000000..f5df8c7
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIFFERENCE_IPP)
+#define BOOST_SPIRIT_DIFFERENCE_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  difference class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline difference<A, B>
+    operator-(parser<A> const& a, parser<B> const& b)
+    {
+        return difference<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline difference<A, chlit<char> >
+    operator-(parser<A> const& a, char b)
+    {
+        return difference<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline difference<chlit<char>, B>
+    operator-(char a, parser<B> const& b)
+    {
+        return difference<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline difference<A, strlit<char const*> >
+    operator-(parser<A> const& a, char const* b)
+    {
+        return difference<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline difference<strlit<char const*>, B>
+    operator-(char const* a, parser<B> const& b)
+    {
+        return difference<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline difference<A, chlit<wchar_t> >
+    operator-(parser<A> const& a, wchar_t b)
+    {
+        return difference<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline difference<chlit<wchar_t>, B>
+    operator-(wchar_t a, parser<B> const& b)
+    {
+        return difference<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline difference<A, strlit<wchar_t const*> >
+    operator-(parser<A> const& a, wchar_t const* b)
+    {
+        return difference<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline difference<strlit<wchar_t const*>, B>
+    operator-(wchar_t const* a, parser<B> const& b)
+    {
+        return difference<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/directives.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/directives.ipp
new file mode 100644 (file)
index 0000000..96b2dd7
--- /dev/null
@@ -0,0 +1,210 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2001 Bruce Florman
+    Copyright (c) 2002 Raghavendra Satish
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIRECTIVES_IPP)
+#define BOOST_SPIRIT_DIRECTIVES_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/core/scanner/skipper.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename BaseT>
+    struct no_skipper_iteration_policy;
+
+    template <typename BaseT>
+    struct inhibit_case_iteration_policy;
+
+    template <typename A, typename B>
+    struct alternative;
+
+    template <typename A, typename B>
+    struct longest_alternative;
+
+    template <typename A, typename B>
+    struct shortest_alternative;
+
+    namespace impl
+    {
+        template <typename RT, typename ST, typename ScannerT, typename BaseT>
+        inline RT
+        contiguous_parser_parse(
+            ST const& s,
+            ScannerT const& scan,
+            skipper_iteration_policy<BaseT> const&)
+        {
+            typedef scanner_policies<
+                no_skipper_iteration_policy<
+                    BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+                BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+                BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+            > policies_t;
+
+            scan.skip(scan);
+            RT hit = s.parse(scan.change_policies(policies_t(scan)));
+            // We will not do a post skip!!!
+            return hit;
+        }
+
+        template <typename RT, typename ST, typename ScannerT, typename BaseT>
+        inline RT
+        contiguous_parser_parse(
+            ST const& s,
+            ScannerT const& scan,
+            no_skipper_iteration_policy<BaseT> const&)
+        {
+            return s.parse(scan);
+        }
+
+        template <typename RT, typename ST, typename ScannerT>
+        inline RT
+        contiguous_parser_parse(
+            ST const& s,
+            ScannerT const& scan,
+            iteration_policy const&)
+        {
+            return s.parse(scan);
+        }
+
+        template <
+            typename RT,
+            typename ParserT,
+            typename ScannerT,
+            typename BaseT>
+        inline RT
+        implicit_lexeme_parse(
+            ParserT const& p,
+            ScannerT const& scan,
+            skipper_iteration_policy<BaseT> const&)
+        {
+            typedef scanner_policies<
+                no_skipper_iteration_policy<
+                    BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+                BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+                BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+            > policies_t;
+
+            scan.skip(scan);
+            RT hit = p.parse_main(scan.change_policies(policies_t(scan)));
+            // We will not do a post skip!!!
+            return hit;
+        }
+
+        template <
+            typename RT,
+            typename ParserT,
+            typename ScannerT,
+            typename BaseT>
+        inline RT
+        implicit_lexeme_parse(
+            ParserT const& p,
+            ScannerT const& scan,
+            no_skipper_iteration_policy<BaseT> const&)
+        {
+            return p.parse_main(scan);
+        }
+
+        template <typename RT, typename ParserT, typename ScannerT>
+        inline RT
+        implicit_lexeme_parse(
+            ParserT const& p,
+            ScannerT const& scan,
+            iteration_policy const&)
+        {
+            return p.parse_main(scan);
+        }
+
+        template <typename RT, typename ST, typename ScannerT>
+        inline RT
+        inhibit_case_parser_parse(
+            ST const& s,
+            ScannerT const& scan,
+            iteration_policy const&)
+        {
+            typedef scanner_policies<
+                inhibit_case_iteration_policy<
+                    BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+                BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+                BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+            > policies_t;
+
+            return s.parse(scan.change_policies(policies_t(scan)));
+        }
+
+        template <typename RT, typename ST, typename ScannerT, typename BaseT>
+        inline RT
+        inhibit_case_parser_parse(
+            ST const& s,
+            ScannerT const& scan,
+            inhibit_case_iteration_policy<BaseT> const&)
+        {
+            return s.parse(scan);
+        }
+
+        template <typename T>
+        struct to_longest_alternative
+        {
+            typedef T result_t;
+            static result_t const&
+            convert(T const& a)  //  Special (end) case
+            { return a; }
+        };
+
+        template <typename A, typename B>
+        struct to_longest_alternative<alternative<A, B> >
+        {
+            typedef typename to_longest_alternative<A>::result_t    a_t;
+            typedef typename to_longest_alternative<B>::result_t    b_t;
+            typedef longest_alternative<a_t, b_t>                   result_t;
+
+            static result_t
+            convert(alternative<A, B> const& alt) // Recursive case
+            {
+                return result_t(
+                    to_longest_alternative<A>::convert(alt.left()),
+                    to_longest_alternative<B>::convert(alt.right()));
+            }
+        };
+
+        template <typename T>
+        struct to_shortest_alternative
+        {
+            typedef T result_t;
+            static result_t const&
+            convert(T const& a) //  Special (end) case
+            { return a; }
+        };
+
+        template <typename A, typename B>
+        struct to_shortest_alternative<alternative<A, B> >
+        {
+            typedef typename to_shortest_alternative<A>::result_t   a_t;
+            typedef typename to_shortest_alternative<B>::result_t   b_t;
+            typedef shortest_alternative<a_t, b_t>                  result_t;
+
+            static result_t
+            convert(alternative<A, B> const& alt) //  Recursive case
+            {
+                return result_t(
+                    to_shortest_alternative<A>::convert(alt.left()),
+                    to_shortest_alternative<B>::convert(alt.right()));
+            }
+        };
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp
new file mode 100644 (file)
index 0000000..34831a7
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCLUSIVE_OR_IPP)
+#define BOOST_SPIRIT_EXCLUSIVE_OR_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  exclusive_or class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline exclusive_or<A, B>
+    operator^(parser<A> const& a, parser<B> const& b)
+    {
+        return exclusive_or<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline exclusive_or<A, chlit<char> >
+    operator^(parser<A> const& a, char b)
+    {
+        return exclusive_or<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline exclusive_or<chlit<char>, B>
+    operator^(char a, parser<B> const& b)
+    {
+        return exclusive_or<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline exclusive_or<A, strlit<char const*> >
+    operator^(parser<A> const& a, char const* b)
+    {
+        return exclusive_or<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline exclusive_or<strlit<char const*>, B>
+    operator^(char const* a, parser<B> const& b)
+    {
+        return exclusive_or<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline exclusive_or<A, chlit<wchar_t> >
+    operator^(parser<A> const& a, wchar_t b)
+    {
+        return exclusive_or<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline exclusive_or<chlit<wchar_t>, B>
+    operator^(wchar_t a, parser<B> const& b)
+    {
+        return exclusive_or<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline exclusive_or<A, strlit<wchar_t const*> >
+    operator^(parser<A> const& a, wchar_t const* b)
+    {
+        return exclusive_or<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline exclusive_or<strlit<wchar_t const*>, B>
+    operator^(wchar_t const* a, parser<B> const& b)
+    {
+        return exclusive_or<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/intersection.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/intersection.ipp
new file mode 100644 (file)
index 0000000..2810586
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_INTERSECTION_IPP)
+#define BOOST_SPIRIT_INTERSECTION_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  intersection class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline intersection<A, B>
+    operator&(parser<A> const& a, parser<B> const& b)
+    {
+        return intersection<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline intersection<A, chlit<char> >
+    operator&(parser<A> const& a, char b)
+    {
+        return intersection<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline intersection<chlit<char>, B>
+    operator&(char a, parser<B> const& b)
+    {
+        return intersection<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline intersection<A, strlit<char const*> >
+    operator&(parser<A> const& a, char const* b)
+    {
+        return intersection<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline intersection<strlit<char const*>, B>
+    operator&(char const* a, parser<B> const& b)
+    {
+        return intersection<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline intersection<A, chlit<wchar_t> >
+    operator&(parser<A> const& a, wchar_t b)
+    {
+        return intersection<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline intersection<chlit<wchar_t>, B>
+    operator&(wchar_t a, parser<B> const& b)
+    {
+        return intersection<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline intersection<A, strlit<wchar_t const*> >
+    operator&(parser<A> const& a, wchar_t const* b)
+    {
+        return intersection<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline intersection<strlit<wchar_t const*>, B>
+    operator&(wchar_t const* a, parser<B> const& b)
+    {
+        return intersection<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp
new file mode 100644 (file)
index 0000000..8c4f513
--- /dev/null
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_KLEENE_STAR_IPP)
+#define BOOST_SPIRIT_KLEENE_STAR_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  kleene_star class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename S>
+    inline kleene_star<S>
+    operator*(parser<S> const& a)
+    {
+        return kleene_star<S>(a.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/list.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/list.ipp
new file mode 100644 (file)
index 0000000..cd7965a
--- /dev/null
@@ -0,0 +1,93 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LIST_IPP)
+#define BOOST_SPIRIT_LIST_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  operator% is defined as:
+    //  a % b ---> a >> *(b >> a)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline sequence<A, kleene_star<sequence<B, A> > >
+    operator%(parser<A> const& a, parser<B> const& b)
+    {
+        return a.derived() >> *(b.derived() >> a.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, kleene_star<sequence<chlit<char>, A> > >
+    operator%(parser<A> const& a, char b)
+    {
+        return a.derived() >> *(b >> a.derived());
+    }
+    
+    template <typename B>
+    inline sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
+    operator%(char a, parser<B> const& b)
+    {
+        return a >> *(b.derived() >> a);
+    }
+    
+    template <typename A>
+    inline sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
+    operator%(parser<A> const& a, char const* b)
+    {
+        return a.derived() >> *(b >> a.derived());
+    }
+    
+    template <typename B>
+    inline sequence<strlit<char const*>,
+        kleene_star<sequence<B, strlit<char const*> > > >
+    operator%(char const* a, parser<B> const& b)
+    {
+        return a >> *(b.derived() >> a);
+    }
+    
+    template <typename A>
+    inline sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
+    operator%(parser<A> const& a, wchar_t b)
+    {
+        return a.derived() >> *(b >> a.derived());
+    }
+    
+    template <typename B>
+    inline sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
+    operator%(wchar_t a, parser<B> const& b)
+    {
+        return a >> *(b.derived() >> a);
+    }
+    
+    template <typename A>
+    inline sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
+    operator%(parser<A> const& a, wchar_t const* b)
+    {
+        return a.derived() >> *(b >> a.derived());
+    }
+    
+    template <typename B>
+    inline sequence<strlit<wchar_t const*>,
+        kleene_star<sequence<B, strlit<wchar_t const*> > > >
+    operator%(wchar_t const* a, parser<B> const& b)
+    {
+        return a >> *(b.derived() >> a);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/optional.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/optional.ipp
new file mode 100644 (file)
index 0000000..629eac8
--- /dev/null
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPTIONAL_IPP)
+#define BOOST_SPIRIT_OPTIONAL_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  optional class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename S>
+    optional<S>
+    operator!(parser<S> const& a)
+    {
+        return optional<S>(a.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/positive.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/positive.ipp
new file mode 100644 (file)
index 0000000..9698e69
--- /dev/null
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITIVE_IPP)
+#define BOOST_SPIRIT_POSITIVE_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  positive class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename S>
+    inline positive<S>
+    operator+(parser<S> const& a)
+    {
+        return positive<S>(a.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequence.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequence.ipp
new file mode 100644 (file)
index 0000000..283d420
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENCE_IPP)
+#define BOOST_SPIRIT_SEQUENCE_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequence class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline sequence<A, B>
+    operator>>(parser<A> const& a, parser<B> const& b)
+    {
+        return sequence<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, chlit<char> >
+    operator>>(parser<A> const& a, char b)
+    {
+        return sequence<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<chlit<char>, B>
+    operator>>(char a, parser<B> const& b)
+    {
+        return sequence<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, strlit<char const*> >
+    operator>>(parser<A> const& a, char const* b)
+    {
+        return sequence<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<strlit<char const*>, B>
+    operator>>(char const* a, parser<B> const& b)
+    {
+        return sequence<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, chlit<wchar_t> >
+    operator>>(parser<A> const& a, wchar_t b)
+    {
+        return sequence<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<chlit<wchar_t>, B>
+    operator>>(wchar_t a, parser<B> const& b)
+    {
+        return sequence<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, strlit<wchar_t const*> >
+    operator>>(parser<A> const& a, wchar_t const* b)
+    {
+        return sequence<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<strlit<wchar_t const*>, B>
+    operator>>(wchar_t const* a, parser<B> const& b)
+    {
+        return sequence<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+    
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp
new file mode 100644 (file)
index 0000000..9f577a4
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_AND_IPP)
+#define BOOST_SPIRIT_SEQUENTIAL_AND_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequential-and operators implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline sequence<A, B>
+    operator&&(parser<A> const& a, parser<B> const& b)
+    {
+        return sequence<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, chlit<char> >
+    operator&&(parser<A> const& a, char b)
+    {
+        return sequence<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<chlit<char>, B>
+    operator&&(char a, parser<B> const& b)
+    {
+        return sequence<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, strlit<char const*> >
+    operator&&(parser<A> const& a, char const* b)
+    {
+        return sequence<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<strlit<char const*>, B>
+    operator&&(char const* a, parser<B> const& b)
+    {
+        return sequence<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, chlit<wchar_t> >
+    operator&&(parser<A> const& a, wchar_t b)
+    {
+        return sequence<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<chlit<wchar_t>, B>
+    operator&&(wchar_t a, parser<B> const& b)
+    {
+        return sequence<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequence<A, strlit<wchar_t const*> >
+    operator&&(parser<A> const& a, wchar_t const* b)
+    {
+        return sequence<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequence<strlit<wchar_t const*>, B>
+    operator&&(wchar_t const* a, parser<B> const& b)
+    {
+        return sequence<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+    
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp
new file mode 100644 (file)
index 0000000..521faf6
--- /dev/null
@@ -0,0 +1,90 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_IPP)
+#define BOOST_SPIRIT_SEQUENTIAL_OR_IPP
+
+namespace boost { namespace spirit {
+
+ BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+   ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequential-or class implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    inline sequential_or<A, B>
+    operator||(parser<A> const& a, parser<B> const& b)
+    {
+        return sequential_or<A, B>(a.derived(), b.derived());
+    }
+    
+    template <typename A>
+    inline sequential_or<A, chlit<char> >
+    operator||(parser<A> const& a, char b)
+    {
+        return sequential_or<A, chlit<char> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequential_or<chlit<char>, B>
+    operator||(char a, parser<B> const& b)
+    {
+        return sequential_or<chlit<char>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequential_or<A, strlit<char const*> >
+    operator||(parser<A> const& a, char const* b)
+    {
+        return sequential_or<A, strlit<char const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequential_or<strlit<char const*>, B>
+    operator||(char const* a, parser<B> const& b)
+    {
+        return sequential_or<strlit<char const*>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequential_or<A, chlit<wchar_t> >
+    operator||(parser<A> const& a, wchar_t b)
+    {
+        return sequential_or<A, chlit<wchar_t> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequential_or<chlit<wchar_t>, B>
+    operator||(wchar_t a, parser<B> const& b)
+    {
+        return sequential_or<chlit<wchar_t>, B>(a, b.derived());
+    }
+    
+    template <typename A>
+    inline sequential_or<A, strlit<wchar_t const*> >
+    operator||(parser<A> const& a, wchar_t const* b)
+    {
+        return sequential_or<A, strlit<wchar_t const*> >(a.derived(), b);
+    }
+    
+    template <typename B>
+    inline sequential_or<strlit<wchar_t const*>, B>
+    operator||(wchar_t const* a, parser<B> const& b)
+    {
+        return sequential_or<strlit<wchar_t const*>, B>(a, b.derived());
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/intersection.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/intersection.hpp
new file mode 100644 (file)
index 0000000..867c20f
--- /dev/null
@@ -0,0 +1,142 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_INTERSECTION_HPP)
+#define BOOST_SPIRIT_INTERSECTION_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  intersection class
+    //
+    //      Handles expressions of the form:
+    //
+    //          a & b
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches a and b. One (not both) of the operands may
+    //      be a literal char, wchar_t or a primitive string char const*,
+    //      wchar_t const*.
+    //
+    //      The expression is short circuit evaluated. b is never touched
+    //      when a is returns a no-match.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct intersection_parser_gen;
+    
+    template <typename A, typename B>
+    struct intersection
+    :   public binary<A, B, parser<intersection<A, B> > >
+    {
+        typedef intersection<A, B>              self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef intersection_parser_gen         parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+    
+        intersection(A const& a, B const& b)
+        : base_t(a, b) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            iterator_t save = scan.first;
+            if (result_t hl = this->left().parse(scan))
+            {
+                ScannerT bscan(scan.first, scan.first, scan);
+                scan.first = save;
+                result_t hr = this->right().parse(bscan);
+                if (hl.length() == hr.length())
+                    return hl;
+            }
+    
+            return scan.no_match();
+        }
+    };
+    
+    struct intersection_parser_gen
+    {
+        template <typename A, typename B>
+        struct result 
+        {
+            typedef 
+                intersection<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                >
+            type;
+        };
+    
+        template <typename A, typename B>
+        static intersection<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return intersection<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+    
+    template <typename A, typename B>
+    intersection<A, B>
+    operator&(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    intersection<A, chlit<char> >
+    operator&(parser<A> const& a, char b);
+    
+    template <typename B>
+    intersection<chlit<char>, B>
+    operator&(char a, parser<B> const& b);
+    
+    template <typename A>
+    intersection<A, strlit<char const*> >
+    operator&(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    intersection<strlit<char const*>, B>
+    operator&(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    intersection<A, chlit<wchar_t> >
+    operator&(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    intersection<chlit<wchar_t>, B>
+    operator&(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    intersection<A, strlit<wchar_t const*> >
+    operator&(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    intersection<strlit<wchar_t const*>, B>
+    operator&(wchar_t const* a, parser<B> const& b);
+    
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/intersection.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/kleene_star.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/kleene_star.hpp
new file mode 100644 (file)
index 0000000..9b6c73a
--- /dev/null
@@ -0,0 +1,109 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_KLEENE_STAR_HPP)
+#define BOOST_SPIRIT_KLEENE_STAR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  kleene_star class
+    //
+    //      Handles expressions of the form:
+    //
+    //          *a
+    //
+    //      where a is a parser. The expression returns a composite
+    //      parser that matches its subject zero (0) or more times.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct kleene_star_parser_gen;
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    template <typename S>
+    struct kleene_star
+    :   public unary<S, parser<kleene_star<S> > >
+    {
+        typedef kleene_star<S>              self_t;
+        typedef unary_parser_category       parser_category_t;
+        typedef kleene_star_parser_gen      parser_generator_t;
+        typedef unary<S, parser<self_t> >   base_t;
+    
+        kleene_star(S const& a)
+        : base_t(a) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            result_t hit = scan.empty_match();
+    
+            for (;;)
+            {
+                iterator_t save = scan.first;
+                if (result_t next = this->subject().parse(scan))
+                {
+                    scan.concat_match(hit, next);
+                }
+                else
+                {
+                    scan.first = save;
+                    return hit;
+                }
+            }
+        }
+    };
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+    struct kleene_star_parser_gen
+    {
+        template <typename S>
+        struct result 
+        {
+            typedef kleene_star<S> type;
+        };
+    
+        template <typename S>
+        static kleene_star<S>
+        generate(parser<S> const& a)
+        {
+            return kleene_star<S>(a.derived());
+        }
+    };
+    
+    //////////////////////////////////
+    template <typename S>
+    kleene_star<S>
+    operator*(parser<S> const& a);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/kleene_star.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/list.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/list.hpp
new file mode 100644 (file)
index 0000000..cdb879e
--- /dev/null
@@ -0,0 +1,73 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LIST_HPP)
+#define BOOST_SPIRIT_LIST_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  operator% is defined as:
+    //  a % b ---> a >> *(b >> a)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    sequence<A, kleene_star<sequence<B, A> > >
+    operator%(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, kleene_star<sequence<chlit<char>, A> > >
+    operator%(parser<A> const& a, char b);
+    
+    template <typename B>
+    sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
+    operator%(char a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
+    operator%(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    sequence<strlit<char const*>,
+        kleene_star<sequence<B, strlit<char const*> > > >
+    operator%(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
+    operator%(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
+    operator%(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
+    operator%(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    sequence<strlit<wchar_t const*>,
+        kleene_star<sequence<B, strlit<wchar_t const*> > > >
+    operator%(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/list.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/no_actions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/no_actions.hpp
new file mode 100644 (file)
index 0000000..638a297
--- /dev/null
@@ -0,0 +1,165 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2003 Vaclav Vesely
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
+#define BOOST_SPIRIT_NO_ACTIONS_HPP
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
+
+namespace boost {
+namespace spirit {
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+//-----------------------------------------------------------------------------
+// no_actions_action_policy
+
+template<typename BaseT = action_policy>
+struct no_actions_action_policy:
+    public BaseT
+{
+    typedef BaseT base_t;
+
+    no_actions_action_policy():
+        BaseT()
+    {}
+
+    template<typename PolicyT>
+    no_actions_action_policy(PolicyT const& other):
+        BaseT(other)
+    {}
+
+    template<typename ActorT, typename AttrT, typename IteratorT>
+    void
+    do_action(
+        ActorT const&       actor,
+        AttrT&              val,
+        IteratorT const&    first,
+        IteratorT const&    last) const
+    {}
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_scanner
+
+
+namespace detail
+{
+    template <typename ActionPolicy>
+    struct compute_no_actions_action_policy
+    {
+        typedef no_actions_action_policy<ActionPolicy> type;
+    };
+
+    template <typename ActionPolicy>
+    struct compute_no_actions_action_policy<no_actions_action_policy<ActionPolicy> >
+    {
+        typedef no_actions_action_policy<ActionPolicy> type;
+    };
+}
+
+template<typename ScannerT = scanner<> >
+struct no_actions_scanner
+{
+    typedef scanner_policies<
+        typename ScannerT::iteration_policy_t,
+        typename ScannerT::match_policy_t,
+        typename detail::compute_no_actions_action_policy<typename ScannerT::action_policy_t>::type
+    > policies_t;
+
+    typedef typename
+        rebind_scanner_policies<ScannerT, policies_t>::type type;
+};
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+template<typename ScannerT = scanner<> >
+struct no_actions_scanner_list
+{
+    typedef
+        scanner_list<
+            ScannerT,
+            typename no_actions_scanner<ScannerT>::type
+        >
+            type;
+};
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+//-----------------------------------------------------------------------------
+// no_actions_parser
+
+struct no_actions_parser_gen;
+
+template<typename ParserT>
+struct no_actions_parser:
+    public unary<ParserT, parser<no_actions_parser<ParserT> > >
+{
+    typedef no_actions_parser<ParserT>      self_t;
+    typedef unary_parser_category           parser_category_t;
+    typedef no_actions_parser_gen           parser_generator_t;
+    typedef unary<ParserT, parser<self_t> > base_t;
+
+    template<typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<ParserT, ScannerT>::type type;
+    };
+
+    no_actions_parser(ParserT const& p)
+    :   base_t(p)
+    {}
+
+    template<typename ScannerT>
+    typename result<ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename no_actions_scanner<ScannerT>::policies_t policies_t;
+
+        return this->subject().parse(scan.change_policies(policies_t(scan)));
+    }
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_parser_gen
+
+struct no_actions_parser_gen
+{
+    template<typename ParserT>
+    struct result
+    {
+        typedef no_actions_parser<ParserT> type;
+    };
+
+    template<typename ParserT>
+    static no_actions_parser<ParserT>
+    generate(parser<ParserT> const& subject)
+    {
+        return no_actions_parser<ParserT>(subject.derived());
+    }
+
+    template<typename ParserT>
+    no_actions_parser<ParserT>
+    operator[](parser<ParserT> const& subject) const
+    {
+        return no_actions_parser<ParserT>(subject.derived());
+    }
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_d
+
+const no_actions_parser_gen no_actions_d = no_actions_parser_gen();
+
+//-----------------------------------------------------------------------------
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+} // namespace spirit
+} // namespace boost
+
+#endif // !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/operators.hpp
new file mode 100644 (file)
index 0000000..5732ef9
--- /dev/null
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPERATORS_HPP)
+#define BOOST_SPIRIT_OPERATORS_HPP
+
+#include <boost/spirit/home/classic/core/composite/sequence.hpp>
+#include <boost/spirit/home/classic/core/composite/sequential_and.hpp>
+#include <boost/spirit/home/classic/core/composite/sequential_or.hpp>
+#include <boost/spirit/home/classic/core/composite/alternative.hpp>
+#include <boost/spirit/home/classic/core/composite/difference.hpp>
+#include <boost/spirit/home/classic/core/composite/intersection.hpp>
+#include <boost/spirit/home/classic/core/composite/exclusive_or.hpp>
+#include <boost/spirit/home/classic/core/composite/kleene_star.hpp>
+#include <boost/spirit/home/classic/core/composite/positive.hpp>
+#include <boost/spirit/home/classic/core/composite/optional.hpp>
+#include <boost/spirit/home/classic/core/composite/list.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/optional.hpp
new file mode 100644 (file)
index 0000000..69e49f9
--- /dev/null
@@ -0,0 +1,94 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPTIONAL_HPP)
+#define BOOST_SPIRIT_OPTIONAL_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  optional class
+    //
+    //      Handles expressions of the form:
+    //
+    //          !a
+    //
+    //      where a is a parser. The expression returns a composite
+    //      parser that matches its subject zero (0) or one (1) time.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct optional_parser_gen;
+    
+    template <typename S>
+    struct optional
+    :   public unary<S, parser<optional<S> > >
+    {
+        typedef optional<S>                 self_t;
+        typedef unary_parser_category       parser_category_t;
+        typedef optional_parser_gen         parser_generator_t;
+        typedef unary<S, parser<self_t> >   base_t;
+    
+        optional(S const& a)
+        : base_t(a) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            iterator_t save = scan.first;
+            if (result_t r = this->subject().parse(scan))
+            {
+                return r;
+            }
+            else
+            {
+                scan.first = save;
+                return scan.empty_match();
+            }
+        }
+    };
+    
+    struct optional_parser_gen
+    {
+        template <typename S>
+        struct result 
+        {
+            typedef optional<S> type;
+        };
+    
+        template <typename S>
+        static optional<S>
+        generate(parser<S> const& a)
+        {
+            return optional<S>(a.derived());
+        }
+    };
+    
+    template <typename S>
+    optional<S>
+    operator!(parser<S> const& a);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/optional.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/positive.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/positive.hpp
new file mode 100644 (file)
index 0000000..7b494b4
--- /dev/null
@@ -0,0 +1,112 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITIVE_HPP)
+#define BOOST_SPIRIT_POSITIVE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  positive class
+    //
+    //      Handles expressions of the form:
+    //
+    //          +a
+    //
+    //      where a is a parser. The expression returns a composite
+    //      parser that matches its subject one (1) or more times.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct positive_parser_gen;
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    template <typename S>
+    struct positive
+    :   public unary<S, parser<positive<S> > >
+    {
+        typedef positive<S>                 self_t;
+        typedef unary_parser_category       parser_category_t;
+        typedef positive_parser_gen         parser_generator_t;
+        typedef unary<S, parser<self_t> >   base_t;
+    
+        positive(S const& a)
+        : base_t(a) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            result_t hit = this->subject().parse(scan);
+    
+            if (hit)
+            {
+                for (;;)
+                {
+                    iterator_t save = scan.first;
+                    if (result_t next = this->subject().parse(scan))
+                    {
+                        scan.concat_match(hit, next);
+                    }
+                    else
+                    {
+                        scan.first = save;
+                        break;
+                    }
+                }
+            }
+            return hit;
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+    
+    struct positive_parser_gen
+    {
+        template <typename S>
+        struct result 
+        {
+            typedef positive<S> type;
+        };
+    
+        template <typename S>
+        static positive<S>
+        generate(parser<S> const& a)
+        {
+            return positive<S>(a.derived());
+        }
+    };
+    
+    template <typename S>
+    inline positive<S>
+    operator+(parser<S> const& a);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/positive.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequence.hpp
new file mode 100644 (file)
index 0000000..3ccd9ea
--- /dev/null
@@ -0,0 +1,142 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENCE_HPP)
+#define BOOST_SPIRIT_SEQUENCE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequence class
+    //
+    //      Handles expressions of the form:
+    //
+    //          a >> b
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches a and b in sequence. One (not both) of the
+    //      operands may be a literal char, wchar_t or a primitive string
+    //      char const*, wchar_t const*.
+    //
+    //////////////////////////////////////////////////////////////////////////
+    struct sequence_parser_gen;
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+    template <typename A, typename B>
+    struct sequence : public binary<A, B, parser<sequence<A, B> > >
+    {
+        typedef sequence<A, B>                  self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef sequence_parser_gen             parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+    
+        sequence(A const& a, B const& b)
+        : base_t(a, b) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            if (result_t ma = this->left().parse(scan))
+                if (result_t mb = this->right().parse(scan))
+                {
+                    scan.concat_match(ma, mb);
+                    return ma;
+                }
+            return scan.no_match();
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+    
+    struct sequence_parser_gen
+    {
+        template <typename A, typename B>
+        struct result 
+        {
+            typedef
+                sequence<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                >
+            type;
+        };
+    
+        template <typename A, typename B>
+        static sequence<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return sequence<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+    
+    template <typename A, typename B>
+    sequence<A, B>
+    operator>>(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, chlit<char> >
+    operator>>(parser<A> const& a, char b);
+    
+    template <typename B>
+    sequence<chlit<char>, B>
+    operator>>(char a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, strlit<char const*> >
+    operator>>(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    sequence<strlit<char const*>, B>
+    operator>>(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, chlit<wchar_t> >
+    operator>>(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    sequence<chlit<wchar_t>, B>
+    operator>>(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, strlit<wchar_t const*> >
+    operator>>(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    sequence<strlit<wchar_t const*>, B>
+    operator>>(wchar_t const* a, parser<B> const& b);
+    
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/sequence.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_and.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_and.hpp
new file mode 100644 (file)
index 0000000..da11f87
--- /dev/null
@@ -0,0 +1,76 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_AND_HPP)
+#define BOOST_SPIRIT_SEQUENTIAL_AND_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequential-and operators
+    //
+    //      Handles expressions of the form:
+    //
+    //          a && b
+    //
+    //      Same as a >> b.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    sequence<A, B>
+    operator&&(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, chlit<char> >
+    operator&&(parser<A> const& a, char b);
+    
+    template <typename B>
+    sequence<chlit<char>, B>
+    operator&&(char a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, strlit<char const*> >
+    operator&&(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    sequence<strlit<char const*>, B>
+    operator&&(char const* a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, chlit<wchar_t> >
+    operator&&(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    sequence<chlit<wchar_t>, B>
+    operator&&(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    sequence<A, strlit<wchar_t const*> >
+    operator&&(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    sequence<strlit<wchar_t const*>, B>
+    operator&&(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/sequential_and.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/composite/sequential_or.hpp
new file mode 100644 (file)
index 0000000..b276f6c
--- /dev/null
@@ -0,0 +1,154 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    Copyright (c) 2002 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_HPP)
+#define BOOST_SPIRIT_SEQUENTIAL_OR_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sequential-or class
+    //
+    //      Handles expressions of the form:
+    //
+    //          a || b
+    //
+    //      Equivalent to
+    //
+    //          a | b | a >> b;
+    //
+    //      where a and b are parsers. The expression returns a composite
+    //      parser that matches matches a or b in sequence. One (not both) of
+    //      the operands may be a literal char, wchar_t or a primitive string
+    //      char const*, wchar_t const*.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct sequential_or_parser_gen;
+    
+    template <typename A, typename B>
+    struct sequential_or : public binary<A, B, parser<sequential_or<A, B> > >
+    {
+        typedef sequential_or<A, B>             self_t;
+        typedef binary_parser_category          parser_category_t;
+        typedef sequential_or_parser_gen        parser_generator_t;
+        typedef binary<A, B, parser<self_t> >   base_t;
+    
+        sequential_or(A const& a, B const& b)
+        : base_t(a, b) {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            { // scope for save
+                iterator_t save = scan.first;
+                if (result_t ma = this->left().parse(scan))
+                {
+                    save = scan.first;
+                    if (result_t mb = this->right().parse(scan))
+                    {
+                        // matched a b
+                        scan.concat_match(ma, mb);
+                        return ma;
+                    }
+                    else
+                    {
+                        // matched a
+                        scan.first = save;
+                        return ma;
+                    }
+                }
+                scan.first = save;
+            }
+    
+            // matched b
+            return this->right().parse(scan);
+        }
+    };
+    
+    struct sequential_or_parser_gen
+    {
+        template <typename A, typename B>
+        struct result 
+        {
+            typedef 
+                sequential_or<
+                    typename as_parser<A>::type
+                  , typename as_parser<B>::type
+                > 
+            type;
+        };
+    
+        template <typename A, typename B>
+        static sequential_or<
+            typename as_parser<A>::type
+          , typename as_parser<B>::type
+        >
+        generate(A const& a, B const& b)
+        {
+            return sequential_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+                BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+                    (as_parser<A>::convert(a), as_parser<B>::convert(b));
+        }
+    };
+    
+    template <typename A, typename B>
+    sequential_or<A, B>
+    operator||(parser<A> const& a, parser<B> const& b);
+    
+    template <typename A>
+    sequential_or<A, chlit<char> >
+    operator||(parser<A> const& a, char b);
+    
+    template <typename B>
+    sequential_or<chlit<char>, B>
+    operator||(char a, parser<B> const& b);
+    
+    template <typename A>
+    sequential_or<A, strlit<char const*> >
+    operator||(parser<A> const& a, char const* b);
+    
+    template <typename B>
+    sequential_or<strlit<char const*>, B>
+    operator||(char const* a, parser<B> const& b);
+
+    template <typename A>
+    sequential_or<A, chlit<wchar_t> >
+    operator||(parser<A> const& a, wchar_t b);
+    
+    template <typename B>
+    sequential_or<chlit<wchar_t>, B>
+    operator||(wchar_t a, parser<B> const& b);
+    
+    template <typename A>
+    sequential_or<A, strlit<wchar_t const*> >
+    operator||(parser<A> const& a, wchar_t const* b);
+    
+    template <typename B>
+    sequential_or<strlit<wchar_t const*>, B>
+    operator||(wchar_t const* a, parser<B> const& b);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/composite/impl/sequential_or.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/config.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/config.hpp
new file mode 100644 (file)
index 0000000..57eca7f
--- /dev/null
@@ -0,0 +1,62 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONFIG_HPP)
+#define BOOST_SPIRIT_CONFIG_HPP
+
+#include <boost/config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Compiler check:
+//
+//  Historically, Spirit supported a lot of compilers, including (to some
+//  extent) poorly conforming compilers such as VC6. Spirit v1.6.x will be
+//  the last release that will support older poorly conforming compilers.
+//  Starting from Spirit v1.8.0, ill conforming compilers will not be
+//  supported. If you are still using one of these older compilers, you can
+//  still use Spirit v1.6.x.
+//
+//  The reason why Spirit v1.6.x worked on old non-conforming compilers is
+//  that the authors laboriously took the trouble of searching for
+//  workarounds to make these compilers happy. The process takes a lot of
+//  time and energy, especially when one encounters the dreaded ICE or
+//  "Internal Compiler Error". Sometimes searching for a single workaround
+//  takes days or even weeks. Sometimes, there are no known workarounds. This
+//  stifles progress a lot. And, as the library gets more progressive and
+//  takes on more advanced C++ techniques, the difficulty is escalated to
+//  even new heights.
+//
+//  Spirit v1.6.x will still be supported. Maintenance and bug fixes will
+//  still be applied. There will still be active development for the back-
+//  porting of new features introduced in Spirit v1.8.0 (and Spirit 1.9.0)
+//  to lesser able compilers; hopefully, fueled by contributions from the
+//  community. For instance, there is already a working AST tree back-port
+//  for VC6 and VC7 by Peder Holt.
+//
+//  If you got here somehow, your compiler is known to be poorly conforming
+//  WRT ANSI/ISO C++ standard. Library implementers get a bad reputation when
+//  someone attempts to compile the code on a non-conforming compiler. She'll
+//  be confronted with tons of compiler errors when she tries to compile the
+//  library. Such errors will somehow make less informed users conclude that
+//  the code is poorly written. It's better for the user to see a message
+//  "sorry, this code has not been ported to your compiler yet", than to see
+//  pages and pages of compiler error messages.
+//
+/////////////////////////////////////////////////////////////////////////////////
+#if     (defined(BOOST_MSVC) && (BOOST_MSVC < 1310))                            \
+    ||  (defined(__BORLANDC__) && (__BORLANDC__ <= 0x570))                      \
+    ||  (defined(__GNUC__) && (__GNUC__ < 3))                                   \
+    ||  (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
+# error "Compiler not supported. See note in <boost/spirit/core/config.hpp>"
+#else
+// Pass... Compiler supported.
+#endif
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match.ipp
new file mode 100644 (file)
index 0000000..0319dcf
--- /dev/null
@@ -0,0 +1,113 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_IPP)
+#define BOOST_SPIRIT_MATCH_IPP
+#include <algorithm>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename T>
+    inline match<T>::match()
+    : len(-1), val() {}
+
+    template <typename T>
+    inline match<T>::match(std::size_t length_)
+    : len(length_), val() {}
+
+    template <typename T>
+    inline match<T>::match(std::size_t length_, ctor_param_t val_)
+    : len(length_), val(val_) {}
+
+    template <typename T>
+    inline bool
+    match<T>::operator!() const
+    {
+        return len < 0;
+    }
+
+    template <typename T>
+    inline std::ptrdiff_t
+    match<T>::length() const
+    {
+        return len;
+    }
+
+    template <typename T>
+    inline bool
+    match<T>::has_valid_attribute() const
+    {
+        return val.is_initialized();
+    }
+
+    template <typename T>
+    inline typename match<T>::return_t
+    match<T>::value() const
+    {
+        BOOST_SPIRIT_ASSERT(val.is_initialized());
+        return *val;
+    }
+
+    template <typename T>
+    inline void
+    match<T>::swap(match& other)
+    {
+        std::swap(len, other.len);
+        std::swap(val, other.val);
+    }
+
+    inline match<nil_t>::match()
+    : len(-1) {}
+
+    inline match<nil_t>::match(std::size_t length_)
+    : len(length_) {}
+
+    inline match<nil_t>::match(std::size_t length_, nil_t)
+    : len(length_) {}
+
+    inline bool
+    match<nil_t>::operator!() const
+    {
+        return len < 0;
+    }
+
+    inline bool
+    match<nil_t>::has_valid_attribute() const
+    {
+        return false;
+    }
+
+    inline std::ptrdiff_t
+    match<nil_t>::length() const
+    {
+        return len;
+    }
+
+    inline nil_t
+    match<nil_t>::value() const
+    {
+        return nil_t();
+    }
+
+    inline void
+    match<nil_t>::value(nil_t) {}
+
+    inline void
+    match<nil_t>::swap(match<nil_t>& other)
+    {
+        std::swap(len, other.len);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match_attr_traits.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/match_attr_traits.ipp
new file mode 100644 (file)
index 0000000..24d9a43
--- /dev/null
@@ -0,0 +1,102 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_ATTR_TRAITS_IPP)
+#define BOOST_SPIRIT_MATCH_ATTR_TRAITS_IPP
+
+#include <boost/optional.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { 
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl
+{
+    template <typename T>
+    struct match_attr_traits
+    {
+        typedef typename
+            boost::optional<T>::reference_const_type
+        const_reference;
+
+        //  case where src *IS* convertible to T (dest)
+        template <typename T2>
+        static void
+        convert(boost::optional<T>& dest, T2 const& src, mpl::true_)
+        { 
+            dest.reset(src); 
+        }
+
+        //  case where src *IS NOT* convertible to T (dest)
+        template <typename T2>
+        static void
+        convert(boost::optional<T>& dest, T2 const& /*src*/, mpl::false_)
+        { 
+            dest.reset(); 
+        }
+
+        static void
+        convert(boost::optional<T>& dest, nil_t/*src*/)
+        { 
+            dest.reset(); 
+        }
+        
+        template <typename T2>
+        static void
+        convert(boost::optional<T>& dest, T2 const& src)
+        { 
+            convert(dest, src, is_convertible<T2, T>());
+        }
+
+        template <typename OtherMatchT>
+        static void
+        copy(boost::optional<T>& dest, OtherMatchT const& src)
+        {
+            if (src.has_valid_attribute())
+                convert(dest, src.value());
+        }
+
+        template <typename OtherMatchT>
+        static void
+        assign(boost::optional<T>& dest, OtherMatchT const& src)
+        {
+            if (src.has_valid_attribute())
+                convert(dest, src.value());
+            else
+                dest.reset();
+        }
+
+        // T is not reference
+        template <typename ValueT>
+        static void
+        set_value(boost::optional<T>& dest, ValueT const& val, mpl::false_)
+        {
+            dest.reset(val);
+        }
+
+        // T is a reference
+        template <typename ValueT>
+        static void
+        set_value(boost::optional<T>& dest, ValueT const& val, mpl::true_)
+        {
+            dest.get() = val;
+        }
+    };
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit::impl
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/parser.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/impl/parser.ipp
new file mode 100644 (file)
index 0000000..d5abe69
--- /dev/null
@@ -0,0 +1,55 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_IPP)
+#define BOOST_SPIRIT_PARSER_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Generic parse function implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT, typename DerivedT>
+    inline parse_info<IteratorT>
+    parse(
+        IteratorT const& first_
+      , IteratorT const& last
+      , parser<DerivedT> const& p)
+    {
+        IteratorT first = first_;
+        scanner<IteratorT, scanner_policies<> > scan(first, last);
+        match<nil_t> hit = p.derived().parse(scan);
+        return parse_info<IteratorT>(
+            first, hit, hit && (first == last), hit.length());
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Parse function for null terminated strings implementation
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT, typename DerivedT>
+    inline parse_info<CharT const*>
+    parse(CharT const* str, parser<DerivedT> const& p)
+    {
+        CharT const* last = str;
+        while (*last)
+            last++;
+        return parse(str, last, p);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/match.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/match.hpp
new file mode 100644 (file)
index 0000000..6f1822e
--- /dev/null
@@ -0,0 +1,185 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_HPP)
+#define BOOST_SPIRIT_MATCH_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/config.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/optional.hpp>
+#include <boost/spirit/home/classic/core/assert.hpp>
+#include <boost/spirit/home/classic/core/safe_bool.hpp>
+#include <boost/spirit/home/classic/core/impl/match_attr_traits.ipp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  match class
+    //
+    //      The match holds the result of a parser. A match object evaluates
+    //      to true when a successful match is found, otherwise false. The
+    //      length of the match is the number of characters (or tokens) that
+    //      is successfully matched. This can be queried through its length()
+    //      member function. A negative value means that the match is
+    //      unsucessful.
+    //
+    //      Each parser may have an associated attribute. This attribute is
+    //      also returned back to the client on a successful parse through
+    //      the match object. The match's value() member function returns the
+    //      match's attribute.
+    //
+    //      A match attribute is valid:
+    //
+    //          * on a successful match
+    //          * when its value is set through the value(val) member function
+    //          * if it is assigned or copied from a compatible match object
+    //            (e.g. match<double> from match<int>) with a valid attribute.
+    //
+    //      The match attribute is undefined:
+    //
+    //          * on an unsuccessful match
+    //          * when an attempt to copy or assign from another match object
+    //            with an incompatible attribute type (e.g. match<std::string>
+    //            from match<int>).
+    //
+    //      The member function has_valid_attribute() can be queried to know if
+    //      it is safe to get the match's attribute. The attribute may be set
+    //      through the member function value(v) where v is the new attribute
+    //      value.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T = nil_t>
+    class match : public safe_bool<match<T> >
+    {
+
+    public:
+
+        typedef typename boost::optional<T> optional_type;
+        typedef typename optional_type::argument_type ctor_param_t;
+        typedef typename optional_type::reference_const_type return_t;
+        typedef T attr_t;
+
+                                match();
+        explicit                match(std::size_t length);
+                                match(std::size_t length, ctor_param_t val);
+
+        bool                    operator!() const;
+        std::ptrdiff_t          length() const;
+        bool                    has_valid_attribute() const;
+        return_t                value() const;
+        void                    swap(match& other);
+
+        template <typename T2>
+        match(match<T2> const& other)
+        : len(other.length()), val()
+        {
+            impl::match_attr_traits<T>::copy(val, other);
+        }
+
+        template <typename T2>
+        match&
+        operator=(match<T2> const& other)
+        {
+            impl::match_attr_traits<T>::assign(val, other);
+            len = other.length();
+            return *this;
+        }
+
+        template <typename MatchT>
+        void
+        concat(MatchT const& other)
+        {
+            BOOST_SPIRIT_ASSERT(*this && other);
+            len += other.length();
+        }
+
+        template <typename ValueT>
+        void
+        value(ValueT const& val_)
+        {
+            impl::match_attr_traits<T>::set_value(val, val_, is_reference<T>());
+        }
+
+        bool operator_bool() const
+        {
+            return len >= 0;
+        }
+
+    private:
+
+        std::ptrdiff_t len;
+        optional_type val;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  match class specialization for nil_t values
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    class match<nil_t> : public safe_bool<match<nil_t> >
+    {
+    public:
+
+        typedef nil_t attr_t;
+        typedef nil_t return_t;
+
+                                match();
+        explicit                match(std::size_t length);
+                                match(std::size_t length, nil_t);
+
+        bool                    operator!() const;
+        bool                    has_valid_attribute() const;
+        std::ptrdiff_t          length() const;
+        nil_t                   value() const;
+        void                    value(nil_t);
+        void                    swap(match& other);
+
+        template <typename T>
+        match(match<T> const& other)
+        : len(other.length()) {}
+
+        template <typename T>
+        match<>&
+        operator=(match<T> const& other)
+        {
+            len = other.length();
+            return *this;
+        }
+
+        template <typename T>
+        void
+        concat(match<T> const& other)
+        {
+            BOOST_SPIRIT_ASSERT(*this && other);
+            len += other.length();
+        }
+
+        bool operator_bool() const
+        {
+            return len >= 0;
+        }
+
+    private:
+
+        std::ptrdiff_t len;
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+#include <boost/spirit/home/classic/core/impl/match.ipp>
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/nil.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/nil.hpp
new file mode 100644 (file)
index 0000000..c94c064
--- /dev/null
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NIL_HPP)
+#define BOOST_SPIRIT_NIL_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct nil_t {};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp
new file mode 100644 (file)
index 0000000..153bc40
--- /dev/null
@@ -0,0 +1,84 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_HPP)
+#define BOOST_SPIRIT_GRAMMAR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_THREADSAFE) && defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#undef BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE
+#endif
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  grammar class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DerivedT, typename ContextT = parser_context<> >
+struct grammar
+    : public parser<DerivedT>
+    , public ContextT::base_t
+    , public context_aux<ContextT, DerivedT>
+    BOOST_SPIRIT_GRAMMAR_ID
+{
+    typedef grammar<DerivedT, ContextT>         self_t;
+    typedef DerivedT const&                     embed_t;
+    typedef typename ContextT::context_linker_t context_t;
+    typedef typename context_t::attr_t          attr_t;
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, attr_t>::type type;
+    };
+
+    grammar() {}
+    ~grammar() { impl::grammar_destruct(this); }
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse_main(ScannerT const& scan) const
+    { return impl::grammar_parser_parse<0>(this, scan); }
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename parser_result<self_t, ScannerT>::type result_t;
+        typedef parser_scanner_linker<ScannerT> scanner_t;
+        BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t)
+    }
+
+    template <int N>
+    impl::entry_grammar<DerivedT, N, ContextT>
+    use_parser() const
+    { return impl::entry_grammar<DerivedT, N, ContextT>( this->derived()); }
+
+    BOOST_SPIRIT_GRAMMAR_STATE
+};
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#undef BOOST_SPIRIT_GRAMMAR_ID
+#undef BOOST_SPIRIT_GRAMMAR_STATE
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
new file mode 100644 (file)
index 0000000..b26f534
--- /dev/null
@@ -0,0 +1,370 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined BOOST_SPIRIT_GRAMMAR_IPP
+#define BOOST_SPIRIT_GRAMMAR_IPP
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#include <boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp>
+#include <algorithm>
+#include <functional>
+#include <memory> // for std::auto_ptr
+#include <boost/weak_ptr.hpp>
+#endif
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+#include <boost/spirit/home/classic/core/non_terminal/impl/static.hpp>
+#include <boost/thread/tss.hpp>
+#include <boost/thread/mutex.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+template <typename DerivedT, typename ContextT>
+struct grammar;
+
+
+//////////////////////////////////
+template <typename GrammarT, typename ScannerT>
+struct grammar_definition
+{
+    typedef typename GrammarT::template definition<ScannerT> type;
+};
+
+
+    namespace impl
+    {
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+    struct grammar_tag {};
+
+    //////////////////////////////////
+    template <typename GrammarT>
+    struct grammar_helper_base
+    {
+        virtual int undefine(GrammarT *) = 0;
+        virtual ~grammar_helper_base() {}
+    };
+
+    //////////////////////////////////
+    template <typename GrammarT>
+    struct grammar_helper_list
+    {
+        typedef GrammarT                      grammar_t;
+        typedef grammar_helper_base<GrammarT> helper_t;
+        typedef std::vector<helper_t*>        vector_t;
+
+        grammar_helper_list() {}
+        grammar_helper_list(grammar_helper_list const& /*x*/)
+        {   // Does _not_ copy the helpers member !
+        }
+
+        grammar_helper_list& operator=(grammar_helper_list const& x)
+        {   // Does _not_ copy the helpers member !
+            return *this;
+        }
+
+        void push_back(helper_t *helper)
+        { helpers.push_back(helper); }
+
+        void pop_back()
+        { helpers.pop_back(); }
+
+        typename vector_t::size_type
+        size() const
+        { return helpers.size(); }
+
+        typename vector_t::reverse_iterator
+        rbegin()
+        { return helpers.rbegin(); }
+
+        typename vector_t::reverse_iterator
+        rend()
+        { return helpers.rend(); }
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+        boost::mutex & mutex()
+        { return m; }
+#endif
+
+    private:
+
+        vector_t        helpers;
+#ifdef BOOST_SPIRIT_THREADSAFE
+        boost::mutex    m;
+#endif
+    };
+
+    //////////////////////////////////
+    struct grammartract_helper_list;
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+
+    struct grammartract_helper_list
+    {
+        template<typename GrammarT>
+        static grammar_helper_list<GrammarT>&
+        do_(GrammarT const* g)
+        {
+            return g->helpers;
+        }
+    };
+
+#endif
+
+    //////////////////////////////////
+    template <typename GrammarT, typename DerivedT, typename ScannerT>
+    struct grammar_helper : private grammar_helper_base<GrammarT>
+    {
+        typedef GrammarT grammar_t;
+        typedef ScannerT scanner_t;
+        typedef DerivedT derived_t;
+        typedef typename grammar_definition<DerivedT, ScannerT>::type definition_t;
+
+        typedef grammar_helper<grammar_t, derived_t, scanner_t> helper_t;
+        typedef boost::shared_ptr<helper_t> helper_ptr_t;
+        typedef boost::weak_ptr<helper_t>   helper_weak_ptr_t;
+
+        grammar_helper*
+        this_() { return this; }
+
+        grammar_helper(helper_weak_ptr_t& p)
+        : definitions_cnt(0)
+        , self(this_())
+        { p = self; }
+
+        definition_t&
+        define(grammar_t const* target_grammar)
+        {
+            grammar_helper_list<GrammarT> &helpers =
+            grammartract_helper_list::do_(target_grammar);
+            typename grammar_t::object_id id = target_grammar->get_object_id();
+
+            if (definitions.size()<=id)
+                definitions.resize(id*3/2+1);
+            if (definitions[id]!=0)
+                return *definitions[id];
+
+            std::auto_ptr<definition_t>
+                result(new definition_t(target_grammar->derived()));
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+            boost::mutex::scoped_lock lock(helpers.mutex());
+#endif
+            helpers.push_back(this);
+
+            ++definitions_cnt;
+            definitions[id] = result.get();
+            return *(result.release());
+        }
+
+        int
+        undefine(grammar_t* target_grammar)
+        {
+            typename grammar_t::object_id id = target_grammar->get_object_id();
+
+            if (definitions.size()<=id)
+                return 0;
+            delete definitions[id];
+            definitions[id] = 0;
+            if (--definitions_cnt==0)
+                self.reset();
+            return 0;
+        }
+
+    private:
+
+        std::vector<definition_t*>  definitions;
+        unsigned long               definitions_cnt;
+        helper_ptr_t                self;
+    };
+
+#endif /* defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE) */
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+    class get_definition_static_data_tag
+    {
+        template<typename DerivedT, typename ContextT, typename ScannerT>
+        friend typename DerivedT::template definition<ScannerT> &
+            get_definition(grammar<DerivedT, ContextT> const*  self);
+
+        get_definition_static_data_tag() {}
+    };
+#endif
+
+    template<typename DerivedT, typename ContextT, typename ScannerT>
+    inline typename DerivedT::template definition<ScannerT> &
+    get_definition(grammar<DerivedT, ContextT> const*  self)
+    {
+#if defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+
+        typedef typename DerivedT::template definition<ScannerT> definition_t;
+        static definition_t def(self->derived());
+        return def;
+#else
+        typedef grammar<DerivedT, ContextT>                      self_t;
+        typedef impl::grammar_helper<self_t, DerivedT, ScannerT> helper_t;
+        typedef typename helper_t::helper_weak_ptr_t             ptr_t;
+
+# ifdef BOOST_SPIRIT_THREADSAFE
+        boost::thread_specific_ptr<ptr_t> & tld_helper
+            = static_<boost::thread_specific_ptr<ptr_t>,
+                get_definition_static_data_tag>(get_definition_static_data_tag());
+
+        if (!tld_helper.get())
+            tld_helper.reset(new ptr_t);
+        ptr_t &helper = *tld_helper;
+# else
+        static ptr_t helper;
+# endif
+        if (helper.expired())
+            new helper_t(helper);
+        return helper.lock()->define(self);
+#endif
+    }
+
+    template <int N>
+    struct call_helper {
+
+        template <typename RT, typename DefinitionT, typename ScannerT>
+        static void
+        do_ (RT &result, DefinitionT &def, ScannerT const &scan)
+        {
+            result = def.template get_start_parser<N>()->parse(scan);
+        }
+    };
+
+    template <>
+    struct call_helper<0> {
+
+        template <typename RT, typename DefinitionT, typename ScannerT>
+        static void
+        do_ (RT &result, DefinitionT &def, ScannerT const &scan)
+        {
+            result = def.start().parse(scan);
+        }
+    };
+
+    //////////////////////////////////
+    template<int N, typename DerivedT, typename ContextT, typename ScannerT>
+    inline typename parser_result<grammar<DerivedT, ContextT>, ScannerT>::type
+    grammar_parser_parse(
+        grammar<DerivedT, ContextT> const*  self,
+        ScannerT const &scan)
+    {
+        typedef
+            typename parser_result<grammar<DerivedT, ContextT>, ScannerT>::type
+            result_t;
+        typedef typename DerivedT::template definition<ScannerT> definition_t;
+
+        result_t result;
+        definition_t &def = get_definition<DerivedT, ContextT, ScannerT>(self);
+
+        call_helper<N>::do_(result, def, scan);
+        return result;
+    }
+
+    //////////////////////////////////
+    template<typename GrammarT>
+    inline void
+    grammar_destruct(GrammarT* self)
+    {
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+        typedef impl::grammar_helper_base<GrammarT> helper_base_t;
+        typedef grammar_helper_list<GrammarT> helper_list_t;
+        typedef typename helper_list_t::vector_t::reverse_iterator iterator_t;
+
+        helper_list_t&  helpers =
+        grammartract_helper_list::do_(self);
+
+# if defined(BOOST_INTEL_CXX_VERSION)
+        for (iterator_t i = helpers.rbegin(); i != helpers.rend(); ++i)
+            (*i)->undefine(self);
+# else
+        std::for_each(helpers.rbegin(), helpers.rend(),
+            std::bind2nd(std::mem_fun(&helper_base_t::undefine), self));
+# endif
+
+#else
+        (void)self;
+#endif
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  entry_grammar class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename DerivedT, int N, typename ContextT>
+    class entry_grammar
+        : public parser<entry_grammar<DerivedT, N, ContextT> >
+    {
+
+    public:
+        typedef entry_grammar<DerivedT, N, ContextT>    self_t;
+        typedef self_t                                  embed_t;
+        typedef typename ContextT::context_linker_t     context_t;
+        typedef typename context_t::attr_t              attr_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, attr_t>::type type;
+        };
+
+        entry_grammar(DerivedT const &p) : target_grammar(p) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse_main(ScannerT const& scan) const
+        { return impl::grammar_parser_parse<N>(&target_grammar, scan); }
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef parser_scanner_linker<ScannerT> scanner_t;
+            BOOST_SPIRIT_CONTEXT_PARSE(scan, target_grammar, scanner_t,
+                context_t, result_t)
+        }
+
+    private:
+        DerivedT const &target_grammar;
+    };
+
+    } // namespace impl
+
+///////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#define BOOST_SPIRIT_GRAMMAR_ID , public impl::object_with_id<impl::grammar_tag>
+#else
+#define BOOST_SPIRIT_GRAMMAR_ID
+#endif
+
+///////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#define BOOST_SPIRIT_GRAMMAR_STATE                            \
+    private:                                                  \
+    friend struct impl::grammartract_helper_list;    \
+    mutable impl::grammar_helper_list<self_t> helpers;
+#else
+#define BOOST_SPIRIT_GRAMMAR_STATE
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp
new file mode 100644 (file)
index 0000000..822180a
--- /dev/null
@@ -0,0 +1,191 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined BOOST_SPIRIT_OBJECT_WITH_ID_IPP
+#define BOOST_SPIRIT_OBJECT_WITH_ID_IPP
+
+#include <vector>
+#include <boost/shared_ptr.hpp>
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/once.hpp>
+#endif
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+
+        //////////////////////////////////
+        template <typename IdT = std::size_t>
+        struct object_with_id_base_supply
+        {
+            typedef IdT                     object_id;
+            typedef std::vector<object_id>  id_vector;
+
+            object_with_id_base_supply() : max_id(object_id()) {}
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+            boost::mutex        mutex;
+#endif
+            object_id           max_id;
+            id_vector           free_ids;
+
+            object_id           acquire();
+            void                release(object_id);
+        };
+
+        //////////////////////////////////
+        template <typename TagT, typename IdT = std::size_t>
+        struct object_with_id_base
+        {
+            typedef TagT        tag_t;
+            typedef IdT         object_id;
+
+        protected:
+
+            object_id           acquire_object_id();
+            void                release_object_id(object_id);
+
+        private:
+#ifdef BOOST_SPIRIT_THREADSAFE
+            static boost::mutex &mutex_instance();
+            static void mutex_init();
+#endif
+
+            boost::shared_ptr<object_with_id_base_supply<IdT> > id_supply;
+        };
+
+        //////////////////////////////////
+        template<class TagT, typename IdT = std::size_t>
+        struct object_with_id : private object_with_id_base<TagT, IdT>
+        {
+            typedef object_with_id<TagT, IdT>       self_t;
+            typedef object_with_id_base<TagT, IdT>  base_t;
+            typedef IdT                             object_id;
+
+            object_with_id() : id(base_t::acquire_object_id()) {}
+            object_with_id(self_t const &other)
+                : base_t(other)
+                , id(base_t::acquire_object_id())
+            {} // don't copy id
+            self_t &operator = (self_t const &other)
+            {   // don't assign id
+                base_t::operator=(other);
+                return *this;
+            }
+            ~object_with_id() { base_t::release_object_id(id); }
+            object_id get_object_id() const { return id; }
+
+        private:
+
+            object_id const id;
+        };
+
+        //////////////////////////////////
+        template <typename IdT>
+        inline IdT
+        object_with_id_base_supply<IdT>::acquire()
+        {
+#ifdef BOOST_SPIRIT_THREADSAFE
+            boost::mutex::scoped_lock lock(mutex);
+#endif
+            if (free_ids.size())
+            {
+                object_id id = *free_ids.rbegin();
+                free_ids.pop_back();
+                return id;
+            }
+            else
+            {
+                if (free_ids.capacity()<=max_id)
+                    free_ids.reserve(max_id*3/2+1);
+                return ++max_id;
+            }
+        }
+
+        //////////////////////////////////
+        template <typename IdT>
+        inline void
+        object_with_id_base_supply<IdT>::release(IdT id)
+        {
+#ifdef BOOST_SPIRIT_THREADSAFE
+            boost::mutex::scoped_lock lock(mutex);
+#endif
+            if (max_id == id)
+                max_id--;
+            else
+                free_ids.push_back(id); // doesn't throw
+        }
+
+        //////////////////////////////////
+        template <typename TagT, typename IdT>
+        inline IdT
+        object_with_id_base<TagT, IdT>::acquire_object_id()
+        {
+            {
+#ifdef BOOST_SPIRIT_THREADSAFE
+                static boost::once_flag been_here = BOOST_ONCE_INIT;
+                boost::call_once(been_here, mutex_init);
+                boost::mutex &mutex = mutex_instance();
+                boost::mutex::scoped_lock lock(mutex);
+#endif
+                static boost::shared_ptr<object_with_id_base_supply<IdT> >
+                    static_supply;
+
+                if (!static_supply.get())
+                    static_supply.reset(new object_with_id_base_supply<IdT>());
+                id_supply = static_supply;
+            }
+
+            return id_supply->acquire();
+        }
+
+        //////////////////////////////////
+        template <typename TagT, typename IdT>
+        inline void
+        object_with_id_base<TagT, IdT>::release_object_id(IdT id)
+        {
+            id_supply->release(id);
+        }
+
+        //////////////////////////////////
+#ifdef BOOST_SPIRIT_THREADSAFE
+        template <typename TagT, typename IdT>
+        inline boost::mutex &
+        object_with_id_base<TagT, IdT>::mutex_instance()
+        {
+            static boost::mutex mutex;
+            return mutex;
+        }
+#endif
+
+        //////////////////////////////////
+#ifdef BOOST_SPIRIT_THREADSAFE
+        template <typename TagT, typename IdT>
+        inline void 
+        object_with_id_base<TagT, IdT>::mutex_init()
+        {
+            mutex_instance();
+        }
+#endif
+
+    } // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
new file mode 100644 (file)
index 0000000..9f10306
--- /dev/null
@@ -0,0 +1,420 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_IPP)
+#define BOOST_SPIRIT_RULE_IPP
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_params_with_defaults.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#endif
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_id.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+        template <
+            BOOST_PP_ENUM_BINARY_PARAMS(
+                BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+                typename ScannerT, = mpl::void_ BOOST_PP_INTERCEPT
+            )
+        >
+        struct scanner_list;
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        template <typename BaseT, typename DefaultT
+            , typename T0, typename T1, typename T2>
+        struct get_param
+        {
+            typedef typename mpl::if_<
+                is_base_and_derived<BaseT, T0>
+              , T0
+              , typename mpl::if_<
+                    is_base_and_derived<BaseT, T1>
+                  , T1
+                  , typename mpl::if_<
+                        is_base_and_derived<BaseT, T2>
+                      , T2
+                      , DefaultT
+                    >::type
+                >::type
+            >::type type;
+        };
+
+        template <typename T0, typename T1, typename T2>
+        struct get_context
+        {
+            typedef typename get_param<
+                parser_context_base, parser_context<>, T0, T1, T2>::type
+            type;
+        };
+
+        template <typename T0, typename T1, typename T2>
+        struct get_tag
+        {
+            typedef typename get_param<
+                parser_tag_base, parser_address_tag, T0, T1, T2>::type
+            type;
+        };
+
+        template <typename T0, typename T1, typename T2>
+        struct get_scanner
+        {
+            typedef typename get_param<
+                scanner_base, scanner<>, T0, T1, T2>::type
+            type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  rule_base class
+        //
+        //      The rule_base class implements the basic plumbing for rules
+        //      minus the storage mechanism. It is up to the derived class
+        //      to actually store the definition somewhere. The rule_base
+        //      class assumes that the derived class provides a get() function
+        //      that will return a pointer to a parser. The get() function
+        //      may return NULL. See rule below for details.
+        //
+        //      <<< For framework use only. Not for public consumption. >>>
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <
+            typename DerivedT       // derived class
+          , typename EmbedT         // how derived class is embedded
+          , typename T0 = nil_t     // see rule class
+          , typename T1 = nil_t     // see rule class
+          , typename T2 = nil_t     // see rule class
+        >
+        class rule_base; // forward declaration
+
+        class rule_base_access
+        {
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
+    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+        public: // YUCK!
+#else
+            template <
+                typename DerivedT
+              , typename EmbedT
+              , typename T0
+              , typename T1
+              , typename T2
+            >
+           friend class rule_base;
+#endif
+            template <typename RuleT>
+            static typename RuleT::abstract_parser_t*
+            get(RuleT const& r)
+            {
+                return r.get();
+            }
+        };
+
+        template <
+            typename DerivedT       // derived class
+          , typename EmbedT         // how derived class is embedded
+          , typename T0             // see rule class
+          , typename T1             // see rule class
+          , typename T2             // see rule class
+        >
+        class rule_base
+            : public parser<DerivedT>
+            , public impl::get_context<T0, T1, T2>::type::base_t
+            , public context_aux<
+                typename impl::get_context<T0, T1, T2>::type, DerivedT>
+            , public impl::get_tag<T0, T1, T2>::type
+        {
+        public:
+
+            typedef typename impl::get_scanner<T0, T1, T2>::type scanner_t;
+            typedef typename impl::get_context<T0, T1, T2>::type context_t;
+            typedef typename impl::get_tag<T0, T1, T2>::type tag_t;
+
+            typedef EmbedT embed_t;
+            typedef typename context_t::context_linker_t linked_context_t;
+            typedef typename linked_context_t::attr_t attr_t;
+
+            template <typename ScannerT>
+            struct result
+            {
+                typedef typename match_result<ScannerT, attr_t>::type type;
+            };
+
+            template <typename ScannerT>
+            typename parser_result<DerivedT, ScannerT>::type
+            parse(ScannerT const& scan) const
+            {
+                typedef parser_scanner_linker<ScannerT> linked_scanner_t;
+                typedef typename parser_result<DerivedT, ScannerT>::type result_t;
+                BOOST_SPIRIT_CONTEXT_PARSE(
+                    scan, *this, linked_scanner_t, linked_context_t, result_t);
+            }
+
+            template <typename ScannerT>
+            typename parser_result<DerivedT, ScannerT>::type
+            parse_main(ScannerT const& scan) const
+            {
+                typename parser_result<DerivedT, ScannerT>::type hit;
+
+                //  MWCW 8.3 needs this cast to be done through a pointer,
+                //  not a reference. Otherwise, it will silently construct
+                //  a temporary, causing an infinite runtime recursion.
+                DerivedT const* derived_this = static_cast<DerivedT const*>(this);
+
+                if (rule_base_access::get(*derived_this))
+                {
+                    typename ScannerT::iterator_t s(scan.first);
+                    hit = rule_base_access::get(*derived_this)
+                            ->do_parse_virtual(scan);
+                    scan.group_match(hit, this->id(), s, scan.first);
+                }
+                else
+                {
+                    hit = scan.no_match();
+                }
+                return hit;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  abstract_parser class
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename ScannerT, typename AttrT>
+        struct abstract_parser
+        {
+            abstract_parser() {}
+            virtual ~abstract_parser() {}
+
+            virtual typename match_result<ScannerT, AttrT>::type
+            do_parse_virtual(ScannerT const& scan) const = 0;
+
+            virtual abstract_parser*
+            clone() const = 0;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  concrete_parser class
+        //
+        ///////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+        
+        template <typename ParserT, typename ScannerT, typename AttrT>
+        struct concrete_parser : abstract_parser<ScannerT, AttrT>
+        {
+            concrete_parser(ParserT const& p_) : p(p_) {}
+            virtual ~concrete_parser() {}
+
+            virtual typename match_result<ScannerT, AttrT>::type
+            do_parse_virtual(ScannerT const& scan) const
+            {
+                return p.parse(scan);
+            }
+
+            virtual abstract_parser<ScannerT, AttrT>*
+            clone() const
+            {
+                return new concrete_parser(p);
+            }
+
+            typename ParserT::embed_t p;
+        };
+        
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  This generates partial specializations for the class
+        //
+        //          abstract_parser
+        //
+        //  with an increasing number of different ScannerT template parameters
+        //  and corresponding do_parse_virtual function declarations for each
+        //  of the different required scanner types:
+        //
+        //      template <typename ScannerT0, ..., typename AttrT>
+        //      struct abstract_parser<scanner_list<ScannerT0, ...>, AttrT>
+        //      {
+        //          abstract_parser() {}
+        //          virtual ~abstract_parser() {}
+        //
+        //          virtual typename match_result<ScannerT0, AttrT>::type
+        //          do_parse_virtual(ScannerT0 const &scan) const = 0;
+        //
+        //          virtual abstract_parser*
+        //          clone() const = 0;
+        //
+        //          ...
+        //      };
+        //
+        ///////////////////////////////////////////////////////////////////////
+        #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_A(z, N, _)                       \
+                virtual typename match_result<                                  \
+                    BOOST_PP_CAT(ScannerT, N), AttrT                            \
+                >::type                                                         \
+                do_parse_virtual(                                               \
+                    BOOST_PP_CAT(ScannerT, N) const& scan) const = 0;           \
+
+        #define BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS(z, N, _)                     \
+            template <                                                          \
+                BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT),  \
+                typename AttrT                                                  \
+            >                                                                   \
+            struct abstract_parser<                                             \
+                scanner_list<                                                   \
+                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)        \
+                >,                                                              \
+                AttrT                                                           \
+            >                                                                   \
+            {                                                                   \
+                abstract_parser() {}                                            \
+                virtual ~abstract_parser() {}                                   \
+                                                                                \
+                BOOST_PP_REPEAT_ ## z(                                          \
+                    BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_A, _)       \
+                                                                                \
+                virtual abstract_parser*                                        \
+                clone() const = 0;                                              \
+            };                                                                  \
+
+        BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+            BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS, _)
+
+        #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_A
+        #undef BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS
+        ///////////////////////////////////////////////////////////////////////
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  This generates partial specializations for the class
+        //
+        //          concrete_parser
+        //
+        //  with an increasing number of different ScannerT template parameters
+        //  and corresponding do_parse_virtual function declarations for each
+        //  of the different required scanner types:
+        //
+        //      template <
+        //          typename ParserT, typename ScannerT0, ..., typename AttrT
+        //      >
+        //      struct concrete_parser<
+        //          ParserT, scanner_list<ScannerT0, ...>, AttrT
+        //      >
+        //      :   public abstract_parser<scanner_list<ScannerT0, ...>, AttrT>
+        //      {
+        //          concrete_parser(ParserT const& p_) : p(p_) {}
+        //          virtual ~concrete_parser() {}
+        //
+        //          virtual typename match_result<ScannerT0, AttrT>::type
+        //          do_parse_virtual(ScannerT0 const &scan) const
+        //          { return p.parse(scan); }
+        //
+        //          virtual abstract_parser<scanner_list<ScannerT0, ...>, AttrT>*
+        //          clone() const
+        //          {
+        //              return new concrete_parser(p);
+        //          }
+        //
+        //          ...
+        //
+        //          typename ParserT::embed_t p;
+        //      };
+        //
+        ///////////////////////////////////////////////////////////////////////
+        #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_C(z, N, _)                       \
+                virtual typename match_result<                                  \
+                    BOOST_PP_CAT(ScannerT, N), AttrT                            \
+                >::type                                                         \
+                do_parse_virtual(                                               \
+                    BOOST_PP_CAT(ScannerT, N) const& scan) const                \
+                { return p.parse(scan); }                                       \
+
+        #define BOOST_SPIRIT_ENUM_CONCRETE_PARSERS(z, N, _)                     \
+            template <                                                          \
+                typename ParserT,                                               \
+                BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT),  \
+                typename AttrT                                                  \
+            >                                                                   \
+            struct concrete_parser<                                             \
+                ParserT,                                                        \
+                scanner_list<                                                   \
+                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)        \
+                >,                                                              \
+                AttrT                                                           \
+            >                                                                   \
+            :   abstract_parser<                                                \
+                    scanner_list<                                               \
+                        BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)    \
+                    >,                                                          \
+                    AttrT                                                       \
+                >                                                               \
+            {                                                                   \
+                concrete_parser(ParserT const& p_) : p(p_) {}                   \
+                virtual ~concrete_parser() {}                                   \
+                                                                                \
+                BOOST_PP_REPEAT_ ## z(                                          \
+                    BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_C, _)       \
+                                                                                \
+                virtual abstract_parser<                                        \
+                    scanner_list<                                               \
+                        BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)    \
+                    >,                                                          \
+                    AttrT                                                       \
+                >*                                                              \
+                clone() const                                                   \
+                {                                                               \
+                    return new concrete_parser(p);                              \
+                }                                                               \
+                                                                                \
+                typename ParserT::embed_t p;                                    \
+            };                                                                  \
+
+        BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+            BOOST_SPIRIT_ENUM_CONCRETE_PARSERS, _)
+
+        #undef BOOST_SPIRIT_ENUM_CONCRETE_PARSERS
+        #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_C
+        ///////////////////////////////////////////////////////////////////////
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+    } // namespace impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/static.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/static.hpp
new file mode 100644 (file)
index 0000000..89c6d29
--- /dev/null
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (c) 2006 Joao Abecasis
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STATIC_HPP)
+#define BOOST_SPIRIT_STATIC_HPP
+
+#include <boost/noncopyable.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/aligned_storage.hpp>
+
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+#include <boost/thread/once.hpp>
+
+#include <memory>   // for placement new
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    //
+    //  Provides thread-safe initialization of a single static instance of T.
+    //
+    //  This instance is guaranteed to be constructed on static storage in a
+    //  thread-safe manner, on the first call to the constructor of static_.
+    //
+    //  Requirements:
+    //      T is default constructible
+    //          (There's an alternate implementation that relaxes this
+    //              requirement -- Joao Abecasis)
+    //      T::T() MUST not throw!
+    //          this is a requirement of boost::call_once.
+    //
+    template <class T, class Tag>
+    struct static_
+        : boost::noncopyable
+    {
+    private:
+
+        struct destructor
+        {
+            ~destructor()
+            {
+                static_::get_address()->~value_type();
+            }
+        };
+
+        struct default_ctor
+        {
+            static void construct()
+            {
+                ::new (static_::get_address()) value_type();
+                static destructor d;
+            }
+        };
+
+    public:
+
+        typedef T value_type;
+        typedef typename boost::call_traits<T>::reference reference;
+        typedef typename boost::call_traits<T>::const_reference const_reference;
+
+        static_(Tag = Tag())
+        {
+            boost::call_once(&default_ctor::construct, constructed_);
+        }
+
+        operator reference()
+        {
+            return this->get();
+        }
+
+        operator const_reference() const
+        {
+            return this->get();
+        }
+
+        reference get()
+        {
+            return *this->get_address();
+        }
+
+        const_reference get() const
+        {
+            return *this->get_address();
+        }
+
+    private:
+        typedef typename boost::add_pointer<value_type>::type pointer;
+
+        static pointer get_address()
+        {
+            return static_cast<pointer>(data_.address());
+        }
+
+        typedef boost::aligned_storage<sizeof(value_type),
+            boost::alignment_of<value_type>::value> storage_type;
+
+        static storage_type data_;
+        static once_flag constructed_;
+    };
+
+    template <class T, class Tag>
+    typename static_<T, Tag>::storage_type static_<T, Tag>::data_;
+
+    template <class T, class Tag>
+    once_flag static_<T, Tag>::constructed_ = BOOST_ONCE_INIT;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // include guard
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
new file mode 100644 (file)
index 0000000..f6bdaaf
--- /dev/null
@@ -0,0 +1,140 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_IPP)
+#define BOOST_SPIRIT_SUBRULE_IPP
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename FirstT, typename RestT>
+    struct subrule_list;
+
+    template <int ID, typename DefT, typename ContextT>
+    struct subrule_parser;
+
+    namespace impl {
+
+
+        template <int N, typename ListT>
+        struct get_subrule
+        {
+            //  First case. ListT is non-empty but the list's
+            //  first item does not have the ID we are looking for.
+
+            typedef typename get_subrule<N, typename ListT::rest_t>::type type;
+        };
+
+        template <int ID, typename DefT, typename ContextT, typename RestT>
+        struct get_subrule<
+            ID,
+            subrule_list<
+                subrule_parser<ID, DefT, ContextT>,
+                RestT> >
+        {
+            //  Second case. ListT is non-empty and the list's
+            //  first item has the ID we are looking for.
+
+            typedef DefT type;
+        };
+
+        template <int ID>
+        struct get_subrule<ID, nil_t>
+        {
+            //  Third case. ListT is empty
+            typedef nil_t type;
+        };
+
+
+        template <typename T1, typename T2>
+        struct get_result_t {
+
+        //  If the result type dictated by the context is nil_t (no closures
+        //  present), then the whole subrule_parser return type is equal to
+        //  the return type of the right hand side of this subrule_parser,
+        //  otherwise it is equal to the dictated return value.
+
+            typedef typename mpl::if_<
+                boost::is_same<T1, nil_t>, T2, T1
+            >::type type;
+        };
+
+        template <int ID, typename ScannerT, typename ContextResultT>
+        struct get_subrule_result
+        {
+            typedef typename
+                impl::get_subrule<ID, typename ScannerT::list_t>::type
+            parser_t;
+
+            typedef typename parser_result<parser_t, ScannerT>::type
+            def_result_t;
+
+            typedef typename match_result<ScannerT, ContextResultT>::type
+            context_result_t;
+
+            typedef typename get_result_t<context_result_t, def_result_t>::type
+            type;
+        };
+
+        template <typename DefT, typename ScannerT, typename ContextResultT>
+        struct get_subrule_parser_result
+        {
+            typedef typename parser_result<DefT, ScannerT>::type
+            def_result_t;
+
+            typedef typename match_result<ScannerT, ContextResultT>::type
+            context_result_t;
+
+            typedef typename get_result_t<context_result_t, def_result_t>::type
+            type;
+        };
+
+        template <typename SubruleT, int ID>
+        struct same_subrule_id
+        {
+            BOOST_STATIC_CONSTANT(bool, value = (SubruleT::id == ID));
+        };
+
+        template <typename RT, typename ScannerT, int ID>
+        struct parse_subrule
+        {
+            template <typename ListT>
+            static void
+            do_parse(RT& r, ScannerT const& scan, ListT const& list, mpl::true_)
+            {
+                r = list.first.rhs.parse(scan);
+            }
+
+            template <typename ListT>
+            static void
+            do_parse(RT& r, ScannerT const& scan, ListT const& list, mpl::false_)
+            {
+                typedef typename ListT::rest_t::first_t subrule_t;
+                mpl::bool_<same_subrule_id<subrule_t, ID>::value> same_id;
+                do_parse(r, scan, list.rest, same_id);
+            }
+
+            static void
+            do_(RT& r, ScannerT const& scan)
+            {
+                typedef typename ScannerT::list_t::first_t subrule_t;
+                mpl::bool_<same_subrule_id<subrule_t, ID>::value> same_id;
+                do_parse(r, scan, scan.list, same_id);
+            }
+        };
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit::impl
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_context.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_context.hpp
new file mode 100644 (file)
index 0000000..2f7dd23
--- /dev/null
@@ -0,0 +1,150 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_HPP)
+#define BOOST_SPIRIT_PARSER_CONTEXT_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost
+{
+    namespace spirit
+    {
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  default_parser_context_base class { default context base }
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_parser_context_base
+    {
+        template <typename DerivedT>
+        struct aux {};
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_context_base class { base class of all context classes }
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct parser_context_base {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_context class { default context }
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct nil_t;
+    template<typename ContextT> struct parser_context_linker;
+
+    template<typename AttrT = nil_t>
+    struct parser_context : parser_context_base
+    {
+        typedef AttrT attr_t;
+        typedef default_parser_context_base base_t;
+        typedef parser_context_linker<parser_context<AttrT> > context_linker_t;
+
+        template <typename ParserT>
+        parser_context(ParserT const&) {}
+
+        template <typename ParserT, typename ScannerT>
+        void
+        pre_parse(ParserT const&, ScannerT const&) {}
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT&
+        post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+        { return hit; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  context_aux class
+    //
+    //      context_aux<ContextT, DerivedT> is a class derived from the
+    //      ContextT's nested base_t::base<DerivedT> template class. (see
+    //      default_parser_context_base::aux for an example).
+    //
+    //      Basically, this class provides ContextT dependent optional
+    //      functionality to the derived class DerivedT through the CRTP
+    //      idiom (Curiously recurring template pattern).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ContextT, typename DerivedT>
+    struct context_aux : public ContextT::base_t::template aux<DerivedT> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_scanner_linker and parser_scanner_linker classes
+    //  { helper templates for the rule extensibility }
+    //
+    //      This classes can be 'overloaded' (defined elsewhere), to plug
+    //      in additional functionality into the non-terminal parsing process.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+    #define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
+
+    template<typename ScannerT>
+    struct parser_scanner_linker : public ScannerT
+    {
+        parser_scanner_linker(ScannerT const scan_) : ScannerT(scan_) {}
+    };
+
+    #endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+
+    //////////////////////////////////
+    #if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+    #define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
+
+    template<typename ContextT>
+    struct parser_context_linker : public ContextT
+    {
+        template <typename ParserT>
+        parser_context_linker(ParserT const& p)
+        : ContextT(p) {}
+
+        template <typename ParserT, typename ScannerT>
+        void pre_parse(ParserT const& p, ScannerT const& scan)
+        { ContextT::pre_parse(p, scan); }
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT&
+        post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
+        { return ContextT::post_parse(hit, p, scan); }
+    };
+
+    #endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  BOOST_SPIRIT_CONTEXT_PARSE helper macro
+    //
+    //      The original implementation uses a template class. However, we
+    //      need to lessen the template instantiation depth to help inferior
+    //      compilers that sometimes choke on deep template instantiations.
+    //      The objective is to avoid code redundancy. A macro, in this case
+    //      is an obvious solution. Sigh!
+    //
+    //      WARNING: INTERNAL USE ONLY. NOT FOR PUBLIC CONSUMPTION.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_CONTEXT_PARSE(scan, this_, scanner_t, context_t, result_t) \
+            scanner_t scan_wrap(scan);                                              \
+            context_t context_wrap(this_);                                          \
+            context_wrap.pre_parse(this_, scan_wrap);                               \
+            result_t hit = parse_main(scan);                                        \
+            return context_wrap.post_parse(hit, this_, scan_wrap);
+
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+    } // namespace spirit
+} // namespace boost
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_id.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
new file mode 100644 (file)
index 0000000..bc465dc
--- /dev/null
@@ -0,0 +1,122 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_ID_HPP)
+#define BOOST_SPIRIT_PARSER_ID_HPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#   include <ostream>
+#endif
+#include <boost/spirit/home/classic/namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_id class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    class parser_id
+    {
+    public:
+                    parser_id()                     : p(0) {}
+        explicit    parser_id(void const* prule)    : p(prule) {}
+                    parser_id(std::size_t l_)       : l(l_) {}
+
+        bool operator==(parser_id const& x) const   { return p == x.p; }
+        bool operator!=(parser_id const& x) const   { return !(*this == x); }
+        bool operator<(parser_id const& x) const    { return p < x.p; }
+        std::size_t to_long() const                 { return l; }
+
+    private:
+
+        union
+        {
+            void const* p;
+            std::size_t l;
+        };
+    };
+
+    #if defined(BOOST_SPIRIT_DEBUG)
+    inline std::ostream&
+    operator<<(std::ostream& out, parser_id const& rid)
+    {
+        out << (unsigned int)rid.to_long();
+        return out;
+    }
+    #endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_tag_base class: base class of all parser tags
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct parser_tag_base {};
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_address_tag class: tags a parser with its address
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct parser_address_tag : parser_tag_base
+    {
+        parser_id id() const
+        { return parser_id(reinterpret_cast<std::size_t>(this)); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_tag class: tags a parser with an integer ID
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <int N>
+    struct parser_tag : parser_tag_base
+    {
+        static parser_id id()
+        { return parser_id(std::size_t(N)); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  dynamic_parser_tag class: tags a parser with a dynamically changeable
+    //  integer ID
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    class dynamic_parser_tag : public parser_tag_base
+    {
+    public:
+    
+        dynamic_parser_tag() 
+        : tag(std::size_t(0)) {}
+        
+        parser_id 
+        id() const
+        { 
+            return 
+                tag.to_long() 
+                ? tag 
+                : parser_id(reinterpret_cast<std::size_t>(this)); 
+        }
+
+        void set_id(parser_id id_) { tag = id_; } 
+        
+    private:
+    
+        parser_id tag;
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/rule.hpp
new file mode 100644 (file)
index 0000000..1d4336b
--- /dev/null
@@ -0,0 +1,175 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_HPP)
+#define BOOST_SPIRIT_RULE_HPP
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit predefined maximum number of simultaneously usable different
+//  scanner types.
+//
+//  This limit defines the maximum number of possible different scanner
+//  types for which a specific rule<> may be used. If this isn't defined, a
+//  rule<> may be used with one scanner type only (multiple scanner support
+//  is disabled).
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
+#  define BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT 1
+#endif
+
+//  Ensure a meaningful maximum number of simultaneously usable scanner types
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 0);
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/impl/rule.ipp>
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+#  include <boost/preprocessor/enum_params.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner_list (a fake scanner)
+    //
+    //      Typically, rules are tied to a specific scanner type and
+    //      a particular rule cannot be used with anything else. Sometimes
+    //      there's a need for rules that can accept more than one scanner
+    //      type. The scanner_list<S0, ...SN> can be used as a template
+    //      parameter to the rule class to specify up to the number of
+    //      scanner types defined by the BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT
+    //      constant. Example:
+    //
+    //          rule<scanner_list<ScannerT0, ScannerT1> > r;
+    //
+    //      *** This feature is available only to compilers that support
+    //      partial template specialization. ***
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        BOOST_PP_ENUM_PARAMS(
+            BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+            typename ScannerT
+        )
+    >
+    struct scanner_list : scanner_base {};
+
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  rule class
+    //
+    //      The rule is a polymorphic parser that acts as a named place-
+    //      holder capturing the behavior of an EBNF expression assigned to
+    //      it.
+    //
+    //      The rule is a template class parameterized by:
+    //
+    //          1) scanner (scanner_t, see scanner.hpp),
+    //          2) the rule's context (context_t, see parser_context.hpp)
+    //          3) an arbitrary tag (tag_t, see parser_id.hpp) that allows
+    //             a rule to be tagged for identification.
+    //
+    //      These template parameters may be specified in any order. The
+    //      scanner will default to scanner<> when it is not specified.
+    //      The context will default to parser_context when not specified.
+    //      The tag will default to parser_address_tag when not specified.
+    //
+    //      The definition of the rule (its right hand side, RHS) held by
+    //      the rule through a scoped_ptr. When a rule is seen in the RHS
+    //      of an assignment or copy construction EBNF expression, the rule
+    //      is held by the LHS rule by reference.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T0 = nil_t
+      , typename T1 = nil_t
+      , typename T2 = nil_t
+    >
+    class rule
+        : public impl::rule_base<
+            rule<T0, T1, T2>
+          , rule<T0, T1, T2> const&
+          , T0, T1, T2>
+    {
+    public:
+
+        typedef rule<T0, T1, T2> self_t;
+        typedef impl::rule_base<
+            self_t
+          , self_t const&
+          , T0, T1, T2>
+        base_t;
+
+        typedef typename base_t::scanner_t scanner_t;
+        typedef typename base_t::attr_t attr_t;
+        typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
+
+        rule() : ptr() {}
+        ~rule() {}
+
+        rule(rule const& r)
+        : ptr(new impl::concrete_parser<rule, scanner_t, attr_t>(r)) {}
+
+        template <typename ParserT>
+        rule(ParserT const& p)
+        : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
+
+        template <typename ParserT>
+        rule& operator=(ParserT const& p)
+        {
+            ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
+            return *this;
+        }
+
+        rule& operator=(rule const& r)
+        {
+            ptr.reset(new impl::concrete_parser<rule, scanner_t, attr_t>(r));
+            return *this;
+        }
+
+        rule<T0, T1, T2>
+        copy() const
+        {
+            return rule<T0, T1, T2>(ptr.get() ? ptr->clone() : 0);
+        }
+
+    private:
+        friend class impl::rule_base_access;
+
+        abstract_parser_t*
+        get() const
+        {
+            return ptr.get();
+        }
+
+        rule(abstract_parser_t* ptr_)
+        : ptr(ptr_) {}
+
+        rule(abstract_parser_t const* ptr_)
+        : ptr(ptr_) {}
+
+        scoped_ptr<abstract_parser_t> ptr;
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule.hpp
new file mode 100644 (file)
index 0000000..8b25d8d
--- /dev/null
@@ -0,0 +1,300 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_HPP)
+#define BOOST_SPIRIT_SUBRULE_HPP
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+
+#include <boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  subrules_scanner class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ScannerT, typename ListT>
+    struct subrules_scanner : public ScannerT
+    {
+        typedef ScannerT                            scanner_t;
+        typedef ListT                               list_t;
+        typedef subrules_scanner<ScannerT, ListT>   self_t;
+
+        subrules_scanner(ScannerT const& scan, ListT const& list_)
+        : ScannerT(scan), list(list_) {}
+
+        template <typename PoliciesT>
+        struct rebind_policies
+        {
+            typedef typename rebind_scanner_policies<ScannerT, PoliciesT>::type
+                rebind_scanner;
+            typedef subrules_scanner<rebind_scanner, ListT> type;
+        };
+
+        template <typename PoliciesT>
+        subrules_scanner<
+            typename rebind_scanner_policies<ScannerT, PoliciesT>::type,
+            ListT>
+        change_policies(PoliciesT const& policies) const
+        {
+            typedef subrules_scanner<
+                BOOST_DEDUCED_TYPENAME
+                    rebind_scanner_policies<ScannerT, PoliciesT>::type,
+                ListT>
+            subrules_scanner_t;
+
+            return subrules_scanner_t(
+                    ScannerT::change_policies(policies),
+                    list);
+        }
+
+        template <typename IteratorT>
+        struct rebind_iterator
+        {
+            typedef typename rebind_scanner_iterator<ScannerT, IteratorT>::type
+                rebind_scanner;
+            typedef subrules_scanner<rebind_scanner, ListT> type;
+        };
+
+        template <typename IteratorT>
+        subrules_scanner<
+            typename rebind_scanner_iterator<ScannerT, IteratorT>::type,
+            ListT>
+        change_iterator(IteratorT const& first, IteratorT const &last) const
+        {
+            typedef subrules_scanner<
+                BOOST_DEDUCED_TYPENAME
+                    rebind_scanner_iterator<ScannerT, IteratorT>::type,
+                ListT>
+            subrules_scanner_t;
+
+            return subrules_scanner_t(
+                    ScannerT::change_iterator(first, last),
+                    list);
+        }
+
+        ListT const& list;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  subrule_scanner type computer class
+    //
+    //      This computer ensures that the scanner will not be recursively
+    //      instantiated if it's not needed.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ScannerT, typename ListT>
+    struct subrules_scanner_finder
+    {
+          typedef subrules_scanner<ScannerT, ListT> type;
+    };
+
+    template <typename ScannerT, typename ListT>
+    struct subrules_scanner_finder<subrules_scanner<ScannerT, ListT>, ListT>
+    {
+          typedef subrules_scanner<ScannerT, ListT> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  subrule_list class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename FirstT, typename RestT>
+    struct subrule_list : public parser<subrule_list<FirstT, RestT> >
+    {
+        typedef subrule_list<FirstT, RestT> self_t;
+        typedef FirstT                      first_t;
+        typedef RestT                       rest_t;
+
+        subrule_list(FirstT const& first_, RestT const& rest_)
+        : first(first_), rest(rest_) {}
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<FirstT, ScannerT>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename subrules_scanner_finder<ScannerT, self_t>::type
+            subrules_scanner_t;
+            subrules_scanner_t g_arg(scan, *this);
+            return first.start.parse(g_arg);
+        }
+
+        template <int ID, typename DefT, typename ContextT>
+        subrule_list<
+            FirstT,
+            subrule_list<
+                subrule_parser<ID, DefT, ContextT>,
+                RestT> >
+        operator,(subrule_parser<ID, DefT, ContextT> const& rhs_)
+        {
+            return subrule_list<
+                FirstT,
+                subrule_list<
+                    subrule_parser<ID, DefT, ContextT>,
+                    RestT> >(
+                        first,
+                        subrule_list<
+                            subrule_parser<ID, DefT, ContextT>,
+                            RestT>(rhs_, rest));
+        }
+
+        FirstT first;
+        RestT rest;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  subrule_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <int ID, typename DefT, typename ContextT>
+    struct subrule_parser
+    : public parser<subrule_parser<ID, DefT, ContextT> >
+    {
+        typedef subrule_parser<ID, DefT, ContextT> self_t;
+        typedef subrule<ID, ContextT> subrule_t;
+        typedef DefT def_t;
+
+        BOOST_STATIC_CONSTANT(int, id = ID);
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename
+                impl::get_subrule_parser_result<
+                    DefT, ScannerT, typename subrule_t::attr_t>::type type;
+        };
+
+        subrule_parser(subrule_t const& start_, DefT const& rhs_)
+        : rhs(rhs_), start(start_) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            // This will only be called when parsing single subrules.
+            typedef subrule_list<self_t, nil_t> list_t;
+            typedef subrules_scanner<ScannerT, list_t> scanner_t;
+
+            list_t    list(*this, nil_t());
+            scanner_t g_arg(scan, list);
+            return start.parse(g_arg);
+        }
+
+        template <int ID2, typename DefT2, typename ContextT2>
+        inline subrule_list<
+            self_t,
+            subrule_list<
+                subrule_parser<ID2, DefT2, ContextT2>,
+                nil_t> >
+        operator,(subrule_parser<ID2, DefT2, ContextT2> const& rhs) const
+        {
+            return subrule_list<
+                self_t,
+                subrule_list<
+                    subrule_parser<ID2, DefT2, ContextT2>,
+                    nil_t> >(
+                        *this,
+                        subrule_list<
+                            subrule_parser<ID2, DefT2, ContextT2>, nil_t>(
+                                rhs, nil_t()));
+        }
+
+        typename DefT::embed_t rhs;
+        subrule_t const& start;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  subrule class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <int ID, typename ContextT>
+    struct subrule
+        : public parser<subrule<ID, ContextT> >
+        , public ContextT::base_t
+        , public context_aux<ContextT, subrule<ID, ContextT> >
+    {
+        typedef subrule<ID, ContextT> self_t;
+        typedef subrule<ID, ContextT> const&  embed_t;
+
+        typedef typename ContextT::context_linker_t context_t;
+        typedef typename context_t::attr_t attr_t;
+
+        BOOST_STATIC_CONSTANT(int, id = ID);
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename
+                impl::get_subrule_result<ID, ScannerT, attr_t>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse_main(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t result_;
+            impl::parse_subrule<result_t, ScannerT, ID>::
+                do_(result_, scan);
+            return result_;
+        }
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef parser_scanner_linker<ScannerT> scanner_t;
+            BOOST_SPIRIT_CONTEXT_PARSE(
+                scan, *this, scanner_t, context_t, result_t);
+        }
+
+        template <typename DefT>
+        subrule_parser<ID, DefT, ContextT>
+        operator=(parser<DefT> const& rhs) const
+        {
+            return subrule_parser<ID, DefT, ContextT>(*this, rhs.derived());
+        }
+
+    private:
+
+        //  assignment of subrules is not allowed. Use subrules
+        //  with identical IDs if you want to have aliases.
+
+        subrule& operator=(subrule const&);
+
+        template <int ID2, typename ContextT2>
+        subrule& operator=(subrule<ID2, ContextT2> const&);
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp
new file mode 100644 (file)
index 0000000..bb6ce87
--- /dev/null
@@ -0,0 +1,35 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_FWD_HPP)
+#define BOOST_SPIRIT_SUBRULE_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+
+namespace boost { namespace spirit  {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <int ID, typename ContextT = parser_context<> >
+    struct subrule; 
+
+    template <int ID, typename DefT, typename ContextT = parser_context<> >
+    struct subrule_parser;
+
+    template <typename ScannerT, typename ListT>
+    struct subrules_scanner;
+
+    template <typename FirstT, typename RestT>
+    struct subrule_list; 
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/parser.hpp
new file mode 100644 (file)
index 0000000..8f6bc6a
--- /dev/null
@@ -0,0 +1,223 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_HPP)
+#define BOOST_SPIRIT_PARSER_HPP
+
+#include <boost/config.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename ParserT, typename ActionT>
+    class action; //  forward declaration
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Parser categories
+    //
+    //      Helper template classes to distinguish different types of
+    //      parsers. The following categories are the most generic. More
+    //      specific types may inherit from these. Each parser has a typedef
+    //      parser_category_t that defines its category. By default, if one
+    //      is not specified, it will inherit from the base parser class
+    //      which typedefs its parser_category_t as plain_parser_category.
+    //
+    //          - plain parser has nothing special
+    //          - binary parser has subject a and b (e.g. alternative)
+    //          - unary parser has single subject  (e.g. kleene star)
+    //          - action parser has an attached action parser
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct plain_parser_category {};
+    struct binary_parser_category       : plain_parser_category {};
+    struct unary_parser_category        : plain_parser_category {};
+    struct action_parser_category       : unary_parser_category {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_result metafunction
+    //
+    //      Given a scanner type ScannerT and a parser type ParserT, the
+    //      parser_result metafunction provides the actual result of the
+    //      parser.
+    //
+    //  Usage:
+    //
+    //      typename parser_result<ParserT, ScannerT>::type
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT, typename ScannerT>
+    struct parser_result
+    {
+        typedef typename boost::remove_reference<ParserT>::type parser_type;
+        typedef typename parser_type::template result<ScannerT>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser class
+    //
+    //      This class is a protocol base class for all parsers. This is
+    //      essentially an interface contract. The parser class does not
+    //      really know how to parse anything but instead relies on the
+    //      template parameter DerivedT (which obviously is assumed to be a
+    //      subclass) to do the actual parsing.
+    //
+    //      Concrete sub-classes inheriting from parser must have a
+    //      corresponding member function parse(...) compatible with the
+    //      conceptual Interface:
+    //
+    //          template <typename ScannerT>
+    //          RT parse(ScannerT const& scan) const;
+    //
+    //      where RT is the desired return type of the parser and ScannerT
+    //      scan is the scanner (see scanner.hpp).
+    //
+    //      Concrete sub-classes inheriting from parser in most cases need to
+    //      have a nested meta-function result that returns the result type
+    //      of the parser's parse member function, given a scanner type. The
+    //      meta-function has the form:
+    //
+    //          template <typename ScannerT>
+    //          struct result
+    //          {
+    //              typedef RT type;
+    //          };
+    //
+    //      where RT is the desired return type of the parser. This is
+    //      usually, but not always, dependent on the template parameter
+    //      ScannerT. If a parser does not supply a result metafunction, a
+    //      default is provided by the base parser class.
+    //
+    //      The parser's derived() member function returns a reference to the
+    //      parser as its derived object.
+    //
+    //      An operator[] is provided. The operator returns a semantic action
+    //      handler (see actions.hpp).
+    //
+    //      Each parser has a typedef embed_t. This typedef specifies how a
+    //      parser is embedded in a composite (see composite.hpp). By
+    //      default, if one is not specified, the parser will be embedded by
+    //      value. That is, a copy of the parser is placed as a member
+    //      variable of the composite. Most parsers are embedded by value. In
+    //      certain situations however, this is not desirable or possible.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename DerivedT>
+    struct parser
+    {
+        typedef DerivedT                embed_t;
+        typedef DerivedT                derived_t;
+        typedef plain_parser_category   parser_category_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+        DerivedT& derived()
+        {
+            return *static_cast<DerivedT*>(this);
+        }
+
+        DerivedT const& derived() const
+        {
+            return *static_cast<DerivedT const*>(this);
+        }
+
+        template <typename ActionT>
+        action<DerivedT, ActionT>
+        operator[](ActionT const& actor) const
+        {
+            return action<DerivedT, ActionT>(derived(), actor);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parse_info
+    //
+    //      Results returned by the free parse functions:
+    //
+    //      stop:   points to the final parse position (i.e parsing
+    //              processed the input up to this point).
+    //
+    //      hit:    true if parsing is successful. This may be full:
+    //              the parser consumed all the input, or partial:
+    //              the parser consumed only a portion of the input.
+    //
+    //      full:   true when we have a full hit (i.e the parser
+    //              consumed all the input.
+    //
+    //      length: The number of characters consumed by the parser.
+    //              This is valid only if we have a successful hit
+    //              (either partial or full).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT = char const*>
+    struct parse_info
+    {
+        IteratorT   stop;
+        bool        hit;
+        bool        full;
+        std::size_t length;
+
+        parse_info(
+            IteratorT const& stop_ = IteratorT(),
+            bool hit_ = false,
+            bool full_ = false,
+            std::size_t length_ = 0)
+        : stop(stop_)
+        , hit(hit_)
+        , full(full_)
+        , length(length_) {}
+
+        template <typename ParseInfoT>
+        parse_info(ParseInfoT const& pi)
+        : stop(pi.stop)
+        , hit(pi.hit)
+        , full(pi.full)
+        , length(pi.length) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Generic parse function
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT, typename DerivedT>
+    parse_info<IteratorT>
+    parse(
+        IteratorT const&        first,
+        IteratorT const&        last,
+        parser<DerivedT> const& p);
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Parse function for null terminated strings
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT, typename DerivedT>
+    parse_info<CharT const*>
+    parse(
+        CharT const*            str,
+        parser<DerivedT> const& p);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/core/impl/parser.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/numerics.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/numerics.ipp
new file mode 100644 (file)
index 0000000..19586f1
--- /dev/null
@@ -0,0 +1,478 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_NUMERICS_IPP
+#define BOOST_SPIRIT_NUMERICS_IPP
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <limits>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct sign_parser; // forward declaration only
+
+    namespace impl
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  Extract the prefix sign (- or +)
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename ScannerT>
+        bool
+        extract_sign(ScannerT const& scan, std::size_t& count)
+        {
+            //  Extract the sign
+            count = 0;
+            bool neg = *scan == '-';
+            if (neg || (*scan == '+'))
+            {
+                ++scan;
+                ++count;
+                return neg;
+            }
+
+            return false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  Traits class for radix specific number conversion
+        //
+        //      Convert a digit from character representation, ch, to binary
+        //      representation, returned in val.
+        //      Returns whether the conversion was successful.
+        //
+        //        template<typename CharT> static bool digit(CharT ch, T& val);
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template<const int Radix>
+        struct radix_traits;
+
+        ////////////////////////////////// Binary
+        template<>
+        struct radix_traits<2>
+        {
+            template<typename CharT, typename T>
+            static bool digit(CharT ch, T& val)
+            {
+                val = ch - '0';
+                return ('0' == ch || '1' == ch);
+            }
+        };
+
+        ////////////////////////////////// Octal
+        template<>
+        struct radix_traits<8>
+        {
+            template<typename CharT, typename T>
+            static bool digit(CharT ch, T& val)
+            {
+                val = ch - '0';
+                return ('0' <= ch && ch <= '7');
+            }
+        };
+
+        ////////////////////////////////// Decimal
+        template<>
+        struct radix_traits<10>
+        {
+            template<typename CharT, typename T>
+            static bool digit(CharT ch, T& val)
+            {
+                val = ch - '0';
+                return impl::isdigit_(ch);
+            }
+        };
+
+        ////////////////////////////////// Hexadecimal
+        template<>
+        struct radix_traits<16>
+        {
+            template<typename CharT, typename T>
+            static bool digit(CharT ch, T& val)
+            {
+                if (radix_traits<10>::digit(ch, val))
+                    return true;
+
+                CharT lc = impl::tolower_(ch);
+                if ('a' <= lc && lc <= 'f')
+                {
+                    val = lc - 'a' + 10;
+                    return true;
+                }
+                return false;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //      Helper templates for encapsulation of radix specific
+        //      conversion of an input string to an integral value.
+        //
+        //      main entry point:
+        //
+        //          extract_int<Radix, MinDigits, MaxDigits, Accumulate>
+        //              ::f(first, last, n, count);
+        //
+        //          The template parameter Radix represents the radix of the
+        //          number contained in the parsed string. The template
+        //          parameter MinDigits specifies the minimum digits to
+        //          accept. The template parameter MaxDigits specifies the
+        //          maximum digits to parse. A -1 value for MaxDigits will
+        //          make it parse an arbitrarilly large number as long as the
+        //          numeric type can hold it. Accumulate is either
+        //          positive_accumulate<Radix> (default) for parsing positive
+        //          numbers or negative_accumulate<Radix> otherwise.
+        //          Checking is only performed when std::numeric_limits<T>::
+        //          is_specialized is true. Otherwise, there's no way to
+        //          do the check.
+        //
+        //          scan.first and scan.last are iterators as usual (i.e.
+        //          first is mutable and is moved forward when a match is
+        //          found), n is a variable that holds the number (passed by
+        //          reference). The number of parsed characters is added to
+        //          count (also passed by reference)
+        //
+        //      NOTE:
+        //              Returns a non-match, if the number to parse
+        //              overflows (or underflows) the used type.
+        //
+        //      BEWARE:
+        //              the parameters 'n' and 'count' should be properly
+        //              initialized before calling this function.
+        //
+        ///////////////////////////////////////////////////////////////////////
+#if defined(BOOST_MSVC)
+#pragma warning(push) 
+#pragma warning(disable:4127) //conditional expression is constant
+#endif
+        
+        template <typename T, int Radix>
+        struct positive_accumulate
+        {
+            //  Use this accumulator if number is positive
+            static bool add(T& n, T digit)
+            {
+                if (std::numeric_limits<T>::is_specialized)
+                {
+                    static T const max = (std::numeric_limits<T>::max)();
+                    static T const max_div_radix = max/Radix;
+
+                    if (n > max_div_radix)
+                        return false;
+                    n *= Radix;
+
+                    if (n > max - digit)
+                        return false;
+                    n += digit;
+
+                    return true;
+                }
+                else
+                {
+                    n *= Radix;
+                    n += digit;
+                    return true;
+                }
+            }
+        };
+
+        template <typename T, int Radix>
+        struct negative_accumulate
+        {
+            //  Use this accumulator if number is negative
+            static bool add(T& n, T digit)
+            {
+                if (std::numeric_limits<T>::is_specialized)
+                {
+                    typedef std::numeric_limits<T> num_limits;
+                    static T const min =
+                        (!num_limits::is_integer && num_limits::is_signed && num_limits::has_denorm) ?
+                        -(num_limits::max)() : (num_limits::min)();
+                    static T const min_div_radix = min/Radix;
+
+                    if (n < min_div_radix)
+                        return false;
+                    n *= Radix;
+
+                    if (n < min + digit)
+                        return false;
+                    n -= digit;
+
+                    return true;
+                }
+                else
+                {
+                    n *= Radix;
+                    n -= digit;
+                    return true;
+                }
+            }
+        };
+
+        template <int MaxDigits>
+        inline bool allow_more_digits(std::size_t i)
+        {
+            return i < MaxDigits;
+        }
+
+        template <>
+        inline bool allow_more_digits<-1>(std::size_t)
+        {
+            return true;
+        }
+
+        //////////////////////////////////
+        template <
+            int Radix, unsigned MinDigits, int MaxDigits,
+            typename Accumulate
+        >
+        struct extract_int
+        {
+            template <typename ScannerT, typename T>
+            static bool
+            f(ScannerT& scan, T& n, std::size_t& count)
+            {
+                std::size_t i = 0;
+                T digit;
+                while( allow_more_digits<MaxDigits>(i) && !scan.at_end() &&
+                    radix_traits<Radix>::digit(*scan, digit) )
+                {
+                    if (!Accumulate::add(n, digit))
+                        return false; // Overflow
+                    ++i, ++scan, ++count;
+                }
+                return i >= MinDigits;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  uint_parser_impl class
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <
+            typename T = unsigned,
+            int Radix = 10,
+            unsigned MinDigits = 1,
+            int MaxDigits = -1
+        >
+        struct uint_parser_impl
+            : parser<uint_parser_impl<T, Radix, MinDigits, MaxDigits> >
+        {
+            typedef uint_parser_impl<T, Radix, MinDigits, MaxDigits> self_t;
+
+            template <typename ScannerT>
+            struct result
+            {
+                typedef typename match_result<ScannerT, T>::type type;
+            };
+
+            template <typename ScannerT>
+            typename parser_result<self_t, ScannerT>::type
+            parse(ScannerT const& scan) const
+            {
+                if (!scan.at_end())
+                {
+                    T n = 0;
+                    std::size_t count = 0;
+                    typename ScannerT::iterator_t save = scan.first;
+                    if (extract_int<Radix, MinDigits, MaxDigits,
+                        positive_accumulate<T, Radix> >::f(scan, n, count))
+                    {
+                        return scan.create_match(count, n, save, scan.first);
+                    }
+                    // return no-match if number overflows
+                }
+                return scan.no_match();
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  int_parser_impl class
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <
+            typename T = unsigned,
+            int Radix = 10,
+            unsigned MinDigits = 1,
+            int MaxDigits = -1
+        >
+        struct int_parser_impl
+            : parser<int_parser_impl<T, Radix, MinDigits, MaxDigits> >
+        {
+            typedef int_parser_impl<T, Radix, MinDigits, MaxDigits> self_t;
+
+            template <typename ScannerT>
+            struct result
+            {
+                typedef typename match_result<ScannerT, T>::type type;
+            };
+
+            template <typename ScannerT>
+            typename parser_result<self_t, ScannerT>::type
+            parse(ScannerT const& scan) const
+            {
+                typedef extract_int<Radix, MinDigits, MaxDigits,
+                    negative_accumulate<T, Radix> > extract_int_neg_t;
+                typedef extract_int<Radix, MinDigits, MaxDigits,
+                    positive_accumulate<T, Radix> > extract_int_pos_t;
+
+                if (!scan.at_end())
+                {
+                    T n = 0;
+                    std::size_t count = 0;
+                    typename ScannerT::iterator_t save = scan.first;
+
+                    bool hit = impl::extract_sign(scan, count);
+
+                    if (hit)
+                        hit = extract_int_neg_t::f(scan, n, count);
+                    else
+                        hit = extract_int_pos_t::f(scan, n, count);
+
+                    if (hit)
+                        return scan.create_match(count, n, save, scan.first);
+                    else
+                        scan.first = save;
+                    // return no-match if number overflows or underflows
+                }
+                return scan.no_match();
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  real_parser_impl class
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename RT, typename T, typename RealPoliciesT>
+        struct real_parser_impl
+        {
+            typedef real_parser_impl<RT, T, RealPoliciesT> self_t;
+
+            template <typename ScannerT>
+            RT parse_main(ScannerT const& scan) const
+            {
+                if (scan.at_end())
+                    return scan.no_match();
+                typename ScannerT::iterator_t save = scan.first;
+
+                typedef typename parser_result<sign_parser, ScannerT>::type
+                    sign_match_t;
+                typedef typename parser_result<chlit<>, ScannerT>::type
+                    exp_match_t;
+
+                sign_match_t    sign_match = RealPoliciesT::parse_sign(scan);
+                std::size_t     count = sign_match ? sign_match.length() : 0;
+                bool            neg = sign_match.has_valid_attribute() ?
+                                    sign_match.value() : false;
+
+                RT              n_match = RealPoliciesT::parse_n(scan);
+                T               n = n_match.has_valid_attribute() ?
+                                    n_match.value() : T(0);
+                bool            got_a_number = n_match;
+                exp_match_t     e_hit;
+
+                if (!got_a_number && !RealPoliciesT::allow_leading_dot)
+                     return scan.no_match();
+                else
+                    count += n_match.length();
+
+                if (neg)
+                    n = -n;
+
+                if (RealPoliciesT::parse_dot(scan))
+                {
+                    //  We got the decimal point. Now we will try to parse
+                    //  the fraction if it is there. If not, it defaults
+                    //  to zero (0) only if we already got a number.
+
+                    if (RT hit = RealPoliciesT::parse_frac_n(scan))
+                    {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+                        using namespace std;  // allow for ADL to find pow()
+#endif
+                        hit.value(hit.value()
+                            * pow(T(10), T(-hit.length())));
+                        if (neg)
+                            n -= hit.value();
+                        else
+                            n += hit.value();
+                        count += hit.length() + 1;
+
+                    }
+
+                    else if (!got_a_number ||
+                        !RealPoliciesT::allow_trailing_dot)
+                        return scan.no_match();
+
+                    e_hit = RealPoliciesT::parse_exp(scan);
+                }
+                else
+                {
+                    //  We have reached a point where we
+                    //  still haven't seen a number at all.
+                    //  We return early with a no-match.
+                    if (!got_a_number)
+                        return scan.no_match();
+
+                    //  If we must expect a dot and we didn't see
+                    //  an exponent, return early with a no-match.
+                    e_hit = RealPoliciesT::parse_exp(scan);
+                    if (RealPoliciesT::expect_dot && !e_hit)
+                        return scan.no_match();
+                }
+
+                if (e_hit)
+                {
+                    //  We got the exponent prefix. Now we will try to parse the
+                    //  actual exponent. It is an error if it is not there.
+                    if (RT e_n_hit = RealPoliciesT::parse_exp_n(scan))
+                    {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+                        using namespace std;    // allow for ADL to find pow()
+#endif
+                        n *= pow(T(10), T(e_n_hit.value()));
+                        count += e_n_hit.length() + e_hit.length();
+                    }
+                    else
+                    {
+                        //  Oops, no exponent, return a no-match
+                        return scan.no_match();
+                    }
+                }
+
+                return scan.create_match(count, n, save, scan.first);
+            }
+
+            template <typename ScannerT>
+            static RT parse(ScannerT const& scan)
+            {
+                static self_t this_;
+                return impl::implicit_lexeme_parse<RT>(this_, scan, scan);
+            }
+        };
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+    }   //  namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/primitives.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
new file mode 100644 (file)
index 0000000..8a52251
--- /dev/null
@@ -0,0 +1,390 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PRIMITIVES_IPP)
+#define BOOST_SPIRIT_PRIMITIVES_IPP
+
+#include <cctype>
+#if !defined(BOOST_NO_CWCTYPE)
+#include <cwctype>
+#endif
+
+#include <string> // char_traits
+
+#if defined(BOOST_MSVC)
+#  pragma warning (push)
+#  pragma warning(disable:4800)
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename DrivedT> struct char_parser;
+
+    namespace impl
+    {
+        template <typename IteratorT>
+        inline IteratorT
+        get_last(IteratorT first)
+        {
+            while (*first)
+                first++;
+            return first;
+        }
+
+        template<
+            typename RT,
+            typename IteratorT,
+            typename ScannerT>
+        inline RT
+        string_parser_parse(
+            IteratorT str_first,
+            IteratorT str_last,
+            ScannerT& scan)
+        {
+            typedef typename ScannerT::iterator_t iterator_t;
+            iterator_t saved = scan.first;
+            std::size_t slen = str_last - str_first;
+
+            while (str_first != str_last)
+            {
+                if (scan.at_end() || (*str_first != *scan))
+                    return scan.no_match();
+                ++str_first;
+                ++scan;
+            }
+
+            return scan.create_match(slen, nil_t(), saved, scan.first);
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    // Conversion from char_type to int_type
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+        //  Use char_traits for char and wchar_t only, as these are the only
+        //  specializations provided in the standard. Other types are on their
+        //  own.
+        //
+        //  For UDT, one may override:
+        //
+        //      isalnum
+        //      isalpha
+        //      iscntrl
+        //      isdigit
+        //      isgraph
+        //      islower
+        //      isprint
+        //      ispunct
+        //      isspace
+        //      isupper
+        //      isxdigit
+        //      isblank
+        //      isupper
+        //      tolower
+        //      toupper
+        //
+        //  in a namespace suitable for Argument Dependent lookup or in
+        //  namespace std (disallowed by the standard).
+
+        template <typename CharT>
+        struct char_type_char_traits_helper
+        {
+            typedef CharT char_type;
+            typedef typename std::char_traits<CharT>::int_type int_type;
+
+            static int_type to_int_type(CharT c)
+            {
+                return std::char_traits<CharT>::to_int_type(c);
+            }
+
+            static char_type to_char_type(int_type i)
+            {
+                return std::char_traits<CharT>::to_char_type(i);
+            }
+        };
+
+        template <typename CharT>
+        struct char_traits_helper
+        {
+            typedef CharT char_type;
+            typedef CharT int_type;
+
+            static CharT & to_int_type(CharT & c)
+            {
+                return c;
+            }
+
+            static CharT & to_char_type(CharT & c)
+            {
+                return c;
+            }
+        };
+
+        template <>
+        struct char_traits_helper<char>
+            : char_type_char_traits_helper<char>
+        {
+        };
+
+#if !defined(BOOST_NO_CWCTYPE)
+
+        template <>
+        struct char_traits_helper<wchar_t>
+            : char_type_char_traits_helper<wchar_t>
+        {
+        };
+
+#endif
+
+        template <typename CharT>
+        inline typename char_traits_helper<CharT>::int_type
+        to_int_type(CharT c)
+        {
+            return char_traits_helper<CharT>::to_int_type(c);
+        }
+
+        template <typename CharT>
+        inline CharT
+        to_char_type(typename char_traits_helper<CharT>::int_type c)
+        {
+            return char_traits_helper<CharT>::to_char_type(c);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  Convenience functions
+        //
+        ///////////////////////////////////////////////////////////////////////
+
+        template <typename CharT>
+        inline bool
+        isalnum_(CharT c)
+        {
+            using namespace std;
+            return isalnum(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isalpha_(CharT c)
+        {
+            using namespace std;
+            return isalpha(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        iscntrl_(CharT c)
+        {
+            using namespace std;
+            return iscntrl(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isdigit_(CharT c)
+        {
+            using namespace std;
+            return isdigit(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isgraph_(CharT c)
+        {
+            using namespace std;
+            return isgraph(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        islower_(CharT c)
+        {
+            using namespace std;
+            return islower(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isprint_(CharT c)
+        {
+            using namespace std;
+            return isprint(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        ispunct_(CharT c)
+        {
+            using namespace std;
+            return ispunct(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isspace_(CharT c)
+        {
+            using namespace std;
+            return isspace(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isupper_(CharT c)
+        {
+            using namespace std;
+            return isupper(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isxdigit_(CharT c)
+        {
+            using namespace std;
+            return isxdigit(to_int_type(c)) ? true : false;
+        }
+
+        template <typename CharT>
+        inline bool
+        isblank_(CharT c)
+        {
+            return (c == ' ' || c == '\t');
+        }
+
+        template <typename CharT>
+        inline CharT
+        tolower_(CharT c)
+        {
+            using namespace std;
+            return to_char_type<CharT>(tolower(to_int_type(c)));
+        }
+
+        template <typename CharT>
+        inline CharT
+        toupper_(CharT c)
+        {
+            using namespace std;
+            return to_char_type<CharT>(toupper(to_int_type(c)));
+        }
+
+#if !defined(BOOST_NO_CWCTYPE)
+
+        inline bool
+        isalnum_(wchar_t c)
+        {
+            using namespace std;
+            return iswalnum(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isalpha_(wchar_t c)
+        {
+            using namespace std;
+            return iswalpha(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        iscntrl_(wchar_t c)
+        {
+            using namespace std;
+            return iswcntrl(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isdigit_(wchar_t c)
+        {
+            using namespace std;
+            return iswdigit(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isgraph_(wchar_t c)
+        {
+            using namespace std;
+            return iswgraph(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        islower_(wchar_t c)
+        {
+            using namespace std;
+            return iswlower(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isprint_(wchar_t c)
+        {
+            using namespace std;
+            return iswprint(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        ispunct_(wchar_t c)
+        {
+            using namespace std;
+            return iswpunct(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isspace_(wchar_t c)
+        {
+            using namespace std;
+            return iswspace(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isupper_(wchar_t c)
+        {
+            using namespace std;
+            return iswupper(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isxdigit_(wchar_t c)
+        {
+            using namespace std;
+            return iswxdigit(to_int_type(c)) ? true : false;
+        }
+
+        inline bool
+        isblank_(wchar_t c)
+        {
+            return (c == L' ' || c == L'\t');
+        }
+
+        inline wchar_t
+        tolower_(wchar_t c)
+        {
+            using namespace std;
+            return to_char_type<wchar_t>(towlower(to_int_type(c)));
+        }
+
+        inline wchar_t
+        toupper_(wchar_t c)
+        {
+            using namespace std;
+            return to_char_type<wchar_t>(towupper(to_int_type(c)));
+        }
+
+#endif // !defined(BOOST_NO_CWCTYPE)
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit::impl
+
+#ifdef BOOST_MSVC
+#pragma warning (pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics.hpp
new file mode 100644 (file)
index 0000000..20ea091
--- /dev/null
@@ -0,0 +1,289 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_NUMERICS_HPP
+#define BOOST_SPIRIT_NUMERICS_HPP
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+
+#include <boost/spirit/home/classic/core/primitives/numerics_fwd.hpp>
+#include <boost/spirit/home/classic/core/primitives/impl/numerics.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  uint_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, 
+        int Radix, 
+        unsigned MinDigits,
+        int MaxDigits
+    >
+    struct uint_parser : parser<uint_parser<T, Radix, MinDigits, MaxDigits> >
+    {
+        typedef uint_parser<T, Radix, MinDigits, MaxDigits> self_t;
+    
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, T>::type type;
+        };
+        
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef impl::uint_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
+            typedef typename parser_result<impl_t, ScannerT>::type result_t;
+            return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  int_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T,
+        int Radix,
+        unsigned MinDigits,
+        int MaxDigits
+    >
+    struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits> >
+    {
+        typedef int_parser<T, Radix, MinDigits, MaxDigits> self_t;
+    
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, T>::type type;
+        };
+        
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef impl::int_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
+            typedef typename parser_result<impl_t, ScannerT>::type result_t;
+            return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  uint_parser/int_parser instantiations
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    int_parser<int> const
+        int_p   = int_parser<int>();
+    
+    uint_parser<unsigned> const
+        uint_p  = uint_parser<unsigned>();
+    
+    uint_parser<unsigned, 2> const
+        bin_p   = uint_parser<unsigned, 2>();
+    
+    uint_parser<unsigned, 8> const
+        oct_p   = uint_parser<unsigned, 8>();
+    
+    uint_parser<unsigned, 16> const
+        hex_p   = uint_parser<unsigned, 16>();
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sign_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        //  Utility to extract the prefix sign ('-' | '+')
+        template <typename ScannerT>
+        bool extract_sign(ScannerT const& scan, std::size_t& count);
+    }
+    
+    struct sign_parser : public parser<sign_parser>
+    {
+        typedef sign_parser self_t;
+
+        template <typename ScannerT>
+        struct result 
+        {
+            typedef typename match_result<ScannerT, bool>::type type;
+        };
+
+        sign_parser() {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            if (!scan.at_end())
+            {
+                std::size_t length;
+                typename ScannerT::iterator_t save(scan.first);
+                bool neg = impl::extract_sign(scan, length);
+                if (length)
+                    return scan.create_match(1, neg, save, scan.first);
+            }
+            return scan.no_match();
+        }
+    };
+    
+    sign_parser const sign_p = sign_parser();
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  default real number policies
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct ureal_parser_policies
+    {
+        // trailing dot policy suggested suggested by Gustavo Guerra
+        BOOST_STATIC_CONSTANT(bool, allow_leading_dot = true);
+        BOOST_STATIC_CONSTANT(bool, allow_trailing_dot = true);
+        BOOST_STATIC_CONSTANT(bool, expect_dot = false);
+    
+        typedef uint_parser<T, 10, 1, -1>   uint_parser_t;
+        typedef int_parser<T, 10, 1, -1>    int_parser_t;
+    
+        template <typename ScannerT>
+        static typename match_result<ScannerT, nil_t>::type
+        parse_sign(ScannerT& scan)
+        { 
+            return scan.no_match(); 
+        }
+    
+        template <typename ScannerT>
+        static typename parser_result<uint_parser_t, ScannerT>::type
+        parse_n(ScannerT& scan)
+        { 
+            return uint_parser_t().parse(scan); 
+        }
+    
+        template <typename ScannerT>
+        static typename parser_result<chlit<>, ScannerT>::type
+        parse_dot(ScannerT& scan)
+        { 
+            return ch_p('.').parse(scan); 
+        }
+    
+        template <typename ScannerT>
+        static typename parser_result<uint_parser_t, ScannerT>::type
+        parse_frac_n(ScannerT& scan)
+        { 
+            return uint_parser_t().parse(scan); 
+        }
+    
+        template <typename ScannerT>
+        static typename parser_result<chlit<>, ScannerT>::type
+        parse_exp(ScannerT& scan)
+        { 
+            return as_lower_d['e'].parse(scan); 
+        }
+    
+        template <typename ScannerT>
+        static typename parser_result<int_parser_t, ScannerT>::type
+        parse_exp_n(ScannerT& scan)
+        { 
+            return int_parser_t().parse(scan); 
+        }
+    };
+    
+    template <typename T>
+    struct real_parser_policies : public ureal_parser_policies<T>
+    {
+        template <typename ScannerT>
+        static typename parser_result<sign_parser, ScannerT>::type
+        parse_sign(ScannerT& scan)
+        { 
+            return sign_p.parse(scan); 
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  real_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T,
+        typename RealPoliciesT
+    >
+    struct real_parser
+    :   public parser<real_parser<T, RealPoliciesT> >
+    {
+        typedef real_parser<T, RealPoliciesT> self_t;
+    
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, T>::type type;
+        };
+    
+        real_parser() {}
+    
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::real_parser_impl<result_t, T, RealPoliciesT>::parse(scan);
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  real_parser instantiations
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    real_parser<double, ureal_parser_policies<double> > const
+        ureal_p     = real_parser<double, ureal_parser_policies<double> >();
+    
+    real_parser<double, real_parser_policies<double> > const
+        real_p      = real_parser<double, real_parser_policies<double> >();
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  strict reals (do not allow plain integers (no decimal point))
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct strict_ureal_parser_policies : public ureal_parser_policies<T>
+    {
+        BOOST_STATIC_CONSTANT(bool, expect_dot = true);
+    };
+    
+    template <typename T>
+    struct strict_real_parser_policies : public real_parser_policies<T>
+    {
+        BOOST_STATIC_CONSTANT(bool, expect_dot = true);
+    };
+    
+    real_parser<double, strict_ureal_parser_policies<double> > const
+        strict_ureal_p
+            = real_parser<double, strict_ureal_parser_policies<double> >();
+    
+    real_parser<double, strict_real_parser_policies<double> > const
+        strict_real_p
+            = real_parser<double, strict_real_parser_policies<double> >();
+    
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp
new file mode 100644 (file)
index 0000000..b0f20d9
--- /dev/null
@@ -0,0 +1,88 @@
+/*=============================================================================
+    Copyright (C) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NUMERICS_FWD_HPP)
+#   define BOOST_SPIRIT_NUMERICS_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  uint_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T = unsigned,
+        int Radix = 10,
+        unsigned MinDigits = 1,
+        int MaxDigits = -1
+    >
+    struct uint_parser;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  int_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T = unsigned,
+        int Radix = 10,
+        unsigned MinDigits = 1,
+        int MaxDigits = -1
+    >
+    struct int_parser;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  sign_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct sign_parser;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  default real number policies
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct ureal_parser_policies;
+
+    template <typename T>
+    struct real_parser_policies;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  real_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T = double,
+        typename RealPoliciesT = ureal_parser_policies<T>
+    >
+    struct real_parser;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  strict reals (do not allow plain integers (no decimal point))
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct strict_ureal_parser_policies;
+
+    template <typename T>
+    struct strict_real_parser_policies;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/primitives/primitives.hpp
new file mode 100644 (file)
index 0000000..d89585b
--- /dev/null
@@ -0,0 +1,654 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PRIMITIVES_HPP)
+#define BOOST_SPIRIT_PRIMITIVES_HPP
+
+#include <boost/ref.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/assert.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/impl/directives.ipp>
+#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp>
+
+#ifdef BOOST_MSVC
+#pragma warning (push)
+#pragma warning(disable : 4512)
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  char_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename DerivedT>
+    struct char_parser : public parser<DerivedT>
+    {
+        typedef DerivedT self_t;
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<
+                ScannerT,
+                typename ScannerT::value_t
+            >::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::value_t value_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+
+            if (!scan.at_end())
+            {
+                value_t ch = *scan;
+                if (this->derived().test(ch))
+                {
+                    iterator_t save(scan.first);
+                    ++scan.first;
+                    return scan.create_match(1, ch, save, scan.first);
+                }
+            }
+            return scan.no_match();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  negation of char_parsers
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename PositiveT>
+    struct negated_char_parser
+    : public char_parser<negated_char_parser<PositiveT> >
+    {
+        typedef negated_char_parser<PositiveT> self_t;
+        typedef PositiveT positive_t;
+
+        negated_char_parser(positive_t const& p)
+        : positive(p.derived()) {}
+
+        template <typename T>
+        bool test(T ch) const
+        {
+            return !positive.test(ch);
+        }
+
+        positive_t const positive;
+    };
+
+    template <typename ParserT>
+    inline negated_char_parser<ParserT>
+    operator~(char_parser<ParserT> const& p)
+    {
+        return negated_char_parser<ParserT>(p.derived());
+    }
+
+    template <typename ParserT>
+    inline ParserT
+    operator~(negated_char_parser<ParserT> const& n)
+    {
+        return n.positive;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  chlit class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT = char>
+    struct chlit : public char_parser<chlit<CharT> >
+    {
+        chlit(CharT ch_)
+        : ch(ch_) {}
+
+        template <typename T>
+        bool test(T ch_) const
+        {
+            return ch_ == ch;
+        }
+
+        CharT   ch;
+    };
+
+    template <typename CharT>
+    inline chlit<CharT>
+    ch_p(CharT ch)
+    {
+        return chlit<CharT>(ch);
+    }
+
+    // This should take care of ch_p("a") "bugs"
+    template <typename CharT, std::size_t N>
+    inline chlit<CharT>
+    ch_p(CharT const (& str)[N])
+    {
+        //  ch_p's argument should be a single character or a null-terminated
+        //  string with a single character
+        BOOST_STATIC_ASSERT(N < 3);
+        return chlit<CharT>(str[0]);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  range class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT = char>
+    struct range : public char_parser<range<CharT> >
+    {
+        range(CharT first_, CharT last_)
+        : first(first_), last(last_)
+        {
+            BOOST_SPIRIT_ASSERT(!(last < first));
+        }
+
+        template <typename T>
+        bool test(T ch) const
+        {
+            return !(CharT(ch) < first) && !(last < CharT(ch));
+        }
+
+        CharT   first;
+        CharT   last;
+    };
+
+    template <typename CharT>
+    inline range<CharT>
+    range_p(CharT first, CharT last)
+    {
+        return range<CharT>(first, last);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  chseq class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT = char const*>
+    class chseq : public parser<chseq<IteratorT> >
+    {
+    public:
+
+        typedef chseq<IteratorT> self_t;
+
+        chseq(IteratorT first_, IteratorT last_)
+        : first(first_), last(last_) {}
+
+        chseq(IteratorT first_)
+        : first(first_), last(impl::get_last(first_)) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename boost::unwrap_reference<IteratorT>::type striter_t;
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::string_parser_parse<result_t>(
+                striter_t(first),
+                striter_t(last),
+                scan);
+        }
+
+    private:
+
+        IteratorT first;
+        IteratorT last;
+    };
+
+    template <typename CharT>
+    inline chseq<CharT const*>
+    chseq_p(CharT const* str)
+    {
+        return chseq<CharT const*>(str);
+    }
+
+    template <typename IteratorT>
+    inline chseq<IteratorT>
+    chseq_p(IteratorT first, IteratorT last)
+    {
+        return chseq<IteratorT>(first, last);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  strlit class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT = char const*>
+    class strlit : public parser<strlit<IteratorT> >
+    {
+    public:
+
+        typedef strlit<IteratorT> self_t;
+
+        strlit(IteratorT first, IteratorT last)
+        : seq(first, last) {}
+
+        strlit(IteratorT first)
+        : seq(first) {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::contiguous_parser_parse<result_t>
+                (seq, scan, scan);
+        }
+
+    private:
+
+        chseq<IteratorT> seq;
+    };
+
+    template <typename CharT>
+    inline strlit<CharT const*>
+    str_p(CharT const* str)
+    {
+        return strlit<CharT const*>(str);
+    }
+
+    template <typename CharT>
+    inline strlit<CharT *>
+    str_p(CharT * str)
+    {
+        return strlit<CharT *>(str);
+    }
+
+    template <typename IteratorT>
+    inline strlit<IteratorT>
+    str_p(IteratorT first, IteratorT last)
+    {
+        return strlit<IteratorT>(first, last);
+    }
+
+    // This should take care of str_p('a') "bugs"
+    template <typename CharT>
+    inline chlit<CharT>
+    str_p(CharT ch)
+    {
+        return chlit<CharT>(ch);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  nothing_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct nothing_parser : public parser<nothing_parser>
+    {
+        typedef nothing_parser self_t;
+
+        nothing_parser() {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            return scan.no_match();
+        }
+    };
+
+    nothing_parser const nothing_p = nothing_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  anychar_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct anychar_parser : public char_parser<anychar_parser>
+    {
+        typedef anychar_parser self_t;
+
+        anychar_parser() {}
+
+        template <typename CharT>
+        bool test(CharT) const
+        {
+            return true;
+        }
+    };
+
+    anychar_parser const anychar_p = anychar_parser();
+
+    inline nothing_parser
+    operator~(anychar_parser)
+    {
+        return nothing_p;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  alnum_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct alnum_parser : public char_parser<alnum_parser>
+    {
+        typedef alnum_parser self_t;
+
+        alnum_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isalnum_(ch);
+        }
+    };
+
+    alnum_parser const alnum_p = alnum_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  alpha_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct alpha_parser : public char_parser<alpha_parser>
+    {
+        typedef alpha_parser self_t;
+
+        alpha_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isalpha_(ch);
+        }
+    };
+
+    alpha_parser const alpha_p = alpha_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  cntrl_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct cntrl_parser : public char_parser<cntrl_parser>
+    {
+        typedef cntrl_parser self_t;
+
+        cntrl_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::iscntrl_(ch);
+        }
+    };
+
+    cntrl_parser const cntrl_p = cntrl_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  digit_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct digit_parser : public char_parser<digit_parser>
+    {
+        typedef digit_parser self_t;
+
+        digit_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isdigit_(ch);
+        }
+    };
+
+    digit_parser const digit_p = digit_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  graph_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct graph_parser : public char_parser<graph_parser>
+    {
+        typedef graph_parser self_t;
+
+        graph_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isgraph_(ch);
+        }
+    };
+
+    graph_parser const graph_p = graph_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  lower_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct lower_parser : public char_parser<lower_parser>
+    {
+        typedef lower_parser self_t;
+
+        lower_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::islower_(ch);
+        }
+    };
+
+    lower_parser const lower_p = lower_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  print_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct print_parser : public char_parser<print_parser>
+    {
+        typedef print_parser self_t;
+
+        print_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isprint_(ch);
+        }
+    };
+
+    print_parser const print_p = print_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  punct_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct punct_parser : public char_parser<punct_parser>
+    {
+        typedef punct_parser self_t;
+
+        punct_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::ispunct_(ch);
+        }
+    };
+
+    punct_parser const punct_p = punct_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  blank_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct blank_parser : public char_parser<blank_parser>
+    {
+        typedef blank_parser self_t;
+
+        blank_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isblank_(ch);
+        }
+    };
+
+    blank_parser const blank_p = blank_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  space_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct space_parser : public char_parser<space_parser>
+    {
+        typedef space_parser self_t;
+
+        space_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isspace_(ch);
+        }
+    };
+
+    space_parser const space_p = space_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  upper_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct upper_parser : public char_parser<upper_parser>
+    {
+        typedef upper_parser self_t;
+
+        upper_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isupper_(ch);
+        }
+    };
+
+    upper_parser const upper_p = upper_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  xdigit_parser class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct xdigit_parser : public char_parser<xdigit_parser>
+    {
+        typedef xdigit_parser self_t;
+
+        xdigit_parser() {}
+
+        template <typename CharT>
+        bool test(CharT ch) const
+        {
+            return impl::isxdigit_(ch);
+        }
+    };
+
+    xdigit_parser const xdigit_p = xdigit_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  eol_parser class (contributed by Martin Wille)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct eol_parser : public parser<eol_parser>
+    {
+        typedef eol_parser self_t;
+
+        eol_parser() {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typename ScannerT::iterator_t save = scan.first;
+            std::size_t len = 0;
+
+            if (!scan.at_end() && *scan == '\r')    // CR
+            {
+                ++scan.first;
+                ++len;
+            }
+
+            // Don't call skipper here
+            if (scan.first != scan.last && *scan == '\n')    // LF
+            {
+                ++scan.first;
+                ++len;
+            }
+
+            if (len)
+                return scan.create_match(len, nil_t(), save, scan.first);
+            return scan.no_match();
+        }
+    };
+
+    eol_parser const eol_p = eol_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  end_parser class (suggested by Markus Schoepflin)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct end_parser : public parser<end_parser>
+    {
+        typedef end_parser self_t;
+
+        end_parser() {}
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            if (scan.at_end())
+                return scan.empty_match();
+            return scan.no_match();
+        }
+    };
+
+    end_parser const end_p = end_parser();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  the pizza_p parser :-)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    inline strlit<char const*> const
+    pizza_p(char const* your_favorite_pizza)
+    {
+        return your_favorite_pizza;
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#ifdef BOOST_MSVC
+#pragma warning (pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/safe_bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/safe_bool.hpp
new file mode 100644 (file)
index 0000000..73b6e7b
--- /dev/null
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SAFE_BOOL_HPP)
+#define BOOST_SPIRIT_SAFE_BOOL_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl
+    {
+        template <typename T>
+        struct no_base {};
+
+        template <typename T>
+        struct safe_bool_impl
+        {
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+            void stub(T*) {};
+            typedef void (safe_bool_impl::*type)(T*);
+#else
+            typedef T* TP; // workaround to make parsing easier
+            TP stub;
+            typedef TP safe_bool_impl::*type;
+#endif
+        };
+    }
+
+    template <typename DerivedT, typename BaseT = impl::no_base<DerivedT> >
+    struct safe_bool : BaseT
+    {
+    private:
+        typedef impl::safe_bool_impl<DerivedT> impl_t;
+        typedef typename impl_t::type bool_type;
+
+    public:
+        operator bool_type() const
+        {
+            return static_cast<const DerivedT*>(this)->operator_bool() ?
+                &impl_t::stub : 0;
+        }
+
+        operator bool_type()
+        {
+            return static_cast<DerivedT*>(this)->operator_bool() ?
+                &impl_t::stub : 0;
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/impl/skipper.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/impl/skipper.ipp
new file mode 100644 (file)
index 0000000..fab74bd
--- /dev/null
@@ -0,0 +1,181 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_IPP)
+#define BOOST_SPIRIT_SKIPPER_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct space_parser;
+    template <typename BaseT>
+    struct no_skipper_iteration_policy;
+
+    namespace impl
+    {
+        template <typename ST, typename ScannerT, typename BaseT>
+        inline void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            skipper_iteration_policy<BaseT> const&)
+        {
+            typedef scanner_policies<
+                no_skipper_iteration_policy<
+                    BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+                BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+                BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+            > policies_t;
+
+            scanner<BOOST_DEDUCED_TYPENAME ScannerT::iterator_t, policies_t>
+                scan2(scan.first, scan.last, policies_t(scan));
+            typedef typename ScannerT::iterator_t iterator_t;
+
+            for (;;)
+            {
+                iterator_t save = scan.first;
+                if (!s.parse(scan2))
+                {
+                    scan.first = save;
+                    break;
+                }
+            }
+        }
+
+        template <typename ST, typename ScannerT, typename BaseT>
+        inline void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            no_skipper_iteration_policy<BaseT> const&)
+        {
+            for (;;)
+            {
+                typedef typename ScannerT::iterator_t iterator_t;
+                iterator_t save = scan.first;
+                if (!s.parse(scan))
+                {
+                    scan.first = save;
+                    break;
+                }
+            }
+        }
+
+        template <typename ST, typename ScannerT>
+        inline void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            iteration_policy const&)
+        {
+            for (;;)
+            {
+                typedef typename ScannerT::iterator_t iterator_t;
+                iterator_t save = scan.first;
+                if (!s.parse(scan))
+                {
+                    scan.first = save;
+                    break;
+                }
+            }
+        }
+
+        template <typename SkipT>
+        struct phrase_parser
+        {
+            template <typename IteratorT, typename ParserT>
+            static parse_info<IteratorT>
+            parse(
+                IteratorT const&    first_,
+                IteratorT const&    last,
+                ParserT const&      p,
+                SkipT const&        skip)
+            {
+                typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+                typedef scanner_policies<iter_policy_t> scanner_policies_t;
+                typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+                iter_policy_t iter_policy(skip);
+                scanner_policies_t policies(iter_policy);
+                IteratorT first = first_;
+                scanner_t scan(first, last, policies);
+                match<nil_t> hit = p.parse(scan);
+                return parse_info<IteratorT>(
+                    first, hit, hit && (first == last),
+                    hit.length());
+            }
+        };
+
+        template <>
+        struct phrase_parser<space_parser>
+        {
+            template <typename IteratorT, typename ParserT>
+            static parse_info<IteratorT>
+            parse(
+                IteratorT const&    first_,
+                IteratorT const&    last,
+                ParserT const&      p,
+                space_parser const&)
+            {
+                typedef skipper_iteration_policy<> iter_policy_t;
+                typedef scanner_policies<iter_policy_t> scanner_policies_t;
+                typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+                IteratorT first = first_;
+                scanner_t scan(first, last);
+                match<nil_t> hit = p.parse(scan);
+                return parse_info<IteratorT>(
+                    first, hit, hit && (first == last),
+                    hit.length());
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Free parse functions using the skippers
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT, typename ParserT, typename SkipT>
+    inline parse_info<IteratorT>
+    parse(
+        IteratorT const&        first,
+        IteratorT const&        last,
+        parser<ParserT> const&  p,
+        parser<SkipT> const&    skip)
+    {
+        return impl::phrase_parser<SkipT>::
+            parse(first, last, p.derived(), skip.derived());
+    }
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Parse function for null terminated strings using the skippers
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT, typename ParserT, typename SkipT>
+    inline parse_info<CharT const*>
+    parse(
+        CharT const*            str,
+        parser<ParserT> const&  p,
+        parser<SkipT> const&    skip)
+    {
+        CharT const* last = str;
+        while (*last)
+            last++;
+        return parse(str, last, p, skip);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner.hpp
new file mode 100644 (file)
index 0000000..3854877
--- /dev/null
@@ -0,0 +1,329 @@
+/*=============================================================================
+    Copyright (c) 1998-2002 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SCANNER_HPP)
+#define BOOST_SPIRIT_SCANNER_HPP
+
+#include <iterator>
+#include <boost/config.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/match.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/parser_id.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+#include <boost/spirit/home/classic/core/scanner/scanner_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  iteration_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct iteration_policy
+    {
+        template <typename ScannerT>
+        void
+        advance(ScannerT const& scan) const
+        {
+            ++scan.first;
+        }
+
+        template <typename ScannerT>
+        bool at_end(ScannerT const& scan) const
+        {
+            return scan.first == scan.last;
+        }
+
+        template <typename T>
+        T filter(T ch) const
+        {
+            return ch;
+        }
+
+        template <typename ScannerT>
+        typename ScannerT::ref_t
+        get(ScannerT const& scan) const
+        {
+            return *scan.first;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  match_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct match_policy
+    {
+        template <typename T>
+        struct result { typedef match<T> type; };
+
+        const match<nil_t>
+        no_match() const
+        {
+            return match<nil_t>();
+        }
+
+        const match<nil_t>
+        empty_match() const
+        {
+            return match<nil_t>(0, nil_t());
+        }
+
+        template <typename AttrT, typename IteratorT>
+        match<AttrT>
+        create_match(
+            std::size_t         length,
+            AttrT const&        val,
+            IteratorT const&    /*first*/,
+            IteratorT const&    /*last*/) const
+        {
+            return match<AttrT>(length, val);
+        }
+
+        template <typename MatchT, typename IteratorT>
+        void group_match(
+            MatchT&             /*m*/,
+            parser_id const&    /*id*/,
+            IteratorT const&    /*first*/,
+            IteratorT const&    /*last*/) const {}
+
+        template <typename Match1T, typename Match2T>
+        void concat_match(Match1T& l, Match2T const& r) const
+        {
+            l.concat(r);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  match_result class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename MatchPolicyT, typename T>
+    struct match_result
+    {
+        typedef typename MatchPolicyT::template result<T>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  action_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename AttrT>
+    struct attributed_action_policy
+    {
+        template <typename ActorT, typename IteratorT>
+        static void
+        call(
+            ActorT const& actor,
+            AttrT& val,
+            IteratorT const&,
+            IteratorT const&)
+        {
+            actor(val);
+        }
+    };
+
+    //////////////////////////////////
+    template <>
+    struct attributed_action_policy<nil_t>
+    {
+        template <typename ActorT, typename IteratorT>
+        static void
+        call(
+            ActorT const& actor,
+            nil_t,
+            IteratorT const& first,
+            IteratorT const& last)
+        {
+            actor(first, last);
+        }
+    };
+
+    //////////////////////////////////
+    struct action_policy
+    {
+        template <typename ActorT, typename AttrT, typename IteratorT>
+        void
+        do_action(
+            ActorT const&       actor,
+            AttrT&              val,
+            IteratorT const&    first,
+            IteratorT const&    last) const
+        {
+            attributed_action_policy<AttrT>::call(actor, val, first, last);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner_policies class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IterationPolicyT,
+        typename MatchPolicyT,
+        typename ActionPolicyT>
+    struct scanner_policies :
+        public IterationPolicyT,
+        public MatchPolicyT,
+        public ActionPolicyT
+    {
+        typedef IterationPolicyT    iteration_policy_t;
+        typedef MatchPolicyT        match_policy_t;
+        typedef ActionPolicyT       action_policy_t;
+
+        scanner_policies(
+            IterationPolicyT const& i_policy = IterationPolicyT(),
+            MatchPolicyT const&     m_policy = MatchPolicyT(),
+            ActionPolicyT const&    a_policy = ActionPolicyT())
+        : IterationPolicyT(i_policy)
+        , MatchPolicyT(m_policy)
+        , ActionPolicyT(a_policy) {}
+
+        template <typename ScannerPoliciesT>
+        scanner_policies(ScannerPoliciesT const& policies)
+        : IterationPolicyT(policies)
+        , MatchPolicyT(policies)
+        , ActionPolicyT(policies) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner_policies_base class: the base class of all scanners
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct scanner_base {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorT,
+        typename PoliciesT>
+    class scanner : public PoliciesT, public scanner_base
+    {
+    public:
+
+        typedef IteratorT iterator_t;
+        typedef PoliciesT policies_t;
+
+        typedef typename boost::detail::
+            iterator_traits<IteratorT>::value_type value_t;
+        typedef typename boost::detail::
+            iterator_traits<IteratorT>::reference ref_t;
+        typedef typename boost::
+            call_traits<IteratorT>::param_type iter_param_t;
+
+        scanner(
+            IteratorT&          first_,
+            iter_param_t        last_,
+            PoliciesT const&    policies = PoliciesT())
+        : PoliciesT(policies), first(first_), last(last_)
+        {
+            at_end();
+        }
+
+        scanner(scanner const& other)
+        : PoliciesT(other), first(other.first), last(other.last) {}
+
+        scanner(scanner const& other, IteratorT& first_)
+        : PoliciesT(other), first(first_), last(other.last) {}
+
+        template <typename PoliciesT1>
+        scanner(scanner<IteratorT, PoliciesT1> const& other)
+        : PoliciesT(other), first(other.first), last(other.last) {}
+
+        bool
+        at_end() const
+        {
+            typedef typename PoliciesT::iteration_policy_t iteration_policy_type;
+            return iteration_policy_type::at_end(*this);
+        }
+
+        value_t
+        operator*() const
+        {
+            typedef typename PoliciesT::iteration_policy_t iteration_policy_type;
+            return iteration_policy_type::filter(iteration_policy_type::get(*this));
+        }
+
+        scanner const&
+        operator++() const
+        {
+            typedef typename PoliciesT::iteration_policy_t iteration_policy_type;
+            iteration_policy_type::advance(*this);
+            return *this;
+        }
+
+        template <typename PoliciesT2>
+        struct rebind_policies
+        {
+            typedef scanner<IteratorT, PoliciesT2> type;
+        };
+
+        template <typename PoliciesT2>
+        scanner<IteratorT, PoliciesT2>
+        change_policies(PoliciesT2 const& policies) const
+        {
+            return scanner<IteratorT, PoliciesT2>(first, last, policies);
+        }
+
+        template <typename IteratorT2>
+        struct rebind_iterator
+        {
+            typedef scanner<IteratorT2, PoliciesT> type;
+        };
+
+        template <typename IteratorT2>
+        scanner<IteratorT2, PoliciesT>
+        change_iterator(IteratorT2 const& first_, IteratorT2 const &last_) const
+        {
+            return scanner<IteratorT2, PoliciesT>(first_, last_, *this);
+        }
+
+        IteratorT& first;
+        IteratorT const last;
+
+    private:
+
+        scanner&
+        operator=(scanner const& other);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  rebind_scanner_policies class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ScannerT, typename PoliciesT>
+    struct rebind_scanner_policies
+    {
+        typedef typename ScannerT::template
+            rebind_policies<PoliciesT>::type type;
+    };
+
+    //////////////////////////////////
+    template <typename ScannerT, typename IteratorT>
+    struct rebind_scanner_iterator
+    {
+        typedef typename ScannerT::template
+            rebind_iterator<IteratorT>::type type;
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp
new file mode 100644 (file)
index 0000000..efd78cf
--- /dev/null
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SCANNER_FWD_HPP)
+#define BOOST_SPIRIT_SCANNER_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  policy classes
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct iteration_policy;
+    struct action_policy;
+    struct match_policy;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner_policies class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IterationPolicyT   = iteration_policy,
+        typename MatchPolicyT       = match_policy,
+        typename ActionPolicyT      = action_policy>
+    struct scanner_policies;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  scanner class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorT  = char const*,
+        typename PoliciesT  = scanner_policies<> >
+    class scanner;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper.hpp
new file mode 100644 (file)
index 0000000..4e655ae
--- /dev/null
@@ -0,0 +1,197 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_HPP)
+#define BOOST_SPIRIT_SKIPPER_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <cctype>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp>
+
+#include <boost/spirit/home/classic/core/scanner/skipper_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  skipper_iteration_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BaseT>
+    struct skipper_iteration_policy : public BaseT
+    {
+        typedef BaseT base_t;
+    
+        skipper_iteration_policy()
+        : BaseT() {}
+    
+        template <typename PolicyT>
+        skipper_iteration_policy(PolicyT const& other)
+        : BaseT(other) {}
+    
+        template <typename ScannerT>
+        void
+        advance(ScannerT const& scan) const
+        {
+            BaseT::advance(scan);
+            scan.skip(scan);
+        }
+    
+        template <typename ScannerT>
+        bool
+        at_end(ScannerT const& scan) const
+        {
+            scan.skip(scan);
+            return BaseT::at_end(scan);
+        }
+    
+        template <typename ScannerT>
+        void
+        skip(ScannerT const& scan) const
+        {
+            while (!BaseT::at_end(scan) && impl::isspace_(BaseT::get(scan)))
+                BaseT::advance(scan);
+        }
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  no_skipper_iteration_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename BaseT>
+    struct no_skipper_iteration_policy : public BaseT
+    {
+        typedef BaseT base_t;
+
+        no_skipper_iteration_policy()
+        : BaseT() {}
+
+        template <typename PolicyT>
+        no_skipper_iteration_policy(PolicyT const& other)
+        : BaseT(other) {}
+
+        template <typename ScannerT>
+        void
+        skip(ScannerT const& /*scan*/) const {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  skip_parser_iteration_policy class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        template <typename ST, typename ScannerT, typename BaseT>
+        void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            skipper_iteration_policy<BaseT> const&);
+
+        template <typename ST, typename ScannerT, typename BaseT>
+        void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            no_skipper_iteration_policy<BaseT> const&);
+
+        template <typename ST, typename ScannerT>
+        void
+        skipper_skip(
+            ST const& s,
+            ScannerT const& scan,
+            iteration_policy const&);
+    }
+
+    template <typename ParserT, typename BaseT>
+    class skip_parser_iteration_policy : public skipper_iteration_policy<BaseT>
+    {
+    public:
+    
+        typedef skipper_iteration_policy<BaseT> base_t;
+    
+        skip_parser_iteration_policy(
+            ParserT const& skip_parser,
+            base_t const& base = base_t())
+        : base_t(base), subject(skip_parser) {}
+    
+        template <typename PolicyT>
+        skip_parser_iteration_policy(PolicyT const& other)
+        : base_t(other), subject(other.skipper()) {}
+    
+        template <typename ScannerT>
+        void
+        skip(ScannerT const& scan) const
+        {
+            impl::skipper_skip(subject, scan, scan);
+        }
+    
+        ParserT const&
+        skipper() const
+        { 
+            return subject; 
+        }
+    
+    private:
+    
+        ParserT const& subject;
+    };
+    
+    ///////////////////////////////////////////////////////////////////////////////
+    //
+    //  Free parse functions using the skippers
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+    template <typename IteratorT, typename ParserT, typename SkipT>
+    parse_info<IteratorT>
+    parse(
+        IteratorT const&        first,
+        IteratorT const&        last,
+        parser<ParserT> const&  p,
+        parser<SkipT> const&    skip);
+    
+    ///////////////////////////////////////////////////////////////////////////////
+    //
+    //  Parse function for null terminated strings using the skippers
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+    template <typename CharT, typename ParserT, typename SkipT>
+    parse_info<CharT const*>
+    parse(
+        CharT const*            str,
+        parser<ParserT> const&  p,
+        parser<SkipT> const&    skip);
+    
+    ///////////////////////////////////////////////////////////////////////////////
+    //
+    //  phrase_scanner_t and wide_phrase_scanner_t
+    //
+    //      The most common scanners. Use these typedefs when you need
+    //      a scanner that skips white spaces.
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+    typedef skipper_iteration_policy<>                  iter_policy_t;
+    typedef scanner_policies<iter_policy_t>             scanner_policies_t;
+    typedef scanner<char const*, scanner_policies_t>    phrase_scanner_t;
+    typedef scanner<wchar_t const*, scanner_policies_t> wide_phrase_scanner_t;
+    
+    ///////////////////////////////////////////////////////////////////////////////
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include <boost/spirit/home/classic/core/scanner/impl/skipper.ipp>
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp
new file mode 100644 (file)
index 0000000..228e618
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_FWD_HPP)
+#define BOOST_SPIRIT_SKIPPER_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename BaseT = iteration_policy>
+    struct skipper_iteration_policy;
+
+    template <typename BaseT = iteration_policy>
+    struct no_skipper_iteration_policy; 
+
+    template <typename ParserT, typename BaseT = iteration_policy>
+    class skip_parser_iteration_policy;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/core/typeof.hpp
new file mode 100644 (file)
index 0000000..ca82428
--- /dev/null
@@ -0,0 +1,343 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
+#define BOOST_SPIRIT_CORE_TYPEOF_HPP
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+#include <boost/spirit/home/classic/core/primitives/numerics_fwd.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner_fwd.hpp>
+#include <boost/spirit/home/classic/core/scanner/skipper_fwd.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // parser.hpp
+    template <typename IteratorT> struct parse_info;
+    struct plain_parser_category;
+    struct binary_parser_category;
+    struct unary_parser_category;
+    struct action_parser_category;
+
+    // match.hpp
+    template<typename T> class match; 
+
+    // primitives/primitives.hpp
+    template<class ParserT> struct negated_char_parser;
+    template<typename CharT> struct chlit;
+    template<typename CharT> struct range;
+    template<typename IteratorT> class chseq;
+    template<typename IteratorT> class strlit;
+    struct nothing_parser;
+    struct anychar_parser;
+    struct alnum_parser;
+    struct alpha_parser;
+    struct cntrl_parser;
+    struct digit_parser;
+    struct xdigit_parser;
+    struct graph_parser;
+    struct upper_parser;
+    struct lower_parser;
+    struct print_parser;
+    struct punct_parser;
+    struct blank_parser;
+    struct space_parser;
+    struct eol_parser;
+    struct end_parser; 
+
+    // non_terminal/parser_context.hpp
+    template<typename T> struct parser_context;
+
+    // non_terminal/parser_id.hpp
+    class parser_id;
+    template<int N> struct parser_tag;
+    class dynamic_parser_tag;
+    struct parser_address_tag;
+
+    // non_terminal/rule.hpp
+    template<typename T0, typename T1, typename T2> class rule; 
+
+    // non_terminal/grammar.hpp
+    template<class DerivedT, typename ContextT> struct grammar; 
+
+    // composite.hpp
+    template<class ParserT, typename ActionT> class action;
+    template<class A, class B> struct alternative;
+    template<class A, class B> struct difference;
+    template<class A, class B> struct exclusive_or;
+    template<class A, class B> struct intersection;
+    template<class a, class b> struct sequence;
+    template<class A, class B> struct sequential_or;
+    template<class S> struct kleene_star;
+    template<class S> struct positive;
+    template<class S> struct optional;
+    // composite/directives.hpp
+    template<class ParserT> struct contiguous;
+    template<class ParserT> struct inhibit_case;
+    template<class BaseT> struct inhibit_case_iteration_policy;
+    template<class A, class B> struct longest_alternative;
+    template<class A, class B> struct shortest_alternative;
+    template<class ParserT, typename BoundsT> struct min_bounded;
+    template<class ParserT, typename BoundsT> struct max_bounded;
+    template<class ParserT, typename BoundsT> struct bounded;
+    // composite/no_actions.hpp
+    template<class Parser> struct no_actions_parser;
+    template<class Base> struct no_actions_action_policy;
+    // composite/epsilon.hpp
+    struct epsilon_parser;
+    template<typename CondT, bool positive> struct condition_parser;
+    template<typename SubjectT> struct empty_match_parser;
+    template<typename SubjectT> struct negated_empty_match_parser;
+
+    // deprecated assign/push_back actor -- they live somewhere else, now
+    struct assign_action;
+    struct push_back_action;
+    template<typename T, typename ActionT> class ref_value_actor;
+    template<typename T, typename ValueT, typename ActionT> 
+    class ref_const_ref_actor;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// parser.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parse_info,1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::plain_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::binary_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::unary_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::action_parser_category)
+
+
+// nil.hpp (included directly)
+
+#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
+// registration guard to decouple the iterators from the core
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::nil_t)
+#   define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
+#endif
+
+// match.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::match, 1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::match<BOOST_SPIRIT_CLASSIC_NS::nil_t>)
+
+
+// primitives/primitives.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::negated_char_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::chlit, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::range, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::chseq, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::strlit, 1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::nothing_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::anychar_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::alnum_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::alpha_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::cntrl_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::digit_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::xdigit_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::graph_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::upper_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::lower_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::print_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::punct_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::blank_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::space_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::eol_parser)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::end_parser)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chlit<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chlit<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::range<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::range<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chseq<char const *>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chseq<wchar_t const *>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strlit<char const *>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strlit<wchar_t const *>)
+
+
+// primitives/numerics.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::int_parser, (class)(int)(unsigned)(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::uint_parser, (class)(int)(unsigned)(int))
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::sign_parser)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::real_parser, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::real_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ureal_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::strict_real_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::strict_ureal_parser_policies, 1)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::int_parser, (class)(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::uint_parser, (class)(int))
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::int_parser<boost::int32_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::uint_parser<boost::uint32_t>)
+#if !defined(BOOST_NO_INT64_T)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::int_parser<boost::int64_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::uint_parser<boost::uint64_t>)
+#endif
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::real_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::real_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::ureal_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::ureal_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strict_real_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strict_real_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strict_ureal_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::strict_ureal_parser_policies<double>)
+
+
+// scanner/scanner.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner_policies,3)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::iteration_policy)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::action_policy)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::match_policy)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner_policies,2)
+
+
+// scanner/skipper.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::skipper_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::no_skipper_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::skip_parser_iteration_policy,2)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::skipper_iteration_policy<>)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::skip_parser_iteration_policy,1)
+
+
+// non_terminal/parser_context.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_context,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::parser_context<BOOST_SPIRIT_CLASSIC_NS::nil_t>)
+
+
+// non_terminal/parser_id.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::parser_id)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_tag, (int))
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::dynamic_parser_tag)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::parser_address_tag)
+
+
+// non_terminal/subrule.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrule,(int)(class))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrule_parser,(int)(class)(class))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrule_list,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrules_scanner,2)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrule,(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::subrule_parser,(int)(class))
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<0>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<1>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<2>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<3>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<4>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<5>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<6>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::subrule<7>)
+
+
+// non_terminal/rule.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::rule,3)
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner_list,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner_list,BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
+#endif
+
+
+// non_terminal/grammar.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar,2)
+
+
+// composite.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::action, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::difference, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::exclusive_or, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::intersection, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::sequence, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::sequential_or, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::kleene_star, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::positive, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::optional, 1)
+
+
+// composite/directives.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::contiguous, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::inhibit_case, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::inhibit_case_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::longest_alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::shortest_alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::min_bounded, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::max_bounded, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::bounded, 2)
+
+
+// composite/no_actions.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::no_actions_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::no_actions_action_policy, 1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::no_actions_action_policy<BOOST_SPIRIT_CLASSIC_NS::action_policy>)
+
+
+// composite/epsilon.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::epsilon_parser)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::condition_parser, (class)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::empty_match_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::negated_empty_match_parser, 1)
+
+
+#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
+// deprecated assign/push_back actor -- they live somewhere else, now
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_value_actor,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ref_const_ref_actor,3)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::assign_action)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::push_back_action)
+#endif
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400)) && BOOST_MSVC >= 1400
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    nil_t & operator* (nil_t);
+    nil_t & operator+ (nil_t);
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+} } // namespace ::BOOST_SPIRIT_CLASSIC_NS
+#endif
+
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug.hpp
new file mode 100644 (file)
index 0000000..9737b35
--- /dev/null
@@ -0,0 +1,154 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#define BOOST_SPIRIT_DEBUG_MAIN_HPP
+
+///////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit.Debug includes and defines
+//
+///////////////////////////////////////////////////////////////////////////////
+
+    #include <iostream>
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The BOOST_SPIRIT_DEBUG_OUT defines the stream object, which should be used
+    //  for debug diagnostics. This defaults to std::cout.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #if !defined(BOOST_SPIRIT_DEBUG_OUT)
+    #define BOOST_SPIRIT_DEBUG_OUT std::cout
+    #endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The BOOST_SPIRIT_DEBUG_PRINT_SOME constant defines the number of characters
+    //  from the stream to be printed for diagnosis. This defaults to the first
+    //  20 characters.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+    #define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+    #endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Additional BOOST_SPIRIT_DEBUG_FLAGS control the level of diagnostics printed
+    //  Basic constants are defined in debug/minimal.hpp.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_DEBUG_FLAGS_NODES        0x0001  // node diagnostics
+    #define BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR  0x0002  // escape_char_parse diagnostics
+    #define BOOST_SPIRIT_DEBUG_FLAGS_TREES        0x0004  // parse tree/ast diagnostics
+    #define BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES     0x0008  // closure diagnostics
+    #define BOOST_SPIRIT_DEBUG_FLAGS_SLEX         0x8000  // slex diagnostics
+
+    #define BOOST_SPIRIT_DEBUG_FLAGS_MAX          0xFFFF  // print maximal diagnostics
+
+    #if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
+    #define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX
+    #endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  By default all nodes are traced (even those, not registered with
+    //  BOOST_SPIRIT_DEBUG_RULE et.al. - see below). The following constant may be
+    //  used to redefine this default.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
+    #define BOOST_SPIRIT_DEBUG_TRACENODE          (true)
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper macros for giving rules and subrules a name accessible through
+    //  parser_name() functions (see parser_names.hpp).
+    //
+    //  Additionally, the macros BOOST_SPIRIT_DEBUG_RULE, SPIRIT_DEBUG_NODE and
+    //  BOOST_SPIRIT_DEBUG_GRAMMAR enable/disable the tracing of the 
+    //  correspondingnode accordingly to the PP constant 
+    //  BOOST_SPIRIT_DEBUG_TRACENODE.
+    //
+    //  The macros BOOST_SPIRIT_DEBUG_TRACE_RULE, BOOST_SPIRIT_DEBUG_TRACE_NODE 
+    //  and BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR allow to specify a flag to define, 
+    //  whether the corresponding node is to be traced or not.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #if !defined(BOOST_SPIRIT_DEBUG_RULE)
+    #define BOOST_SPIRIT_DEBUG_RULE(r)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+    #endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_NODE)
+    #define BOOST_SPIRIT_DEBUG_NODE(r)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+    #endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+    #define BOOST_SPIRIT_DEBUG_GRAMMAR(r)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+    #endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+    #define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, (t))
+    #endif // !defined(BOOST_SPIRIT_TRACE_RULE)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+    #define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, (t))
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+    #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, #r, (t))
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+    #define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, (n), (t))
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+    #define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, (n), (t))
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+
+    #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+    #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t)    \
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \
+            register_node(&r, (n), (t))
+    #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+
+    //////////////////////////////////
+    #include <boost/spirit/home/classic/debug/debug_node.hpp>
+
+#else
+    //////////////////////////////////
+    #include <boost/spirit/home/classic/debug/minimal.hpp>
+
+#endif // BOOST_SPIRIT_DEBUG
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/debug_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/debug_node.hpp
new file mode 100644 (file)
index 0000000..adc1f91
--- /dev/null
@@ -0,0 +1,319 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    Copyright (c) 2003 Gustavo Guerra
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
+#define BOOST_SPIRIT_DEBUG_NODE_HPP
+
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/debug_node.hpp"
+#endif
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <string>
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp> // for iscntrl_
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Debug helper classes for rules, which ensure maximum non-intrusiveness of
+//  the Spirit debug support
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl {
+
+    struct token_printer_aux_for_chars
+    {
+        template<typename CharT>
+        static void print(std::ostream& o, CharT c)
+        {
+            if (c == static_cast<CharT>('\a'))
+                o << "\\a";
+
+            else if (c == static_cast<CharT>('\b'))
+                o << "\\b";
+
+            else if (c == static_cast<CharT>('\f'))
+                o << "\\f";
+
+            else if (c == static_cast<CharT>('\n'))
+                o << "\\n";
+
+            else if (c == static_cast<CharT>('\r'))
+                o << "\\r";
+
+            else if (c == static_cast<CharT>('\t'))
+                o << "\\t";
+
+            else if (c == static_cast<CharT>('\v'))
+                o << "\\v";
+
+            else if (iscntrl_(c))
+                o << "\\" << static_cast<int>(c);
+
+            else
+                o << static_cast<char>(c);
+        }
+    };
+
+    // for token types where the comparison with char constants wouldn't work
+    struct token_printer_aux_for_other_types
+    {
+        template<typename CharT>
+        static void print(std::ostream& o, CharT c)
+        {
+            o << c;
+        }
+    };
+
+    template <typename CharT>
+    struct token_printer_aux
+    :   mpl::if_<
+            mpl::and_<
+                is_convertible<CharT, char>,
+                is_convertible<char, CharT> >,
+            token_printer_aux_for_chars,
+            token_printer_aux_for_other_types
+        >::type
+    {
+    };
+
+    template<typename CharT>
+    inline void token_printer(std::ostream& o, CharT c)
+    {
+    #if !defined(BOOST_SPIRIT_DEBUG_TOKEN_PRINTER)
+
+        token_printer_aux<CharT>::print(o, c);
+
+    #else
+
+        BOOST_SPIRIT_DEBUG_TOKEN_PRINTER(o, c);
+
+    #endif
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Dump infos about the parsing state of a rule
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+    template <typename IteratorT>
+    inline void
+    print_node_info(bool hit, int level, bool close, std::string const& name,
+        IteratorT first, IteratorT last)
+    {
+        if (!name.empty())
+        {
+            for (int i = 0; i < level; ++i)
+                BOOST_SPIRIT_DEBUG_OUT << "  ";
+            if (close)
+            {
+                if (hit)
+                    BOOST_SPIRIT_DEBUG_OUT << "/";
+                else
+                    BOOST_SPIRIT_DEBUG_OUT << "#";
+            }
+            BOOST_SPIRIT_DEBUG_OUT << name << ":\t\"";
+            IteratorT iter = first;
+            IteratorT ilast = last;
+            for (int j = 0; j < BOOST_SPIRIT_DEBUG_PRINT_SOME; ++j)
+            {
+                if (iter == ilast)
+                    break;
+
+                token_printer(BOOST_SPIRIT_DEBUG_OUT, *iter);
+                ++iter;
+            }
+            BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+        }
+    }
+#endif  // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+    template <typename ResultT>
+    inline ResultT &
+    print_closure_info(ResultT &hit, int level, std::string const& name)
+    {
+        if (!name.empty())
+        {
+            for (int i = 0; i < level-1; ++i)
+                BOOST_SPIRIT_DEBUG_OUT << "  ";
+
+        // for now, print out the return value only
+            BOOST_SPIRIT_DEBUG_OUT << "^" << name << ":\t";
+            if (hit.has_valid_attribute())
+                BOOST_SPIRIT_DEBUG_OUT << hit.value();
+            else
+                BOOST_SPIRIT_DEBUG_OUT << "undefined attribute";
+            BOOST_SPIRIT_DEBUG_OUT << "\n";
+        }
+        return hit;
+    }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Implementation note: The parser_context_linker, parser_scanner_linker and
+//  closure_context_linker classes are wrapped by a PP constant to allow
+//  redefinition of this classes outside of Spirit
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_context_linker is a debug wrapper for the ContextT template
+    //  parameter of the rule<>, subrule<> and the grammar<> classes
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename ContextT>
+    struct parser_context_linker : public ContextT
+    {
+        typedef ContextT base_t;
+
+        template <typename ParserT>
+        parser_context_linker(ParserT const& p)
+        : ContextT(p) {}
+
+        template <typename ParserT, typename ScannerT>
+        void pre_parse(ParserT const& p, ScannerT &scan)
+        {
+            this->base_t::pre_parse(p, scan);
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+            if (trace_parser(p.derived())) {
+                impl::print_node_info(
+                    false,
+                    scan.get_level(),
+                    false,
+                    parser_name(p.derived()),
+                    scan.first,
+                    scan.last);
+            }
+            scan.get_level()++;
+#endif  // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+        }
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT& post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
+        {
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+            --scan.get_level();
+            if (trace_parser(p.derived())) {
+                impl::print_node_info(
+                    hit,
+                    scan.get_level(),
+                    true,
+                    parser_name(p.derived()),
+                    scan.first,
+                    scan.last);
+            }
+#endif  // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+
+            return this->base_t::post_parse(hit, p, scan);
+        }
+    };
+
+#endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+
+#if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+#define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
+
+///////////////////////////////////////////////////////////////////////////////
+//  This class is to avoid linker problems and to ensure a real singleton
+//  'level' variable
+    struct debug_support
+    {
+        int& get_level()
+        {
+            static int level = 0;
+            return level;
+        }
+    };
+
+    template<typename ScannerT>
+    struct parser_scanner_linker : public ScannerT
+    {
+        parser_scanner_linker(ScannerT const &scan_) : ScannerT(scan_)
+        {}
+
+        int &get_level()
+        { return debug.get_level(); }
+
+        private: debug_support debug;
+    };
+
+#endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  closure_context_linker is a debug wrapper for the closure template
+    //  parameter of the rule<>, subrule<> and grammar classes
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    template<typename ContextT>
+    struct closure_context_linker : public parser_context_linker<ContextT>
+    {
+        typedef parser_context_linker<ContextT> base_t;
+
+        template <typename ParserT>
+        closure_context_linker(ParserT const& p)
+        : parser_context_linker<ContextT>(p) {}
+
+        template <typename ParserT, typename ScannerT>
+        void pre_parse(ParserT const& p, ScannerT &scan)
+        { this->base_t::pre_parse(p, scan); }
+
+        template <typename ResultT, typename ParserT, typename ScannerT>
+        ResultT&
+        post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
+        {
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+            if (hit && trace_parser(p.derived())) {
+            // for now, print out the return value only
+                return impl::print_closure_info(
+                    this->base_t::post_parse(hit, p, scan),
+                    scan.get_level(),
+                    parser_name(p.derived())
+                );
+            }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+
+            return this->base_t::post_parse(hit, p, scan);
+        }
+    };
+
+#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/impl/parser_names.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/impl/parser_names.ipp
new file mode 100644 (file)
index 0000000..5d75be2
--- /dev/null
@@ -0,0 +1,555 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_NAMES_IPP)
+#define BOOST_SPIRIT_PARSER_NAMES_IPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <string>
+#include <iostream>
+#include <map>
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_SPIRIT_SSTREAM std::strstream
+std::string BOOST_SPIRIT_GETSTRING(std::strstream& ss)
+{
+    ss << ends;
+    std::string rval = ss.str();
+    ss.freeze(false);
+    return rval;
+}
+#else
+#include <sstream>
+#define BOOST_SPIRIT_GETSTRING(ss) ss.str()
+#define BOOST_SPIRIT_SSTREAM std::stringstream
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//  from actions.hpp
+    template <typename ParserT, typename ActionT>
+    inline std::string
+    parser_name(action<ParserT, ActionT> const& p)
+    {
+        return std::string("action")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from directives.hpp
+    template <typename ParserT>
+    inline std::string
+    parser_name(contiguous<ParserT> const& p)
+    {
+        return std::string("contiguous")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+    template <typename ParserT>
+    inline std::string
+    parser_name(inhibit_case<ParserT> const& p)
+    {
+        return std::string("inhibit_case")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(longest_alternative<A, B> const& p)
+    {
+        return std::string("longest_alternative")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(shortest_alternative<A, B> const& p)
+    {
+        return std::string("shortest_alternative")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from numerics.hpp
+    template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+    inline std::string
+    parser_name(uint_parser<T, Radix, MinDigits, MaxDigits> const& p)
+    {
+        BOOST_SPIRIT_SSTREAM stream;
+        stream << Radix << ", " << MinDigits << ", " << MaxDigits;
+        return std::string("uint_parser<")
+            + BOOST_SPIRIT_GETSTRING(stream)
+            + std::string(">");
+    }
+
+    template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+    inline std::string
+    parser_name(int_parser<T, Radix, MinDigits, MaxDigits> const& p)
+    {
+        BOOST_SPIRIT_SSTREAM stream;
+        stream << Radix << ", " << MinDigits << ", " << MaxDigits;
+        return std::string("int_parser<")
+            + BOOST_SPIRIT_GETSTRING(stream)
+            + std::string(">");
+    }
+
+    template <typename T, typename RealPoliciesT>
+    inline std::string
+    parser_name(real_parser<T, RealPoliciesT> const& p)
+    {
+        return std::string("real_parser");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from operators.hpp
+    template <typename A, typename B>
+    inline std::string
+    parser_name(sequence<A, B> const& p)
+    {
+        return std::string("sequence")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(sequential_or<A, B> const& p)
+    {
+        return std::string("sequential_or")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(alternative<A, B> const& p)
+    {
+        return std::string("alternative")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(intersection<A, B> const& p)
+    {
+        return std::string("intersection")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(difference<A, B> const& p)
+    {
+        return std::string("difference")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename A, typename B>
+    inline std::string
+    parser_name(exclusive_or<A, B> const& p)
+    {
+        return std::string("exclusive_or")
+            + std::string("[")
+            + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+            + std::string("]");
+    }
+
+    template <typename S>
+    inline std::string
+    parser_name(optional<S> const& p)
+    {
+        return std::string("optional")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+    template <typename S>
+    inline std::string
+    parser_name(kleene_star<S> const& p)
+    {
+        return std::string("kleene_star")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+    template <typename S>
+    inline std::string
+    parser_name(positive<S> const& p)
+    {
+        return std::string("positive")
+            + std::string("[")
+            + parser_name(p.subject())
+            + std::string("]");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from parser.hpp
+    template <typename DerivedT>
+    inline std::string
+    parser_name(parser<DerivedT> const& p)
+    {
+        return std::string("parser");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from primitives.hpp
+    template <typename DerivedT>
+    inline std::string
+    parser_name(char_parser<DerivedT> const &p)
+    {
+        return std::string("char_parser");
+    }
+
+    template <typename CharT>
+    inline std::string
+    parser_name(chlit<CharT> const &p)
+    {
+        return std::string("chlit(\'")
+            + std::string(1, p.ch)
+            + std::string("\')");
+    }
+
+    template <typename CharT>
+    inline std::string
+    parser_name(range<CharT> const &p)
+    {
+        return std::string("range(")
+            + std::string(1, p.first) + std::string(", ") + std::string(1, p.last)
+            + std::string(")");
+    }
+
+    template <typename IteratorT>
+    inline std::string
+    parser_name(chseq<IteratorT> const &p)
+    {
+        return std::string("chseq(\"")
+            + std::string(p.first, p.last)
+            + std::string("\")");
+    }
+
+    template <typename IteratorT>
+    inline std::string
+    parser_name(strlit<IteratorT> const &p)
+    {
+        return std::string("strlit(\"")
+            + std::string(p.seq.first, p.seq.last)
+            + std::string("\")");
+    }
+
+    inline std::string
+    parser_name(nothing_parser const&)
+    {
+        return std::string("nothing");
+    }
+
+    inline std::string
+    parser_name(epsilon_parser const&)
+    {
+        return std::string("epsilon");
+    }
+
+    inline std::string
+    parser_name(anychar_parser const&)
+    {
+        return std::string("anychar");
+    }
+
+    inline std::string
+    parser_name(alnum_parser const&)
+    {
+        return std::string("alnum");
+    }
+
+    inline std::string
+    parser_name(alpha_parser const&)
+    {
+        return std::string("alpha");
+    }
+
+    inline std::string
+    parser_name(cntrl_parser const&)
+    {
+        return std::string("cntrl");
+    }
+
+    inline std::string
+    parser_name(digit_parser const&)
+    {
+        return std::string("digit");
+    }
+
+    inline std::string
+    parser_name(graph_parser const&)
+    {
+        return std::string("graph");
+    }
+
+    inline std::string
+    parser_name(lower_parser const&)
+    {
+        return std::string("lower");
+    }
+
+    inline std::string
+    parser_name(print_parser const&)
+    {
+        return std::string("print");
+    }
+
+    inline std::string
+    parser_name(punct_parser const&)
+    {
+        return std::string("punct");
+    }
+
+    inline std::string
+    parser_name(blank_parser const&)
+    {
+        return std::string("blank");
+    }
+
+    inline std::string
+    parser_name(space_parser const&)
+    {
+        return std::string("space");
+    }
+
+    inline std::string
+    parser_name(upper_parser const&)
+    {
+        return std::string("upper");
+    }
+
+    inline std::string
+    parser_name(xdigit_parser const&)
+    {
+        return std::string("xdigit");
+    }
+
+    inline std::string
+    parser_name(eol_parser const&)
+    {
+        return std::string("eol");
+    }
+
+    inline std::string
+    parser_name(end_parser const&)
+    {
+        return std::string("end");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from rule.hpp
+    namespace impl {
+        struct node_registry
+        {
+            typedef std::pair<std::string, bool> rule_info;
+            typedef std::map<void const *, rule_info> rule_infos;
+
+            std::string find_node(void const *r)
+            {
+                rule_infos::const_iterator cit = infos.find(r);
+                if (cit != infos.end())
+                    return (*cit).second.first;
+                return std::string("<unknown>");
+            }
+
+            bool trace_node(void const *r)
+            {
+                rule_infos::const_iterator cit = infos.find(r);
+                if (cit != infos.end())
+                    return (*cit).second.second;
+                return BOOST_SPIRIT_DEBUG_TRACENODE;
+            }
+
+            bool register_node(void const *r, char const *name_to_register,
+                bool trace_node)
+            {
+                if (infos.find(r) != infos.end())
+                    return false;
+
+                return infos.insert(rule_infos::value_type(r,
+                    rule_info(std::string(name_to_register), trace_node))
+                ).second;
+            }
+
+            bool unregister_node(void const *r)
+            {
+                if (infos.find(r) == infos.end())
+                    return false;
+                return (1 == infos.erase(r));
+            }
+
+        private:
+            rule_infos infos;
+        };
+
+        inline node_registry &
+        get_node_registry()
+        {
+            static node_registry node_infos;
+            return node_infos;
+        }
+    }   // namespace impl
+
+    template<
+        typename DerivedT, typename EmbedT, 
+        typename T0, typename T1, typename T2
+    >
+    inline std::string
+    parser_name(impl::rule_base<DerivedT, EmbedT, T0, T1, T2> const& p)
+    {
+        return std::string("rule_base")
+            + std::string("(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+    template<typename T0, typename T1, typename T2>
+    inline std::string
+    parser_name(rule<T0, T1, T2> const& p)
+    {
+        return std::string("rule")
+            + std::string("(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from subrule.hpp
+    template <typename FirstT, typename RestT>
+    inline std::string
+    parser_name(subrule_list<FirstT, RestT> const &p)
+    {
+        return std::string("subrule_list")
+            + std::string("(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+    template <int ID, typename DefT, typename ContextT>
+    inline std::string
+    parser_name(subrule_parser<ID, DefT, ContextT> const &p)
+    {
+        return std::string("subrule_parser")
+            + std::string("(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+    template <int ID, typename ContextT>
+    inline std::string
+    parser_name(subrule<ID, ContextT> const &p)
+    {
+        BOOST_SPIRIT_SSTREAM stream;
+        stream << ID;
+        return std::string("subrule<")
+            + BOOST_SPIRIT_GETSTRING(stream)
+            + std::string(">(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  from grammar.hpp
+    template <typename DerivedT, typename ContextT>
+    inline std::string
+    parser_name(grammar<DerivedT, ContextT> const& p)
+    {
+        return std::string("grammar")
+            + std::string("(")
+            + impl::get_node_registry().find_node(&p)
+            + std::string(")");
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//  decide, if a node is to be traced or not
+    template<
+        typename DerivedT, typename EmbedT, 
+        typename T0, typename T1, typename T2
+    >
+    inline bool
+    trace_parser(impl::rule_base<DerivedT, EmbedT, T0, T1, T2> 
+        const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+    template<typename T0, typename T1, typename T2>
+    inline bool
+    trace_parser(rule<T0, T1, T2> const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+    template <typename DerivedT, typename ContextT>
+    inline bool
+    trace_parser(grammar<DerivedT, ContextT> const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+    template <typename DerivedT, int N, typename ContextT>
+    inline bool
+    trace_parser(impl::entry_grammar<DerivedT, N, ContextT> const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+    template <int ID, typename ContextT>
+    bool
+    trace_parser(subrule<ID, ContextT> const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+    template <typename ParserT, typename ActorTupleT>
+    bool
+    trace_parser(init_closure_parser<ParserT, ActorTupleT> const& p)
+    {
+        return impl::get_node_registry().trace_node(&p);
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_SSTREAM
+#undef BOOST_SPIRIT_GETSTRING
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_PARSER_NAMES_IPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/minimal.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/minimal.hpp
new file mode 100644 (file)
index 0000000..0cb4264
--- /dev/null
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)
+#define BOOST_SPIRIT_MINIMAL_DEBUG_HPP
+
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/minimal.hpp"
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Minimum debugging tools support
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEBUG_OUT)
+#define BOOST_SPIRIT_DEBUG_OUT std::cout
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+//
+//  BOOST_SPIRIT_DEBUG_FLAGS controls the level of diagnostics printed
+//
+///////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_NONE)
+#define BOOST_SPIRIT_DEBUG_FLAGS_NONE         0x0000  // no diagnostics at all
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_MAX)
+#define BOOST_SPIRIT_DEBUG_FLAGS_MAX          0xFFFF  // print maximal diagnostics
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
+#define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_RULE)
+#define BOOST_SPIRIT_DEBUG_RULE(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_NODE)
+#define BOOST_SPIRIT_DEBUG_NODE(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+#define BOOST_SPIRIT_DEBUG_GRAMMAR(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+#define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+#define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+
+#endif  // !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/parser_names.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/parser_names.hpp
new file mode 100644 (file)
index 0000000..edd17cc
--- /dev/null
@@ -0,0 +1,254 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
+#define BOOST_SPIRIT_PARSER_NAMES_HPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+//////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Declaration of helper functions, which return the name of a concrete
+//  parser instance. The functions are specialized on the parser types. The
+//  functions declared in this file are for the predefined parser types from
+//  the Spirit core library only, so additional functions might be provided as
+//  needed.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//  from actions.hpp
+    template <typename ParserT, typename ActionT>
+    std::string
+    parser_name(action<ParserT, ActionT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from directives.hpp
+    template <typename ParserT>
+    std::string
+    parser_name(contiguous<ParserT> const& p);
+
+    template <typename ParserT>
+    std::string
+    parser_name(inhibit_case<ParserT> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(longest_alternative<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(shortest_alternative<A, B> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from grammar.hpp
+    template <typename DerivedT, typename ContextT>
+    std::string
+    parser_name(grammar<DerivedT, ContextT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from numerics.hpp
+    template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+    std::string
+    parser_name(uint_parser<T, Radix, MinDigits, MaxDigits> const& p);
+
+    template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+    std::string
+    parser_name(int_parser<T, Radix, MinDigits, MaxDigits> const& p);
+
+    template <typename T, typename RealPoliciesT>
+    std::string
+    parser_name(real_parser<T, RealPoliciesT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from operators.hpp
+    template <typename A, typename B>
+    std::string
+    parser_name(sequence<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(sequential_or<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(alternative<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(intersection<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(difference<A, B> const& p);
+
+    template <typename A, typename B>
+    std::string
+    parser_name(exclusive_or<A, B> const& p);
+
+    template <typename S>
+    std::string
+    parser_name(optional<S> const& p);
+
+    template <typename S>
+    std::string
+    parser_name(kleene_star<S> const& p);
+
+    template <typename S>
+    std::string
+    parser_name(positive<S> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from parser.hpp
+    template <typename DerivedT>
+    std::string
+    parser_name(parser<DerivedT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from primitives.hpp
+    template <typename DerivedT>
+    std::string
+    parser_name(char_parser<DerivedT> const &p);
+
+    template <typename CharT>
+    std::string
+    parser_name(chlit<CharT> const &p);
+
+    template <typename CharT>
+    std::string
+    parser_name(range<CharT> const &p);
+
+    template <typename IteratorT>
+    std::string
+    parser_name(chseq<IteratorT> const &p);
+
+    template <typename IteratorT>
+    std::string
+    parser_name(strlit<IteratorT> const &p);
+
+    std::string
+    parser_name(nothing_parser const &p);
+
+    std::string
+    parser_name(epsilon_parser const &p);
+
+    std::string
+    parser_name(anychar_parser const &p);
+
+    std::string
+    parser_name(alnum_parser const &p);
+
+    std::string
+    parser_name(alpha_parser const &p);
+
+    std::string
+    parser_name(cntrl_parser const &p);
+
+    std::string
+    parser_name(digit_parser const &p);
+
+    std::string
+    parser_name(graph_parser const &p);
+
+    std::string
+    parser_name(lower_parser const &p);
+
+    std::string
+    parser_name(print_parser const &p);
+
+    std::string
+    parser_name(punct_parser const &p);
+
+    std::string
+    parser_name(blank_parser const &p);
+
+    std::string
+    parser_name(space_parser const &p);
+
+    std::string
+    parser_name(upper_parser const &p);
+
+    std::string
+    parser_name(xdigit_parser const &p);
+
+    std::string
+    parser_name(eol_parser const &p);
+
+    std::string
+    parser_name(end_parser const &p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from rule.hpp
+    template<typename T0, typename T1, typename T2>
+    std::string
+    parser_name(rule<T0, T1, T2> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from subrule.hpp
+    template <typename FirstT, typename RestT>
+    std::string
+    parser_name(subrule_list<FirstT, RestT> const &p);
+
+    template <int ID, typename DefT, typename ContextT>
+    std::string
+    parser_name(subrule_parser<ID, DefT, ContextT> const &p);
+
+    template <int ID, typename ContextT>
+    std::string
+    parser_name(subrule<ID, ContextT> const &p);
+
+///////////////////////////////////////////////////////////////////////////////
+//  from chset.hpp
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Decide, if a node is to be traced or not
+//
+///////////////////////////////////////////////////////////////////////////////
+    template<
+        typename DerivedT, typename EmbedT, 
+        typename T0, typename T1, typename T2
+    >
+    bool
+    trace_parser(impl::rule_base<DerivedT, EmbedT, T0, T1, T2> 
+        const& p);
+
+    template <typename DerivedT, typename ContextT>
+    bool
+    trace_parser(grammar<DerivedT, ContextT> const& p);
+
+    template <int ID, typename ContextT>
+    bool
+    trace_parser(subrule<ID, ContextT> const& p);
+
+    template <typename ParserT, typename ActorTupleT>
+    struct init_closure_parser;
+
+    template <typename ParserT, typename ActorTupleT>
+    bool
+    trace_parser(init_closure_parser<ParserT, ActorTupleT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+//////////////////////////////////
+#include <boost/spirit/home/classic/debug/impl/parser_names.ipp>
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/debug/typeof.hpp
new file mode 100644 (file)
index 0000000..c764d31
--- /dev/null
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_TYPEOF_HPP)
+#define BOOST_SPIRIT_DEBUG_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/typeof.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // debug_node.hpp
+    template<typename ContextT> struct parser_context_linker;
+    template<typename ScannerT> struct scanner_context_linker;
+    template<typename ContextT> struct closure_context_linker;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+// debug_node.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_context_linker,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scanner_context_linker,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::closure_context_linker,1)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic.hpp
new file mode 100644 (file)
index 0000000..41ed74f
--- /dev/null
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_DYNAMIC_HPP
+#define BOOST_SPIRIT_DYNAMIC_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Dynamic
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/dynamic/if.hpp>
+#include <boost/spirit/home/classic/dynamic/for.hpp>
+#include <boost/spirit/home/classic/dynamic/while.hpp>
+#include <boost/spirit/home/classic/dynamic/lazy.hpp>
+#include <boost/spirit/home/classic/dynamic/stored_rule.hpp>
+#include <boost/spirit/home/classic/dynamic/rule_alias.hpp>
+#include <boost/spirit/home/classic/dynamic/select.hpp>
+#include <boost/spirit/home/classic/dynamic/switch.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+#endif // BOOST_SPIRIT_DYNAMIC_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/for.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/for.hpp
new file mode 100644 (file)
index 0000000..45edd6a
--- /dev/null
@@ -0,0 +1,187 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FOR_HPP
+#define BOOST_SPIRIT_FOR_HPP
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/dynamic/impl/conditions.ipp>
+
+////////////////////////////////////////////////////////////////////////////////
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl
+    {
+
+        template <typename FuncT>
+        struct for_functor
+        {
+            typedef typename boost::call_traits<FuncT>::param_type  param_t;
+
+            for_functor(param_t f) : func(f) {}
+            for_functor() {}
+            FuncT func;
+        };
+
+        template <typename InitF>
+        struct for_init_functor : for_functor<InitF>
+        {
+            typedef for_functor<InitF>          base_t;
+            typedef typename base_t::param_t    param_t;
+
+            for_init_functor(param_t f) : base_t(f) {}
+            for_init_functor() : base_t() {}
+            void init() const { /*return*/ this->func(); }
+        };
+
+        template <typename StepF>
+        struct for_step_functor : for_functor<StepF>
+        {
+            typedef for_functor<StepF>          base_t;
+            typedef typename base_t::param_t    param_t;
+
+            for_step_functor(param_t f) : base_t(f) {}
+            for_step_functor() : base_t() {}
+            void step() const { /*return*/ this->func(); }
+        };
+
+        //////////////////////////////////
+        // for_parser
+        template
+        <
+            typename InitF, typename CondT, typename StepF,
+            typename ParsableT
+        >
+        struct for_parser
+            : private for_init_functor<InitF>
+            , private for_step_functor<StepF>
+            , private condition_evaluator<typename as_parser<CondT>::type>
+            , public unary
+            <
+                typename as_parser<ParsableT>::type,
+                parser< for_parser<InitF, CondT, StepF, ParsableT> >
+            >
+        {
+            typedef for_parser<InitF, CondT, StepF, ParsableT> self_t;
+            typedef as_parser<CondT>                           cond_as_parser_t;
+            typedef typename cond_as_parser_t::type            condition_t;
+            typedef condition_evaluator<condition_t>           eval_t;
+            typedef as_parser<ParsableT>                       as_parser_t;
+            typedef typename as_parser_t::type                 parser_t;
+            typedef unary< parser_t, parser< self_t > >        base_t;
+
+
+            //////////////////////////////
+            // constructor, saves init, condition and step functors
+            // for later use the parse member function
+            for_parser
+            (
+                InitF const &i, CondT const &c, StepF const &s,
+                ParsableT const &p
+            )
+                : for_init_functor<InitF>(i)
+                , for_step_functor<StepF>(s)
+                , eval_t(cond_as_parser_t::convert(c))
+                , base_t(as_parser_t::convert(p))
+            { }
+
+            for_parser()
+                : for_init_functor<InitF>()
+                , for_step_functor<StepF>()
+                , eval_t()
+                , base_t()
+            {}
+
+            //////////////////////////////
+            // parse member function
+            template <typename ScannerT>
+            typename parser_result<self_t, ScannerT>::type
+            parse(ScannerT const &scan) const
+            {
+                typedef typename parser_result<self_t, ScannerT>::type
+                    result_t;
+                typedef typename parser_result<parser_t, ScannerT>::type
+                    body_result_t;
+
+                typename ScannerT::iterator_t save(scan.first);
+
+                std::size_t length = 0;
+                int eval_length = 0;
+
+                this->init();
+                while ((eval_length = this->evaluate(scan))>=0)
+                {
+                    length += eval_length;
+                    body_result_t tmp(this->subject().parse(scan));
+                    if (tmp)
+                    {
+                        length+=tmp.length();
+                    }
+                    else
+                    {
+                        return scan.no_match();
+                    }
+                    this->step();
+                }
+
+                BOOST_SPIRIT_CLASSIC_NS::nil_t attr;
+                return scan.create_match
+                    (length, attr, save, scan.first);
+            }
+        };
+
+        //////////////////////////////////
+        // for_parser_gen generates takes the body parser in brackets
+        // and returns the for_parser
+        template <typename InitF, typename CondT, typename StepF>
+        struct for_parser_gen
+        {
+            for_parser_gen(InitF const &i, CondT const &c, StepF const &s)
+                : init(i)
+                , condition(c)
+                , step(s)
+            {}
+
+            template <typename ParsableT>
+            for_parser<InitF, CondT, StepF, ParsableT>
+            operator[](ParsableT const &p) const
+            {
+                return for_parser<InitF, CondT, StepF, ParsableT>
+                    (init, condition, step, p);
+            }
+
+            InitF const &init;
+            CondT const &condition;
+            StepF const &step;
+        };
+    } // namespace impl
+
+    //////////////////////////////
+    // for_p, returns for-parser generator
+    // Usage: spirit::for_p(init-ftor, condition, step-ftor)[body]
+    template
+    <
+        typename InitF, typename ConditionT, typename StepF
+    >
+    impl::for_parser_gen<InitF, ConditionT, StepF>
+    for_p(InitF const &init_f, ConditionT const &condition, StepF const &step_f)
+    {
+        return impl::for_parser_gen<InitF, ConditionT, StepF>
+            (init_f, condition, step_f);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_FOR_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/if.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/if.hpp
new file mode 100644 (file)
index 0000000..b7fbb77
--- /dev/null
@@ -0,0 +1,229 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_IF_HPP
+#define BOOST_SPIRIT_IF_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/dynamic/impl/conditions.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+
+    //////////////////////////////////
+    // if-else-parser, holds two alternative parsers and a conditional functor
+    // that selects between them.
+    template <typename ParsableTrueT, typename ParsableFalseT, typename CondT>
+    struct if_else_parser
+        : public condition_evaluator<typename as_parser<CondT>::type>
+        , public binary
+        <
+            typename as_parser<ParsableTrueT>::type,
+            typename as_parser<ParsableFalseT>::type,
+            parser< if_else_parser<ParsableTrueT, ParsableFalseT, CondT> >
+        >
+    {
+        typedef if_else_parser<ParsableTrueT, ParsableFalseT, CondT>  self_t;
+
+        typedef as_parser<ParsableTrueT>            as_parser_true_t;
+        typedef as_parser<ParsableFalseT>           as_parser_false_t;
+        typedef typename as_parser_true_t::type     parser_true_t;
+        typedef typename as_parser_false_t::type    parser_false_t;
+        typedef as_parser<CondT>                    cond_as_parser_t;
+        typedef typename cond_as_parser_t::type     condition_t;
+
+        typedef binary<parser_true_t, parser_false_t, parser<self_t> > base_t;
+        typedef condition_evaluator<condition_t>                       eval_t;
+
+        if_else_parser
+        (
+            ParsableTrueT  const& p_true,
+            ParsableFalseT const& p_false,
+            CondT          const& cond_
+        )
+            : eval_t(cond_as_parser_t::convert(cond_))
+            , base_t
+                (
+                    as_parser_true_t::convert(p_true),
+                    as_parser_false_t::convert(p_false)
+                )
+        { }
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result
+                <parser_true_t, ScannerT>::type   then_result_t;
+            typedef typename parser_result
+                <parser_false_t, ScannerT>::type  else_result_t;
+
+            typename ScannerT::iterator_t const  save(scan.first);
+
+            std::ptrdiff_t length = this->evaluate(scan);
+            if (length >= 0)
+            {
+                then_result_t then_result(this->left().parse(scan));
+                if (then_result)
+                {
+                    length += then_result.length();
+                    return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+                }
+            }
+            else
+            {
+                else_result_t else_result(this->right().parse(scan));
+                if (else_result)
+                {
+                    length = else_result.length();
+                    return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+                }
+            }
+            return scan.no_match();
+        }
+    };
+
+    //////////////////////////////////
+    // if-else-parser generator, takes the false-parser in brackets
+    // and returns the if-else-parser.
+    template <typename ParsableTrueT, typename CondT>
+    struct if_else_parser_gen
+    {
+        if_else_parser_gen(ParsableTrueT const& p_true_, CondT const& cond_)
+            : p_true(p_true_)
+            , cond(cond_) {}
+
+        template <typename ParsableFalseT>
+        if_else_parser
+        <
+            ParsableTrueT,
+            ParsableFalseT,
+            CondT
+        >
+        operator[](ParsableFalseT const& p_false) const
+        {
+            return if_else_parser<ParsableTrueT, ParsableFalseT, CondT>
+                (
+                    p_true,
+                    p_false,
+                    cond
+                );
+        }
+
+        ParsableTrueT const &p_true;
+        CondT const &cond;
+    };
+
+    //////////////////////////////////
+    // if-parser, conditionally runs a parser is a functor condition is true.
+    // If the condition is fales, it fails the parse.
+    // It can optionally become an if-else-parser through the member else_p.
+    template <typename ParsableT, typename CondT>
+    struct if_parser
+        : public condition_evaluator<typename as_parser<CondT>::type>
+        , public unary
+        <
+            typename as_parser<ParsableT>::type,
+            parser<if_parser<ParsableT, CondT> > >
+    {
+        typedef if_parser<ParsableT, CondT>           self_t;
+        typedef as_parser<ParsableT>                  as_parser_t;
+        typedef typename as_parser_t::type            parser_t;
+
+        typedef as_parser<CondT>                      cond_as_parser_t;
+        typedef typename cond_as_parser_t::type       condition_t;
+        typedef condition_evaluator<condition_t>      eval_t;
+        typedef unary<parser_t, parser<self_t> >      base_t;
+
+        if_parser(ParsableT const& p, CondT const& cond_)
+            : eval_t(cond_as_parser_t::convert(cond_))
+            , base_t(as_parser_t::convert(p))
+            , else_p(p, cond_)
+        {}
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<parser_t, ScannerT>::type t_result_t;
+            typename ScannerT::iterator_t const save(scan.first);
+
+            std::ptrdiff_t length = this->evaluate(scan);
+            if (length >= 0)
+            {
+                t_result_t then_result(this->subject().parse(scan));
+                if (then_result)
+                {
+                    length += then_result.length();
+                    return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+                }
+                return scan.no_match();
+            }
+            return scan.empty_match();
+        }
+
+        if_else_parser_gen<ParsableT, CondT> else_p;
+    };
+
+    //////////////////////////////////
+    // if-parser generator, takes the true-parser in brackets and returns the
+    // if-parser.
+    template <typename CondT>
+    struct if_parser_gen
+    {
+        if_parser_gen(CondT const& cond_) : cond(cond_) {}
+
+        template <typename ParsableT>
+        if_parser
+        <
+            ParsableT,
+            CondT
+        >
+        operator[](ParsableT const& subject) const
+        {
+            return if_parser<ParsableT, CondT>(subject, cond);
+        }
+
+        CondT const &cond;
+    };
+
+} // namespace impl
+
+//////////////////////////////////
+// if_p function, returns "if" parser generator
+
+template <typename CondT>
+impl::if_parser_gen<CondT>
+if_p(CondT const& cond)
+{
+    return impl::if_parser_gen<CondT>(cond);
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_IF_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/conditions.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/conditions.ipp
new file mode 100644 (file)
index 0000000..3a7b530
--- /dev/null
@@ -0,0 +1,97 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONDITIONS_IPP
+#define BOOST_SPIRIT_CONDITIONS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/meta/parser_traits.hpp>
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// condition evaluation
+//
+///////////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////
+    // condition_parser_selector, decides which parser to use for a condition
+    // If the template argument is a parser then that parser is used.
+    // If the template argument is a functor then a condition parser using
+    // the functor is chosen
+
+    template <typename T> struct embed_t_accessor
+    {
+        typedef typename T::embed_t type;
+    };
+
+    template <typename ConditionT>
+    struct condition_parser_selector
+    {
+        typedef
+            typename mpl::if_<
+                    is_parser<ConditionT>,
+                    ConditionT,
+                    condition_parser<ConditionT>
+                >::type
+            type;
+
+        typedef typename embed_t_accessor<type>::type embed_t;
+    };
+
+    //////////////////////////////////
+    // condition_evaluator, uses a parser to check wether a condition is met
+    // takes a parser or a functor that can be evaluated in boolean context
+    // as template parameter.
+
+    // JDG 4-15-03 refactored
+    template <typename ConditionT>
+    struct condition_evaluator
+    {
+        typedef condition_parser_selector<ConditionT>       selector_t;
+        typedef typename selector_t::type                   selected_t;
+        typedef typename selector_t::embed_t                cond_embed_t;
+
+        typedef typename boost::call_traits<cond_embed_t>::param_type
+            param_t;
+
+        condition_evaluator(param_t s) : cond(s) {}
+
+        /////////////////////////////
+        // evaluate, checks wether condition is met
+        // returns length of a match or a negative number for no-match
+        template <typename ScannerT>
+        std::ptrdiff_t
+        evaluate(ScannerT const &scan) const
+        {
+            typedef typename ScannerT::iterator_t iterator_t;
+            typedef typename parser_result<selected_t, ScannerT>::type cres_t;
+            iterator_t save(scan.first);
+            cres_t result = cond.parse(scan);
+            if (!result)            // reset the position if evaluation
+                scan.first = save;  // fails.
+            return result.length();
+        }
+
+        cond_embed_t cond;
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+    } // namespace impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/select.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/select.ipp
new file mode 100644 (file)
index 0000000..5314210
--- /dev/null
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SELECT_IPP
+#define BOOST_SPIRIT_SELECT_IPP
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename ParserT>
+struct as_embedded_parser : public as_parser<ParserT>
+{
+    typedef typename as_parser<ParserT>::type::derived_t::embed_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+// no implementation here to catch unknown BehaviourT template arguments
+template <typename ResultT, typename BehaviourT>
+struct select_match_gen;
+
+// implementation for the select_default_no_fail behaviour
+template <typename ResultT>
+struct select_match_gen<ResultT, select_default_no_fail> {
+
+    template <typename ScannerT>
+    static ResultT
+    do_ (ScannerT const &scan)
+    {
+        return scan.create_match(0, -1, scan.first, scan.first);
+    }
+};
+
+// implementation for the select_default_fail behaviour
+template <typename ResultT>
+struct select_match_gen<ResultT, select_default_fail> {
+
+    template <typename ScannerT>
+    static ResultT
+    do_ (ScannerT const &scan)
+    {
+        return scan.no_match();
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ResultT, typename TupleT, typename BehaviourT>
+struct parse_tuple_element {
+
+    BOOST_STATIC_CONSTANT(int, index = (TupleT::length - N));
+    
+    template <typename ScannerT>
+    static ResultT
+    do_(TupleT const &t, ScannerT const &scan)
+    {
+        typedef typename ::phoenix::tuple_element<index, TupleT>::type parser_t;
+        typedef typename ScannerT::iterator_t                       iterator_t;
+        typedef typename parser_result<parser_t, ScannerT>::type    result_t;
+    
+    iterator_t save(scan.first);
+    result_t result(t[::phoenix::tuple_index<index>()].parse(scan));
+
+        if (result) {
+            return scan.create_match(result.length(), TupleT::length - N, 
+                save, scan.first);
+        }
+        scan.first = save;    // reset the input stream 
+        return parse_tuple_element<N-1, ResultT, TupleT, BehaviourT>::
+            do_(t, scan);
+    }
+};
+
+template <typename ResultT, typename TupleT, typename BehaviourT>
+struct parse_tuple_element<1, ResultT, TupleT, BehaviourT> {
+
+    BOOST_STATIC_CONSTANT(int, index = (TupleT::length - 1));
+    
+    template <typename ScannerT>
+    static ResultT
+    do_(TupleT const &t, ScannerT const &scan)
+    {
+        typedef typename ::phoenix::tuple_element<index, TupleT>::type  parser_t;
+        typedef typename ScannerT::iterator_t                       iterator_t;
+        typedef typename parser_result<parser_t, ScannerT>::type    result_t;
+        
+    iterator_t save(scan.first);
+    result_t result(t[::phoenix::tuple_index<index>()].parse(scan));
+
+        if (result) {
+            return scan.create_match(result.length(), TupleT::length - 1, 
+                save, scan.first);
+        }
+        scan.first = save;    // reset the input stream 
+        return select_match_gen<ResultT, BehaviourT>::do_(scan);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}   // namespace impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}  // namespace boost::spirit
+
+#endif  // BOOST_SPIRIT_SELECT_IPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/switch.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/impl/switch.ipp
new file mode 100644 (file)
index 0000000..b881f9d
--- /dev/null
@@ -0,0 +1,574 @@
+/*=============================================================================
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SWITCH_IPP
+#define BOOST_SPIRIT_SWITCH_IPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+// forward declaration
+template <int N, typename ParserT, bool IsDefault> struct case_parser;
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//  parse helper functions
+template <typename ParserT, typename ScannerT>
+inline typename parser_result<ParserT, ScannerT>::type
+delegate_parse(ParserT const &p, ScannerT const &scan,
+    typename ScannerT::iterator_t const save)
+{
+    typedef typename parser_result<ParserT, ScannerT>::type result_t;
+
+    result_t result (p.subject().parse(scan));
+    if (!result)
+        scan.first = save;
+    return result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//  General default case handling (no default_p case branch given).
+//  First try to match the current parser node (if the condition value is
+//  matched) and, if that fails, return a no_match
+template <int N, bool IsDefault, bool HasDefault>
+struct default_delegate_parse {
+
+    template <
+        typename ParserT, typename DefaultT,
+        typename ValueT, typename ScannerT
+    >
+    static typename parser_result<ParserT, ScannerT>::type
+    parse (ValueT const &value, ParserT const &p, DefaultT const &,
+        ScannerT const &scan, typename ScannerT::iterator_t const save)
+    {
+        if (value == N)
+            return delegate_parse(p, scan, save);
+        return scan.no_match();
+    }
+};
+
+//  The current case parser node is the default parser.
+//  Ignore the given case value and try to match the given default parser.
+template <int N, bool HasDefault>
+struct default_delegate_parse<N, true, HasDefault> {
+
+    template <
+        typename ParserT, typename DefaultT,
+        typename ValueT, typename ScannerT
+    >
+    static typename parser_result<ParserT, ScannerT>::type
+    parse (ValueT const& /*value*/, ParserT const &, DefaultT const &d,
+        ScannerT const &scan, typename ScannerT::iterator_t const save)
+    {
+        //  Since there is a default_p case branch defined, the corresponding
+        //  parser shouldn't be the nothing_parser
+        BOOST_STATIC_ASSERT((!boost::is_same<DefaultT, nothing_parser>::value));
+        return delegate_parse(d, scan, save);
+    }
+};
+
+//  The current case parser node is not the default parser, but there is a
+//  default_p branch given inside the switch_p parser.
+//  First try to match the current parser node (if the condition value is
+//  matched) and, if that fails, match the given default_p parser.
+template <int N>
+struct default_delegate_parse<N, false, true> {
+
+    template <
+        typename ParserT, typename DefaultT,
+        typename ValueT, typename ScannerT
+    >
+    static typename parser_result<ParserT, ScannerT>::type
+    parse (ValueT const &value, ParserT const &p, DefaultT const &d,
+        ScannerT const &scan, typename ScannerT::iterator_t const save)
+    {
+        //  Since there is a default_p case branch defined, the corresponding
+        //  parser shouldn't be the nothing_parser
+        BOOST_STATIC_ASSERT((!boost::is_same<DefaultT, nothing_parser>::value));
+        if (value == N)
+            return delegate_parse(p, scan, save);
+
+        return delegate_parse(d, scan, save);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  Look through the case parser chain to test, if there is a default case
+//  branch defined (returned by 'value').
+template <typename CaseT, bool IsSimple = CaseT::is_simple>
+struct default_case;
+
+////////////////////////////////////////
+template <typename ResultT, bool IsDefault>
+struct get_default_parser {
+
+    template <typename ParserT>
+    static ResultT
+    get(parser<ParserT> const &p)
+    {
+        return default_case<typename ParserT::derived_t::left_t>::
+            get(p.derived().left());
+    }
+};
+
+template <typename ResultT>
+struct get_default_parser<ResultT, true> {
+
+    template <typename ParserT>
+    static ResultT
+    get(parser<ParserT> const &p) { return p.derived().right(); }
+};
+
+////////////////////////////////////////
+template <typename CaseT, bool IsSimple>
+struct default_case {
+
+    //  The 'value' constant is true, if the current case_parser or one of its
+    //  left siblings is a default_p generated case_parser.
+    BOOST_STATIC_CONSTANT(bool, value =
+        (CaseT::is_default || default_case<typename CaseT::left_t>::value));
+
+    //  The 'is_epsilon' constant is true, if the current case_parser or one of
+    //  its left siblings is a default_p generated parser with an attached
+    //  epsilon_p (this is generated by the plain default_p).
+    BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+        (CaseT::is_default && CaseT::is_epsilon) ||
+            default_case<typename CaseT::left_t>::is_epsilon
+    ));
+
+    //  The computed 'type' represents the type of the default case branch
+    //  parser (if there is one) or nothing_parser (if there isn't any default
+    //  case branch).
+    typedef typename boost::mpl::if_c<
+            CaseT::is_default, typename CaseT::right_embed_t,
+            typename default_case<typename CaseT::left_t>::type
+        >::type type;
+
+    //  The get function returns the parser attached to the default case branch
+    //  (if there is one) or an instance of a nothing_parser (if there isn't
+    //  any default case branch).
+    template <typename ParserT>
+    static type
+    get(parser<ParserT> const &p)
+    { return get_default_parser<type, CaseT::is_default>::get(p); }
+};
+
+////////////////////////////////////////
+template <typename ResultT, bool IsDefault>
+struct get_default_parser_simple {
+
+    template <typename ParserT>
+    static ResultT
+    get(parser<ParserT> const &p) { return p.derived(); }
+};
+
+template <typename ResultT>
+struct get_default_parser_simple<ResultT, false> {
+
+    template <typename ParserT>
+    static nothing_parser
+    get(parser<ParserT> const &) { return nothing_p; }
+};
+
+////////////////////////////////////////
+//  Specialization of the default_case template for the last (leftmost) element
+//  of the case parser chain.
+template <typename CaseT>
+struct default_case<CaseT, true> {
+
+    //  The 'value' and 'is_epsilon' constant, the 'type' type and the function
+    //  'get' are described above.
+
+    BOOST_STATIC_CONSTANT(bool, value = CaseT::is_default);
+    BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+        CaseT::is_default && CaseT::is_epsilon
+    ));
+
+    typedef typename boost::mpl::if_c<
+            CaseT::is_default, CaseT, nothing_parser
+        >::type type;
+
+    template <typename ParserT>
+    static type
+    get(parser<ParserT> const &p)
+    { return get_default_parser_simple<type, value>::get(p); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  The case_chain template calculates recursivly the depth of the left
+//  subchain of the given case branch node.
+template <typename CaseT, bool IsSimple = CaseT::is_simple>
+struct case_chain {
+
+    BOOST_STATIC_CONSTANT(int, depth = (
+        case_chain<typename CaseT::left_t>::depth + 1
+    ));
+};
+
+template <typename CaseT>
+struct case_chain<CaseT, true> {
+
+    BOOST_STATIC_CONSTANT(int, depth = 0);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  The chain_parser template is used to extract the type and the instance of
+//  a left or a right parser, burried arbitrary deep inside the case parser
+//  chain.
+template <int Depth, typename CaseT>
+struct chain_parser {
+
+    typedef typename CaseT::left_t our_left_t;
+
+    typedef typename chain_parser<Depth-1, our_left_t>::left_t  left_t;
+    typedef typename chain_parser<Depth-1, our_left_t>::right_t right_t;
+
+    static left_t
+    left(CaseT const &p)
+    { return chain_parser<Depth-1, our_left_t>::left(p.left()); }
+
+    static right_t
+    right(CaseT const &p)
+    { return chain_parser<Depth-1, our_left_t>::right(p.left()); }
+};
+
+template <typename CaseT>
+struct chain_parser<1, CaseT> {
+
+    typedef typename CaseT::left_t  left_t;
+    typedef typename CaseT::right_t right_t;
+
+    static left_t left(CaseT const &p) { return p.left(); }
+    static right_t right(CaseT const &p) { return p.right(); }
+};
+
+template <typename CaseT>
+struct chain_parser<0, CaseT>;      // shouldn't be instantiated
+
+///////////////////////////////////////////////////////////////////////////////
+//  Type computing meta function for calculating the type of the return value
+//  of the used conditional switch expression
+template <typename TargetT, typename ScannerT>
+struct condition_result {
+
+    typedef typename TargetT::template result<ScannerT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename LeftT, typename RightT, bool IsDefault>
+struct compound_case_parser
+:   public binary<LeftT, RightT,
+        parser<compound_case_parser<LeftT, RightT, IsDefault> > >
+{
+    typedef compound_case_parser<LeftT, RightT, IsDefault>    self_t;
+    typedef binary_parser_category                  parser_category_t;
+    typedef binary<LeftT, RightT, parser<self_t> >  base_t;
+
+    BOOST_STATIC_CONSTANT(int, value = RightT::value);
+    BOOST_STATIC_CONSTANT(bool, is_default = IsDefault);
+    BOOST_STATIC_CONSTANT(bool, is_simple = false);
+    BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+        is_default &&
+            boost::is_same<typename RightT::subject_t, epsilon_parser>::value
+    ));
+
+    compound_case_parser(parser<LeftT> const &lhs, parser<RightT> const &rhs)
+    :   base_t(lhs.derived(), rhs.derived())
+    {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, nil_t>::type type;
+    };
+
+    template <typename ScannerT, typename CondT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan, CondT const &cond) const;
+
+    template <int N1, typename ParserT1, bool IsDefault1>
+    compound_case_parser<
+        self_t, case_parser<N1, ParserT1, IsDefault1>, IsDefault1
+    >
+    operator, (case_parser<N1, ParserT1, IsDefault1> const &p) const
+    {
+        //  If the following compile time assertion fires, you've probably used
+        //  more than one default_p case inside the switch_p parser construct.
+        BOOST_STATIC_ASSERT(!default_case<self_t>::value || !IsDefault1);
+
+        //  If this compile time assertion fires, you've probably want to use
+        //  more case_p/default_p case branches, than possible.
+        BOOST_STATIC_ASSERT(
+            case_chain<self_t>::depth < BOOST_SPIRIT_SWITCH_CASE_LIMIT
+        );
+
+        typedef case_parser<N1, ParserT1, IsDefault1> right_t;
+        return compound_case_parser<self_t, right_t, IsDefault1>(*this, p);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  The parse_switch::do_ functions dispatch to the correct parser, which is
+//  selected through the given conditional switch value.
+template <int Value, int Depth, bool IsDefault>
+struct parse_switch;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The following generates a couple of parse_switch template specializations
+//  with an increasing number of handled case branches (for 1..N).
+//
+//      template <int Value, bool IsDefault>
+//      struct parse_switch<Value, N, IsDefault> {
+//
+//          template <typename ParserT, typename ScannerT>
+//          static typename parser_result<ParserT, ScannerT>::type
+//          do_(ParserT const &p, ScannerT const &scan, long cond_value,
+//              typename ScannerT::iterator_t const &save)
+//          {
+//              typedef ParserT left_t0;
+//              typedef typename left_t0::left left_t1;
+//              ...
+//
+//              switch (cond_value) {
+//              case left_tN::value:
+//                  return delegate_parse(chain_parser<
+//                          case_chain<ParserT>::depth, ParserT
+//                      >::left(p), scan, save);
+//              ...
+//              case left_t1::value:
+//                  return delegate_parse(chain_parser<
+//                          1, left_t1
+//                      >::right(p.left()), scan, save);
+//
+//              case left_t0::value:
+//              default:
+//                  typedef default_case<ParserT> default_t;
+//                  typedef default_delegate_parse<
+//                              Value, IsDefault, default_t::value>
+//                      default_parse_t;
+//
+//                  return default_parse_t::parse(cond_value, p.right(),
+//                      default_t::get(p), scan, save);
+//              }
+//          }
+//      };
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS(z, N, _)                         \
+    typedef typename BOOST_PP_CAT(left_t, N)::left_t                        \
+        BOOST_PP_CAT(left_t, BOOST_PP_INC(N));                              \
+    /**/
+
+#define BOOST_SPIRIT_PARSE_SWITCH_CASES(z, N, _)                            \
+    case (long)(BOOST_PP_CAT(left_t, N)::value):                            \
+        return delegate_parse(chain_parser<N, left_t1>::right(p.left()),    \
+            scan, save);                                                    \
+    /**/
+
+#define BOOST_SPIRIT_PARSE_SWITCHES(z, N, _)                                \
+    template <int Value, bool IsDefault>                                    \
+    struct parse_switch<Value, BOOST_PP_INC(N), IsDefault> {                \
+                                                                            \
+        template <typename ParserT, typename ScannerT>                      \
+        static typename parser_result<ParserT, ScannerT>::type              \
+        do_(ParserT const &p, ScannerT const &scan, long cond_value,        \
+            typename ScannerT::iterator_t const &save)                      \
+        {                                                                   \
+            typedef ParserT left_t0;                                        \
+            BOOST_PP_REPEAT_FROM_TO_ ## z(0, BOOST_PP_INC(N),               \
+                BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS, _)                      \
+                                                                            \
+            switch (cond_value) {                                           \
+            case (long)(BOOST_PP_CAT(left_t, BOOST_PP_INC(N))::value):      \
+                return delegate_parse(                                      \
+                    chain_parser<                                           \
+                        case_chain<ParserT>::depth, ParserT                 \
+                    >::left(p), scan, save);                                \
+                                                                            \
+            BOOST_PP_REPEAT_FROM_TO_ ## z(1, BOOST_PP_INC(N),               \
+                BOOST_SPIRIT_PARSE_SWITCH_CASES, _)                         \
+                                                                            \
+            case (long)(left_t0::value):                                    \
+            default:                                                        \
+                typedef default_case<ParserT> default_t;                    \
+                typedef                                                     \
+                    default_delegate_parse<Value, IsDefault, default_t::value> \
+                    default_parse_t;                                        \
+                                                                            \
+                return default_parse_t::parse(cond_value, p.right(),        \
+                    default_t::get(p), scan, save);                         \
+            }                                                               \
+        }                                                                   \
+    };                                                                      \
+    /**/
+
+BOOST_PP_REPEAT(BOOST_PP_DEC(BOOST_SPIRIT_SWITCH_CASE_LIMIT),
+    BOOST_SPIRIT_PARSE_SWITCHES, _)
+
+#undef BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS
+#undef BOOST_SPIRIT_PARSE_SWITCH_CASES
+#undef BOOST_SPIRIT_PARSE_SWITCHES
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename LeftT, typename RightT, bool IsDefault>
+template <typename ScannerT, typename CondT>
+inline typename parser_result<
+    compound_case_parser<LeftT, RightT, IsDefault>, ScannerT
+>::type
+compound_case_parser<LeftT, RightT, IsDefault>::
+    parse(ScannerT const& scan, CondT const &cond) const
+{
+    scan.at_end();    // allow skipper to take effect
+    return parse_switch<value, case_chain<self_t>::depth, is_default>::
+        do_(*this, scan, cond(scan), scan.first);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//  The switch condition is to be evaluated from a parser result value.
+template <typename ParserT>
+struct cond_functor {
+
+    typedef cond_functor<ParserT> self_t;
+
+    cond_functor(ParserT const &p_)
+    :   p(p_)
+    {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<ParserT, ScannerT>::type::attr_t type;
+    };
+
+    template <typename ScannerT>
+    typename condition_result<self_t, ScannerT>::type
+    operator()(ScannerT const &scan) const
+    {
+        typedef typename parser_result<ParserT, ScannerT>::type result_t;
+        typedef typename result_t::attr_t attr_t;
+
+        result_t result(p.parse(scan));
+        return !result ? attr_t() : result.value();
+    }
+
+    typename ParserT::embed_t p;
+};
+
+template <typename ParserT>
+struct make_cond_functor {
+
+    typedef as_parser<ParserT> as_parser_t;
+
+    static cond_functor<typename as_parser_t::type>
+    do_(ParserT const &cond)
+    {
+        return cond_functor<typename as_parser_t::type>(
+            as_parser_t::convert(cond));
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  The switch condition is to be evaluated from a phoenix actor
+template <typename ActorT>
+struct cond_actor {
+
+    typedef cond_actor<ActorT> self_t;
+
+    cond_actor(ActorT const &actor_)
+    :   actor(actor_)
+    {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename ::phoenix::actor_result<ActorT, ::phoenix::tuple<> >::type
+            type;
+    };
+
+    template <typename ScannerT>
+    typename condition_result<self_t, ScannerT>::type
+    operator()(ScannerT const& /*scan*/) const
+    {
+        return actor();
+    }
+
+    ActorT const &actor;
+};
+
+template <typename ActorT>
+struct make_cond_functor< ::phoenix::actor<ActorT> > {
+
+    static cond_actor< ::phoenix::actor<ActorT> >
+    do_(::phoenix::actor<ActorT> const &actor)
+    {
+        return cond_actor< ::phoenix::actor<ActorT> >(actor);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  The switch condition is to be taken directly from the input stream
+struct get_next_token_cond {
+
+    typedef get_next_token_cond self_t;
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename ScannerT::value_t type;
+    };
+
+    template <typename ScannerT>
+    typename condition_result<self_t, ScannerT>::type
+    operator()(ScannerT const &scan) const
+    {
+        typename ScannerT::value_t val(*scan);
+        ++scan.first;
+        return val;
+    }
+};
+
+template <>
+struct make_cond_functor<get_next_token_cond> {
+
+    static get_next_token_cond
+    do_(get_next_token_cond const &cond)
+    {
+        return cond;
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}   // namespace impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}  // namespace boost::spirit
+
+#endif  // BOOST_SPIRIT_SWITCH_IPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/lazy.hpp
new file mode 100644 (file)
index 0000000..5bc9df3
--- /dev/null
@@ -0,0 +1,66 @@
+/*=============================================================================
+    Copyright (c) 2003 Joel de Guzman
+    Copyright (c) 2003 Vaclav Vesely
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LAZY_HPP
+#define BOOST_SPIRIT_LAZY_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ////////////////////////////////////////////////////////////////////////////
+    //
+    // lazy_parser, holds phoenix actor which returns a spirit parser.
+    //
+    ////////////////////////////////////////////////////////////////////////////
+
+    template<class ActorT>
+    struct lazy_parser : parser<lazy_parser<ActorT> >
+    {
+        typedef lazy_parser<ActorT> self_t;
+        typedef typename ::phoenix::actor_result<
+            ActorT, ::phoenix::tuple<> >::plain_type actor_result_t;
+
+        template<typename ScannerT>
+        struct result
+        {
+            typedef typename
+                parser_result<actor_result_t, ScannerT>::type
+            type;
+        };
+
+        lazy_parser(ActorT const& actor_)
+        : actor(actor_) {}
+
+        template<typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        { return actor().parse(scan); }
+
+        ActorT actor;
+    };
+
+    //////////////////////////////
+    // lazy_p, returns lazy_parser
+    // Usage: lazy_p(actor)
+    template<class ActorT>
+    lazy_parser<ActorT> lazy_p(ActorT const& actor)
+    { return lazy_parser<ActorT>(actor); }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_LAZY_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/rule_alias.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/rule_alias.hpp
new file mode 100644 (file)
index 0000000..de291c9
--- /dev/null
@@ -0,0 +1,76 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
+#define BOOST_SPIRIT_RULE_ALIAS_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  rule_alias class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT>
+    class rule_alias :
+        public parser<rule_alias<ParserT> >
+    {
+    public:
+    
+        typedef rule_alias<ParserT> self_t;
+    
+        template <typename ScannerT>
+        struct result 
+        { 
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+    
+        rule_alias()
+        : ptr(0) {}
+        
+        rule_alias(ParserT const& p)
+        : ptr(&p) {}
+        
+        rule_alias&
+        operator=(ParserT const& p)
+        {
+            ptr = &p;
+            return *this;
+        }
+    
+        template <typename ScannerT>
+        typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan) const
+        { 
+            if (ptr)
+                return ptr->parse(scan);
+            else
+                return scan.no_match();
+        }
+        
+        ParserT const&
+        get() const
+        {
+            BOOST_ASSERT(ptr != 0);
+            return *ptr;
+        }
+    
+    private:
+    
+        ParserT const* ptr; // hold it by pointer
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/select.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/select.hpp
new file mode 100644 (file)
index 0000000..865b27c
--- /dev/null
@@ -0,0 +1,245 @@
+/*=============================================================================
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SELECT_HPP
+#define BOOST_SPIRIT_SELECT_HPP
+
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_params_with_defaults.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit predefined maximum number of possible embedded select_p parsers.
+//  It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SELECT_LIMIT)
+#define BOOST_SPIRIT_SELECT_LIMIT PHOENIX_LIMIT
+#endif // !defined(BOOST_SPIRIT_SELECT_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure   BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT and 
+//          BOOST_SPIRIT_SELECT_LIMIT > 0
+//          BOOST_SPIRIT_SELECT_LIMIT <= 15
+//
+//  [Pushed this down a little to make CW happy with BOOST_STATIC_ASSERT]
+//  [Otherwise, it complains: 'boost_static_assert_test_42' redefined]
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT > 0);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Calculate the required amount of tuple members rounded up to the nearest 
+//  integer dividable by 3
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_SPIRIT_SELECT_LIMIT > 12
+#define BOOST_SPIRIT_SELECT_LIMIT_A     15
+#elif BOOST_SPIRIT_SELECT_LIMIT > 9
+#define BOOST_SPIRIT_SELECT_LIMIT_A     12
+#elif BOOST_SPIRIT_SELECT_LIMIT > 6
+#define BOOST_SPIRIT_SELECT_LIMIT_A     9
+#elif BOOST_SPIRIT_SELECT_LIMIT > 3
+#define BOOST_SPIRIT_SELECT_LIMIT_A     6
+#else
+#define BOOST_SPIRIT_SELECT_LIMIT_A     3
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The select_default_no_fail and select_default_fail structs are used to 
+//  distinguish two different behaviours for the select_parser in case that not
+//  any of the given sub-parsers match.
+//
+//  If the select_parser is used with the select_default_no_fail behaviour,
+//  then in case of no matching sub-parser the whole select_parser returns an
+//  empty match and the value -1.
+//
+//  If the select_parser is used with the select_default_fail behaviour, then
+//  in case of no matching sub-parser the whole select_parser fails to match at 
+//  all.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct select_default_no_fail {};
+struct select_default_fail {};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}  // namespace BOOST_SPIRIT_CLASSIC_NS
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/dynamic/impl/select.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT, typename BehaviourT, typename T>
+struct select_parser
+:   public parser<select_parser<TupleT, BehaviourT, T> >
+{
+    typedef select_parser<TupleT, BehaviourT, T> self_t;
+
+    select_parser(TupleT const &t_)
+    :   t(t_)
+    {}
+    
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, T>::type type;
+    };
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename parser_result<self_t, ScannerT>::type result_t;
+        
+        if (!scan.at_end()) {
+            return impl::parse_tuple_element<
+                TupleT::length, result_t, TupleT, BehaviourT>::do_(t, scan);
+        }
+        return impl::select_match_gen<result_t, BehaviourT>::do_(scan);
+    }
+        
+    TupleT const t;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename BehaviourT, typename T = int>
+struct select_parser_gen {
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  This generates different select_parser_gen::operator()() functions with 
+    //  an increasing number of parser parameters:
+    //
+    //      template <typename ParserT0, ...>
+    //      select_parser<
+    //          ::phoenix::tuple<
+    //              typename impl::as_embedded_parser<ParserT0>::type,
+    //              ...
+    //          >,
+    //          BehaviourT,
+    //          T
+    //      >
+    //      operator()(ParserT0 const &p0, ...) const
+    //      {
+    //          typedef impl::as_embedded_parser<ParserT0> parser_t0;
+    //          ...
+    //
+    //          typedef ::phoenix::tuple< 
+    //                  parser_t0::type,
+    //                  ...
+    //              > tuple_t; 
+    //          typedef select_parser<tuple_t, BehaviourT, T> result_t;
+    //
+    //          return result_t(tuple_t(
+    //                  parser_t0::convert(p0),
+    //                  ...
+    //              ));
+    //      }
+    //
+    //  The number of generated functions depends on the maximum tuple member 
+    //  limit defined by the PHOENIX_LIMIT pp constant. 
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_SELECT_EMBEDDED(z, N, _)                           \
+        typename impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)>::type   \
+        /**/
+    #define BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF(z, N, _)                   \
+        typedef impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)>          \
+            BOOST_PP_CAT(parser_t, N);                                      \
+        /**/
+    #define BOOST_SPIRIT_SELECT_CONVERT(z, N, _)                            \
+        BOOST_PP_CAT(parser_t, N)::convert(BOOST_PP_CAT(p, N))              \
+        /**/
+        
+    #define BOOST_SPIRIT_SELECT_PARSER(z, N, _)                             \
+        template <                                                          \
+            BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ParserT)    \
+        >                                                                   \
+        select_parser<                                                      \
+            ::phoenix::tuple<                                                 \
+                BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N),                        \
+                    BOOST_SPIRIT_SELECT_EMBEDDED, _)                        \
+            >,                                                              \
+            BehaviourT,                                                     \
+            T                                                               \
+        >                                                                   \
+        operator()(                                                         \
+            BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N),               \
+                ParserT, const &p)                                          \
+        ) const                                                             \
+        {                                                                   \
+            BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N),                          \
+                BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF, _)                    \
+                                                                            \
+            typedef ::phoenix::tuple<                                         \
+                    BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N),       \
+                        typename parser_t, ::type BOOST_PP_INTERCEPT)       \
+                > tuple_t;                                                  \
+            typedef select_parser<tuple_t, BehaviourT, T> result_t;         \
+                                                                            \
+            return result_t(tuple_t(                                        \
+                    BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N),                    \
+                        BOOST_SPIRIT_SELECT_CONVERT, _)                     \
+                ));                                                         \
+        }                                                                   \
+        /**/
+        
+    BOOST_PP_REPEAT(BOOST_SPIRIT_SELECT_LIMIT_A, 
+        BOOST_SPIRIT_SELECT_PARSER, _)
+        
+    #undef BOOST_SPIRIT_SELECT_PARSER
+    #undef BOOST_SPIRIT_SELECT_CONVERT
+    #undef BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF
+    #undef BOOST_SPIRIT_SELECT_EMBEDDED
+    ///////////////////////////////////////////////////////////////////////////
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Predefined parser generator helper objects
+//
+///////////////////////////////////////////////////////////////////////////////
+select_parser_gen<select_default_no_fail> const select_p = 
+    select_parser_gen<select_default_no_fail>();
+
+select_parser_gen<select_default_fail> const select_fail_p = 
+    select_parser_gen<select_default_fail>();
+
+#undef BOOST_SPIRIT_SELECT_LIMIT_A
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}  // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_SELECT_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule.hpp
new file mode 100644 (file)
index 0000000..5248ba1
--- /dev/null
@@ -0,0 +1,121 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STORED_RULE_HPP)
+#define BOOST_SPIRIT_STORED_RULE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/impl/rule.ipp>
+#include <boost/spirit/home/classic/dynamic/rule_alias.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  stored_rule class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T0 
+      , typename T1
+      , typename T2
+      , bool EmbedByValue
+    >
+    class stored_rule
+        : public impl::rule_base<
+            stored_rule<T0, T1, T2, EmbedByValue>
+          , typename mpl::if_c<
+                EmbedByValue
+              , stored_rule<T0, T1, T2, true>
+              , stored_rule<T0, T1, T2> const&>::type
+          , T0, T1, T2>
+    {
+    public:
+
+        typedef stored_rule<T0, T1, T2, EmbedByValue> self_t;
+        typedef impl::rule_base<
+            self_t
+          , typename mpl::if_c<
+                EmbedByValue
+              , stored_rule<T0, T1, T2, true>
+              , self_t const&>::type
+          , T0, T1, T2>
+        base_t;
+
+        typedef typename base_t::scanner_t scanner_t;
+        typedef typename base_t::attr_t attr_t;
+        typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
+        typedef rule_alias<self_t> alias_t;
+
+        stored_rule() : ptr() {}
+        ~stored_rule() {}
+
+        stored_rule(stored_rule const& r)
+        : ptr(r.ptr) {}
+
+        template <typename ParserT>
+        stored_rule(ParserT const& p)
+        : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
+
+        template <typename ParserT>
+        stored_rule& operator=(ParserT const& p)
+        {
+            ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
+            return *this;
+        }
+
+        stored_rule& operator=(stored_rule const& r)
+        {
+            //  If this is placed above the templatized assignment
+            //  operator, VC6 incorrectly complains ambiguity with
+            //  r1 = r2, where r1 and r2 are both rules.
+            ptr = r.ptr;
+            return *this;
+        }
+
+        stored_rule<T0, T1, T2, true>
+        copy() const
+        {
+            return stored_rule<T0, T1, T2, true>(ptr);
+        }
+
+        alias_t
+        alias() const
+        {
+            return alias_t(*this);
+        }
+
+    private:
+
+        friend class impl::rule_base_access;
+        friend class stored_rule<T0, T1, T2, !EmbedByValue>;
+
+        abstract_parser_t*
+        get() const
+        {
+            return ptr.get();
+        }
+
+        stored_rule(shared_ptr<abstract_parser_t> const& ptr)
+        : ptr(ptr) {}
+
+        shared_ptr<abstract_parser_t> ptr;
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp
new file mode 100644 (file)
index 0000000..655bd83
--- /dev/null
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STORED_RULE_FWD_HPP)
+#define BOOST_SPIRIT_STORED_RULE_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <
+        typename T0 = nil_t
+      , typename T1 = nil_t
+      , typename T2 = nil_t
+      , bool EmbedByValue = false
+    >
+    class stored_rule;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/switch.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/switch.hpp
new file mode 100644 (file)
index 0000000..4a2c7e4
--- /dev/null
@@ -0,0 +1,259 @@
+/*=============================================================================
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SWITCH_HPP
+#define BOOST_SPIRIT_SWITCH_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The default_p parser generator template uses the following magic number
+//  as the corresponding case label value inside the generated switch()
+//  statements. If this number conflicts with your code, please pick a
+//  different one.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEFAULTCASE_MAGIC)
+#define BOOST_SPIRIT_DEFAULTCASE_MAGIC 0x15F97A7
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit predefined maximum number of possible case_p/default_p case branch
+//  parsers.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
+#define BOOST_SPIRIT_SWITCH_CASE_LIMIT 3
+#endif // !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Ensure   BOOST_SPIRIT_SELECT_LIMIT > 0
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SWITCH_CASE_LIMIT > 0);
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/config.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+#include <boost/spirit/home/classic/dynamic/impl/switch.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The switch_parser allows to build switch like parsing constructs, which
+//  will have much better perfomance as comparable straight solutions.
+//
+//  Input stream driven syntax:
+//
+//      switch_p
+//      [
+//          case_p<'a'>
+//              (...parser to use, if the next character is 'a'...),
+//          case_p<'b'>
+//              (...parser to use, if the next character is 'b'...),
+//          default_p
+//              (...parser to use, if nothing was matched before...)
+//      ]
+//
+//  General syntax:
+//
+//      switch_p(...lazy expression returning the switch condition value...)
+//      [
+//          case_p<1>
+//              (...parser to use, if the switch condition value is 1...),
+//          case_p<2>
+//              (...parser to use, if the switch condition value is 2...),
+//          default_p
+//              (...parser to use, if nothing was matched before...)
+//      ]
+//
+//  The maximum number of possible case_p branches is defined by the p constant
+//  BOOST_SPIRIT_SWITCH_CASE_LIMIT (this value defaults to 3 if not otherwise
+//  defined).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CaseT, typename CondT = impl::get_next_token_cond>
+struct switch_parser
+:   public unary<CaseT, parser<switch_parser<CaseT, CondT> > >
+{
+    typedef switch_parser<CaseT, CondT>     self_t;
+    typedef unary_parser_category           parser_category_t;
+    typedef unary<CaseT, parser<self_t> >   base_t;
+
+    switch_parser(CaseT const &case_)
+    :   base_t(case_), cond(CondT())
+    {}
+
+    switch_parser(CaseT const &case_, CondT const &cond_)
+    :   base_t(case_), cond(cond_)
+    {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, nil_t>::type type;
+    };
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return this->subject().parse(scan,
+            impl::make_cond_functor<CondT>::do_(cond));
+    }
+
+    CondT cond;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT>
+struct switch_cond_parser
+{
+    switch_cond_parser(CondT const &cond_)
+    :   cond(cond_)
+    {}
+
+    template <typename ParserT>
+    switch_parser<ParserT, CondT>
+    operator[](parser<ParserT> const &p) const
+    {
+        return switch_parser<ParserT, CondT>(p.derived(), cond);
+    }
+
+    CondT const &cond;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ParserT, bool IsDefault>
+struct case_parser
+:   public unary<ParserT, parser<case_parser<N, ParserT, IsDefault> > >
+{
+    typedef case_parser<N, ParserT, IsDefault> self_t;
+    typedef unary_parser_category               parser_category_t;
+    typedef unary<ParserT, parser<self_t> >     base_t;
+
+    typedef typename base_t::subject_t          self_subject_t;
+
+    BOOST_STATIC_CONSTANT(int, value = N);
+    BOOST_STATIC_CONSTANT(bool, is_default = IsDefault);
+    BOOST_STATIC_CONSTANT(bool, is_simple = true);
+    BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+        is_default && boost::is_same<self_subject_t, epsilon_parser>::value
+    ));
+
+    case_parser(parser<ParserT> const &p)
+    :   base_t(p.derived())
+    {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, nil_t>::type type;
+    };
+
+    template <typename ScannerT, typename CondT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan, CondT const &cond) const
+    {
+        typedef impl::default_case<self_t> default_t;
+
+        if (!scan.at_end()) {
+            typedef impl::default_delegate_parse<
+                value, is_default, default_t::value> default_parse_t;
+
+            typename ScannerT::iterator_t const save(scan.first);
+            return default_parse_t::parse(cond(scan), *this,
+                *this, scan, save);
+        }
+
+        return default_t::is_epsilon ? scan.empty_match() : scan.no_match();
+    }
+
+    template <int N1, typename ParserT1, bool IsDefault1>
+    impl::compound_case_parser<
+        self_t, case_parser<N1, ParserT1, IsDefault1>, IsDefault1
+    >
+    operator, (case_parser<N1, ParserT1, IsDefault1> const &p) const
+    {
+        //  If the following compile time assertion fires, you've probably used
+        //  more than one default_p case inside the switch_p parser construct.
+        BOOST_STATIC_ASSERT(!is_default || !IsDefault1);
+
+        typedef case_parser<N1, ParserT1, IsDefault1> right_t;
+        return impl::compound_case_parser<self_t, right_t, IsDefault1>(*this, p);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+struct switch_parser_gen {
+
+//  This generates a switch parser, which is driven by the condition value
+//  returned by the lazy parameter expression 'cond'. This may be a parser,
+//  which result is used or a phoenix actor, which will be dereferenced to
+//  obtain the switch condition value.
+    template <typename CondT>
+    switch_cond_parser<CondT>
+    operator()(CondT const &cond) const
+    {
+        return switch_cond_parser<CondT>(cond);
+    }
+
+//  This generates a switch parser, which is driven by the next character/token
+//  found in the input stream.
+    template <typename CaseT>
+    switch_parser<CaseT>
+    operator[](parser<CaseT> const &p) const
+    {
+        return switch_parser<CaseT>(p.derived());
+    }
+};
+
+switch_parser_gen const switch_p = switch_parser_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ParserT>
+inline case_parser<N, ParserT, false>
+case_p(parser<ParserT> const &p)
+{
+    return case_parser<N, ParserT, false>(p);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+struct default_parser_gen
+:   public case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
+{
+    default_parser_gen()
+    :   case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
+            (epsilon_p)
+    {}
+
+    template <typename ParserT>
+    case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>
+    operator()(parser<ParserT> const &p) const
+    {
+        return case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>(p);
+    }
+};
+
+default_parser_gen const default_p = default_parser_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}}  // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_SWITCH_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/typeof.hpp
new file mode 100644 (file)
index 0000000..7ed99c6
--- /dev/null
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP)
+#define BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/typeof.hpp>
+
+#include <boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // if.hpp
+    template <class ParsableT, typename CondT> struct if_parser;
+    template <class ParsableTrueT, class ParsableFalseT, typename CondT>
+    struct if_else_parser;
+
+    // for.hpp
+    namespace impl {
+    template<typename InitF, typename CondT, typename StepF, class ParsableT>
+    struct for_parser;
+    }
+
+    // while.hpp
+    template<typename ParsableT, typename CondT, bool is_do_parser>
+    struct while_parser;
+
+    // lazy.hpp
+    template<typename ActorT> struct lazy_parser;
+
+    // rule_alias.hpp
+    template <typename ParserT> class rule_alias; 
+
+    // switch.hpp
+    template <typename CaseT, typename CondT>       struct switch_parser;
+    template <int N, class ParserT, bool IsDefault> struct case_parser;
+
+    // select.hpp
+    template <typename TupleT, typename BehaviourT, typename T> 
+    struct select_parser;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+// if.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::if_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::if_else_parser,3)
+
+// for.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::impl::for_parser,4)
+
+// while.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::while_parser,(class)(class)(bool))
+
+// lazy.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::lazy_parser,1)
+
+// stored_rule.hpp (has forward header)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,(typename)(typename)(typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::stored_rule<>)
+
+// rule_alias.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::rule_alias,1)
+
+// switch.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::switch_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::case_parser,(int)(class)(bool))
+
+// select.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::select_parser,3)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/while.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/dynamic/while.hpp
new file mode 100644 (file)
index 0000000..e441e9c
--- /dev/null
@@ -0,0 +1,189 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_WHILE_HPP
+#define BOOST_SPIRIT_WHILE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/dynamic/impl/conditions.ipp>
+
+////////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+
+    //////////////////////////////////
+    // while parser
+    // object are created by while_parser_gen and do_parser_gen
+    template <typename ParsableT, typename CondT, bool is_do_parser>
+    struct while_parser
+        : public condition_evaluator< typename as_parser<CondT>::type >
+        , public unary // the parent stores a copy of the body parser
+        <
+            typename as_parser<ParsableT>::type,
+            parser<while_parser<ParsableT, CondT, is_do_parser> >
+        >
+    {
+        typedef while_parser<ParsableT, CondT, is_do_parser> self_t;
+
+        typedef as_parser<ParsableT>            as_parser_t;
+        typedef typename as_parser_t::type      parser_t;
+        typedef as_parser<CondT>                cond_as_parser_t;
+        typedef typename cond_as_parser_t::type condition_t;
+
+        typedef unary<parser_t, parser<self_t> > base_t;
+        typedef condition_evaluator<condition_t> eval_t;
+
+
+        //////////////////////////////
+        // constructor, saves condition and body parser
+        while_parser(ParsableT const &body, CondT const &cond)
+            : eval_t(cond_as_parser_t::convert(cond))
+            , base_t(as_parser_t::convert(body))
+        {}
+
+        //////////////////////////////
+        // result type computer.
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result
+                <ScannerT, nil_t>::type type;
+        };
+
+        //////////////////////////////
+        // parse member function
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<parser_t, ScannerT>::type sresult_t;
+            typedef typename ScannerT::iterator_t                    iterator_t;
+
+            iterator_t save(scan.first);
+            std::size_t length = 0;
+            int eval_length = 0;
+
+            bool dont_check_condition = is_do_parser;
+
+            while (dont_check_condition || (eval_length=this->evaluate(scan))>=0)
+            {
+                dont_check_condition = false;
+                length += eval_length;
+                sresult_t tmp(this->subject().parse(scan));
+                if (tmp)
+                {
+                    length+=tmp.length();
+                }
+                else
+                {
+                    return scan.no_match();
+                }
+            }
+            return scan.create_match(length, nil_t(), save, scan.first);
+        }
+    };
+
+    //////////////////////////////////
+    // while-parser generator, takes the body-parser in brackets
+    // and returns the actual while-parser.
+    template <typename CondT>
+    struct while_parser_gen
+    {
+        //////////////////////////////
+        // constructor, saves the condition for use by operator[]
+        while_parser_gen(CondT const& cond_) : cond(cond_) {}
+
+        //////////////////////////////
+        // operator[] returns the actual while-parser object
+        template <typename ParsableT>
+        while_parser<ParsableT, CondT, false>
+        operator[](ParsableT const &subject) const
+        {
+            return while_parser<ParsableT, CondT, false>(subject, cond);
+        }
+    private:
+
+        //////////////////////////////
+        // the condition is stored by reference here.
+        // this should not cause any harm since object of type
+        // while_parser_gen<> are only used as temporaries
+        // the while-parser object constructed by the operator[]
+        // stores a copy of the condition.
+        CondT const &cond;
+    };
+
+    //////////////////////////////////
+    // do-while-parser generator, takes the condition as
+    // parameter to while_p member function and returns the
+    // actual do-while-parser.
+    template <typename ParsableT>
+    struct do_while_parser_gen
+    {
+        //////////////////////////////
+        // constructor. saves the body parser for use by while_p.
+        explicit do_while_parser_gen(ParsableT const &body_parser)
+            : body(body_parser)
+        {}
+
+        //////////////////////////////
+        // while_p returns the actual while-parser object
+        template <typename CondT>
+        while_parser<ParsableT, CondT, true>
+        while_p(CondT cond) const
+        {
+            return while_parser<ParsableT, CondT, true>(body, cond);
+        }
+    private:
+
+        //////////////////////////////
+        // the body is stored by reference here
+        // this should not cause any harm since object of type
+        // do_while_parser_gen<> are only used as temporaries
+        // the while-parser object constructed by the while_p
+        // member function stores a copy of the body parser.
+        ParsableT const &body;
+    };
+
+    struct do_parser_gen
+    {
+        inline do_parser_gen() {}
+
+        template <typename ParsableT>
+        impl::do_while_parser_gen<ParsableT>
+        operator[](ParsableT const& body) const
+        {
+            return impl::do_while_parser_gen<ParsableT>(body);
+        }
+    };
+} // namespace impl
+
+//////////////////////////////////
+// while_p function, while-parser generator
+// Usage: spirit::while_p(Condition)[Body]
+template <typename CondT>
+impl::while_parser_gen<CondT>
+while_p(CondT const& cond)
+{
+    return impl::while_parser_gen<CondT>(cond);
+}
+
+//////////////////////////////////
+// do_p functor, do-while-parser generator
+// Usage: spirit::do_p[Body].while_p(Condition)
+impl::do_parser_gen const do_p = impl::do_parser_gen();
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_WHILE_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling.hpp
new file mode 100644 (file)
index 0000000..72c5d2c
--- /dev/null
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
+#define BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.ErrorHandling
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/home/classic/error_handling/exceptions.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions.hpp
new file mode 100644 (file)
index 0000000..c2e0c86
--- /dev/null
@@ -0,0 +1,365 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EXCEPTIONS_HPP
+#define BOOST_SPIRIT_EXCEPTIONS_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <exception>
+
+#include <boost/spirit/home/classic/error_handling/exceptions_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_error_base class
+    //
+    //      This is the base class of parser_error (see below). This may be
+    //      used to catch any type of parser error.
+    //
+    //      This exception shouldn't propagate outside the parser. However to
+    //      avoid quirks of many platforms/implementations which fall outside
+    //      the C++ standard, we derive parser_error_base from std::exception
+    //      to allow a single catch handler to catch all exceptions.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    class parser_error_base : public std::exception
+    {
+    protected:
+
+        parser_error_base() {}
+        virtual ~parser_error_base() throw() {}
+
+    public:
+
+        parser_error_base(parser_error_base const& rhs)
+            : std::exception(rhs) {}
+        parser_error_base& operator=(parser_error_base const&)
+        {
+            return *this;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  parser_error class
+    //
+    //      Generic parser exception class. This is the base class for all
+    //      parser exceptions. The exception holds the iterator position
+    //      where the error was encountered in its member variable "where".
+    //      The parser_error also holds information regarding the error
+    //      (error descriptor) in its member variable "descriptor".
+    //
+    //      The throw_ function creates and throws a parser_error given
+    //      an iterator and an error descriptor.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ErrorDescrT, typename IteratorT>
+    struct parser_error : public parser_error_base
+    {
+        typedef ErrorDescrT error_descr_t;
+        typedef IteratorT iterator_t;
+
+        parser_error(IteratorT where_, ErrorDescrT descriptor_)
+        : where(where_), descriptor(descriptor_) {}
+
+        parser_error(parser_error const& rhs)
+        : parser_error_base(rhs)
+        , where(rhs.where), descriptor(rhs.descriptor) {}
+
+        parser_error&
+        operator=(parser_error const& rhs)
+        {
+            where = rhs.where;
+            descriptor = rhs.descriptor;
+            return *this;
+        }
+
+        virtual
+        ~parser_error() throw() {}
+
+        virtual const char*
+        what() const throw()
+        {
+            return "BOOST_SPIRIT_CLASSIC_NS::parser_error";
+        }
+
+        IteratorT where;
+        ErrorDescrT descriptor;
+    };
+
+    //////////////////////////////////
+    template <typename ErrorDescrT, typename IteratorT>
+    inline void
+    throw_(IteratorT where, ErrorDescrT descriptor)
+    {
+         boost::throw_exception(
+            parser_error<ErrorDescrT, IteratorT>(where, descriptor));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  assertive_parser class
+    //
+    //      An assertive_parser class is a parser that throws an exception
+    //      in response to a parsing failure. The assertive_parser throws a
+    //      parser_error exception rather than returning an unsuccessful
+    //      match to signal that the parser failed to match the input.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ErrorDescrT, typename ParserT>
+    struct assertive_parser
+    :   public unary<ParserT, parser<assertive_parser<ErrorDescrT, ParserT> > >
+    {
+        typedef assertive_parser<ErrorDescrT, ParserT>  self_t;
+        typedef unary<ParserT, parser<self_t> >         base_t;
+        typedef unary_parser_category                   parser_category_t;
+
+        assertive_parser(ParserT const& parser, ErrorDescrT descriptor_)
+        : base_t(parser), descriptor(descriptor_) {}
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type result_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+
+            result_t hit = this->subject().parse(scan);
+            if (!hit)
+            {
+                throw_(scan.first, descriptor);
+            }
+            return hit;
+        }
+
+        ErrorDescrT descriptor;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  assertion class
+    //
+    //      assertive_parsers are never instantiated directly. The assertion
+    //      class is used to indirectly create an assertive_parser object.
+    //      Before declaring the grammar, we declare some assertion objects.
+    //      Examples:
+    //
+    //          enum Errors
+    //          {
+    //              program_expected, begin_expected, end_expected
+    //          };
+    //
+    //          assertion<Errors>   expect_program(program_expected);
+    //          assertion<Errors>   expect_begin(begin_expected);
+    //          assertion<Errors>   expect_end(end_expected);
+    //
+    //      Now, we can use these assertions as wrappers around parsers:
+    //
+    //          expect_end(str_p("end"))
+    //
+    //      Take note that although the example uses enums to hold the
+    //      information regarding the error (error desccriptor), we are free
+    //      to use other types such as integers and strings. Enums are
+    //      convenient for error handlers to easily catch since C++ treats
+    //      enums as unique types.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ErrorDescrT>
+    struct assertion
+    {
+        assertion(ErrorDescrT descriptor_)
+        : descriptor(descriptor_) {}
+
+        template <typename ParserT>
+        assertive_parser<ErrorDescrT, ParserT>
+        operator()(ParserT const& parser) const
+        {
+            return assertive_parser<ErrorDescrT, ParserT>(parser, descriptor);
+        }
+
+        ErrorDescrT descriptor;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  error_status<T>
+    //
+    //      Where T is an attribute type compatible with the match attribute
+    //      of the fallback_parser's subject (defaults to nil_t). The class
+    //      error_status reports the result of an error handler (see
+    //      fallback_parser). result can be one of:
+    //
+    //          fail:       quit and fail (return a no_match)
+    //          retry:      attempt error recovery, possibly moving the scanner
+    //          accept:     force success returning a matching length, moving
+    //                      the scanner appropriately and returning an attribute
+    //                      value
+    //          rethrow:    rethrows the error.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct error_status
+    {
+        enum result_t { fail, retry, accept, rethrow };
+
+        error_status(
+            result_t result_ = fail,
+            std::ptrdiff_t length_ = -1,
+            T const& value_ = T())
+        : result(result_), length(length_), value(value_) {}
+
+        result_t        result;
+        std::ptrdiff_t  length;
+        T               value;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  fallback_parser class
+    //
+    //      Handles exceptions of type parser_error<ErrorDescrT, IteratorT>
+    //      thrown somewhere inside its embedded ParserT object. The class
+    //      sets up a try block before delegating parsing to its subject.
+    //      When an exception is caught, the catch block then calls the
+    //      HandlerT object. HandlerT may be a function or a functor (with
+    //      an operator() member function) compatible with the interface:
+    //
+    //          error_status<T>
+    //          handler(ScannerT const& scan, ErrorT error);
+    //
+    //      Where scan points to the scanner state prior to parsing and error
+    //      is the error that arose (see parser_error). The handler must
+    //      return an error_status<T> object (see above).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        template <typename RT, typename ParserT, typename ScannerT>
+        RT fallback_parser_parse(ParserT const& p, ScannerT const& scan);
+    }
+
+    template <typename ErrorDescrT, typename ParserT, typename HandlerT>
+    struct fallback_parser
+    :   public unary<ParserT,
+        parser<fallback_parser<ErrorDescrT, ParserT, HandlerT> > >
+    {
+        typedef fallback_parser<ErrorDescrT, ParserT, HandlerT>
+            self_t;
+        typedef ErrorDescrT
+            error_descr_t;
+        typedef unary<ParserT, parser<self_t> >
+            base_t;
+        typedef unary_parser_category
+            parser_category_t;
+
+        fallback_parser(ParserT const& parser, HandlerT const& handler_)
+        : base_t(parser), handler(handler_) {}
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            return impl::fallback_parser_parse<result_t>(*this, scan);
+        }
+
+        HandlerT handler;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  guard class
+    //
+    //      fallback_parser objects are not instantiated directly. The guard
+    //      class is used to indirectly create a fallback_parser object.
+    //      guards are typically predeclared just like assertions (see the
+    //      assertion class above; the example extends the previous example
+    //      introduced in the assertion class above):
+    //
+    //          guard<Errors>   my_guard;
+    //
+    //      Errors, in this example is the error descriptor type we want to
+    //      detect; This is essentially the ErrorDescrT template parameter
+    //      of the fallback_parser class.
+    //
+    //      my_guard may now be used in a grammar declaration as:
+    //
+    //          my_guard(p)[h]
+    //
+    //      where p is a parser, h is a function or functor compatible with
+    //      fallback_parser's HandlerT (see above).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ErrorDescrT, typename ParserT>
+    struct guard_gen : public unary<ParserT, nil_t>
+    {
+        typedef guard<ErrorDescrT>      parser_generator_t;
+        typedef unary_parser_category   parser_category_t;
+
+        guard_gen(ParserT const& p)
+        : unary<ParserT, nil_t>(p) {}
+
+        template <typename HandlerT>
+        fallback_parser<ErrorDescrT, ParserT, HandlerT>
+        operator[](HandlerT const& handler) const
+        {
+            return fallback_parser<ErrorDescrT, ParserT, HandlerT>
+                (this->subject(), handler);
+        }
+    };
+
+    template <typename ErrorDescrT>
+    struct guard
+    {
+        template <typename ParserT>
+        struct result
+        {
+            typedef guard_gen<ErrorDescrT, ParserT> type;
+        };
+
+        template <typename ParserT>
+        static guard_gen<ErrorDescrT, ParserT>
+        generate(ParserT const& parser)
+        {
+            return guard_gen<ErrorDescrT, ParserT>(parser);
+        }
+
+        template <typename ParserT>
+        guard_gen<ErrorDescrT, ParserT>
+        operator()(ParserT const& parser) const
+        {
+            return guard_gen<ErrorDescrT, ParserT>(parser);
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include <boost/spirit/home/classic/error_handling/impl/exceptions.ipp>
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/exceptions_fwd.hpp
new file mode 100644 (file)
index 0000000..a8c132c
--- /dev/null
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCEPTIONS_FWD_HPP)
+#define BOOST_SPIRIT_EXCEPTIONS_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename ErrorDescrT, typename IteratorT = char const*>
+    struct parser_error;
+
+    template <typename ErrorDescrT, typename ParserT>
+    struct assertive_parser;
+
+    template <typename ErrorDescrT>
+    struct assertion;
+
+    template <typename T = nil_t>
+    struct error_status;
+
+    template <typename ErrorDescrT, typename ParserT, typename HandlerT>
+    struct fallback_parser;
+
+    template <typename ErrorDescrT>
+    struct guard;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/impl/exceptions.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/impl/exceptions.ipp
new file mode 100644 (file)
index 0000000..1cc63e7
--- /dev/null
@@ -0,0 +1,93 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EXCEPTIONS_IPP
+#define BOOST_SPIRIT_EXCEPTIONS_IPP
+
+namespace boost { namespace spirit { 
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl {
+
+#ifdef __BORLANDC__
+    template <typename ParserT, typename ScannerT>
+    typename parser_result<ParserT, ScannerT>::type
+    fallback_parser_helper(ParserT const& subject, ScannerT const& scan);
+#endif
+
+    template <typename RT, typename ParserT, typename ScannerT>
+    RT fallback_parser_parse(ParserT const& p, ScannerT const& scan)
+    {
+        typedef typename ScannerT::iterator_t iterator_t;
+        typedef typename RT::attr_t attr_t;
+        typedef error_status<attr_t> error_status_t;
+        typedef typename ParserT::error_descr_t error_descr_t;
+
+        iterator_t save = scan.first;
+        error_status_t hr(error_status_t::retry);
+
+        while (hr.result == error_status_t::retry)
+        {
+            try
+            {
+            #ifndef __BORLANDC__
+                return p.subject().parse(scan);
+            #else
+                return impl::fallback_parser_helper(p, scan);
+            #endif
+            }
+
+            catch (parser_error<error_descr_t, iterator_t>& error)
+            {
+                scan.first = save;
+                hr = p.handler(scan, error);
+                switch (hr.result)
+                {
+                    case error_status_t::fail:
+                        return scan.no_match();
+                    case error_status_t::accept:
+                        return scan.create_match
+                            (std::size_t(hr.length), hr.value, save, scan.first);
+                    case error_status_t::rethrow:
+                         boost::throw_exception(error);
+                    default:
+                        continue;
+                }
+            }
+        }
+        return scan.no_match();
+    }
+
+///////////////////////////////////////////////////////////////////////////
+//
+//  Borland does not like calling the subject directly in the try block.
+//  Removing the #ifdef __BORLANDC__ code makes Borland complain that
+//  some variables and types cannot be found in the catch block. Weird!
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef __BORLANDC__
+
+    template <typename ParserT, typename ScannerT>
+    typename parser_result<ParserT, ScannerT>::type
+    fallback_parser_helper(ParserT const& p, ScannerT const& scan)
+    {
+        return p.subject().parse(scan);
+    }
+
+#endif
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit::impl
+
+///////////////////////////////////////////////////////////////////////////////
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/error_handling/typeof.hpp
new file mode 100644 (file)
index 0000000..9e31cce
--- /dev/null
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP)
+#define BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/core/typeof.hpp>
+
+#include <boost/spirit/home/classic/error_handling/exceptions_fwd.hpp>
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// exceptions.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_error,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::assertive_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::error_status,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fallback_parser,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::guard,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::error_status<>)
+
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator.hpp
new file mode 100644 (file)
index 0000000..fb2b68f
--- /dev/null
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2003 Giovanni Bajo
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
+#define BOOST_SPIRIT_ITERATOR_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Iterators
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/home/classic/iterator/file_iterator.hpp>
+#include <boost/spirit/home/classic/iterator/fixed_size_queue.hpp>
+#include <boost/spirit/home/classic/iterator/position_iterator.hpp>
+#include <boost/spirit/home/classic/iterator/multi_pass.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator.hpp
new file mode 100644 (file)
index 0000000..5c20f15
--- /dev/null
@@ -0,0 +1,229 @@
+/*=============================================================================
+    Copyright (c) 2003 Giovanni Bajo
+    Copyright (c) 2003 Thomas Witt
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File Iterator structure
+//
+//  The new structure is designed on layers. The top class (used by the user)
+//  is file_iterator, which implements a full random access iterator through
+//  the file, and some specific member functions (constructor that opens
+//  the file, make_end() to generate the end iterator, operator bool to check
+//  if the file was opened correctly).
+//
+//  file_iterator implements the random access iterator interface by the means
+//  of boost::iterator_adaptor, that is inhering an object created with it.
+//  iterator_adaptor gets a low-level file iterator implementation (with just
+//  a few member functions) and a policy (that basically describes to it how
+//  the low-level file iterator interface is). The advantage is that
+//  with boost::iterator_adaptor only 5 functions are needed to implement
+//  a fully conformant random access iterator, instead of dozens of functions
+//  and operators.
+//
+//  There are two low-level file iterators implemented in this module. The
+//  first (std_file_iterator) uses cstdio stream functions (fopen/fread), which
+//  support full buffering, and is available everywhere (it's standard C++).
+//  The second (mmap_file_iterator) is currently available only on Windows
+//  platforms, and uses memory mapped files, which gives a decent speed boost.
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+//  TODO LIST:
+//
+//  - In the Win32 mmap iterator, we could check if keeping a handle to the
+//    opened file is really required. If it's not, we can just store the file
+//    length (for make_end()) and save performance. Notice that this should be
+//    tested under different Windows versions, the behaviour might change.
+//  - Add some error support (by the means of some exceptions) in case of
+//    low-level I/O failure.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_SPIRIT_FILE_ITERATOR_HPP
+#define BOOST_SPIRIT_FILE_ITERATOR_HPP
+
+#include <string>
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/safe_bool.hpp>
+
+#include <boost/spirit/home/classic/iterator/file_iterator_fwd.hpp>
+
+#if !defined(BOOST_SPIRIT_FILEITERATOR_STD)
+#  if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \
+      && !defined(BOOST_DISABLE_WIN32)
+#    define BOOST_SPIRIT_FILEITERATOR_WINDOWS
+#  elif defined(BOOST_HAS_UNISTD_H)
+extern "C"
+{
+#    include <unistd.h>
+}
+#    ifdef _POSIX_MAPPED_FILES
+#      define BOOST_SPIRIT_FILEITERATOR_POSIX
+#    endif // _POSIX_MAPPED_FILES
+#  endif // BOOST_HAS_UNISTD_H
+
+#  if !defined(BOOST_SPIRIT_FILEITERATOR_WINDOWS) && \
+      !defined(BOOST_SPIRIT_FILEITERATOR_POSIX)
+#    define BOOST_SPIRIT_FILEITERATOR_STD
+#  endif
+#endif // BOOST_SPIRIT_FILEITERATOR_STD
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+template <
+    typename CharT = char,
+    typename BaseIterator =
+#ifdef BOOST_SPIRIT_FILEITERATOR_STD
+        fileiter_impl::std_file_iterator<CharT>
+#else
+        fileiter_impl::mmap_file_iterator<CharT>
+#endif
+> class file_iterator;
+
+///////////////////////////////////////////////////////////////////////////////
+namespace fileiter_impl {
+
+    /////////////////////////////////////////////////////////////////////////
+    //
+    //  file_iter_generator
+    //
+    //  Template meta-function to invoke boost::iterator_adaptor
+    //  NOTE: This cannot be moved into the implementation file because of
+    //  a bug of MSVC 7.0 and previous versions (base classes types are
+    //  looked up at compilation time, not instantion types, and
+    //  file_iterator would break).
+    //
+    /////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+     BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the file_iterator class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+    template <typename CharT, typename BaseIteratorT>
+    struct file_iter_generator
+    {
+    public:
+        typedef BaseIteratorT adapted_t;
+        typedef typename adapted_t::value_type value_type;
+
+        typedef boost::iterator_adaptor <
+            file_iterator<CharT, BaseIteratorT>,
+            adapted_t,
+            value_type const,
+            std::random_access_iterator_tag,
+            boost::use_default,
+            std::ptrdiff_t
+        > type;
+    };
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace impl */
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  file_iterator
+//
+//  Iterates through an opened file.
+//
+//  The main iterator interface is implemented by the iterator_adaptors
+//  library, which wraps a conforming iterator interface around the
+//  impl::BaseIterator class. This class merely derives the iterator_adaptors
+//  generated class to implement the custom constructors and make_end()
+//  member function.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename CharT, typename BaseIteratorT>
+class file_iterator
+    : public fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type,
+      public safe_bool<file_iterator<CharT, BaseIteratorT> >
+{
+private:
+    typedef typename
+        fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type
+        base_t;
+    typedef typename
+        fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::adapted_t
+        adapted_t;
+
+public:
+    file_iterator()
+    {}
+
+    file_iterator(std::string const& fileName)
+    :   base_t(adapted_t(fileName))
+    {}
+
+    file_iterator(const base_t& iter)
+    :   base_t(iter)
+    {}
+
+    inline file_iterator& operator=(const base_t& iter);
+    file_iterator make_end(void);
+
+    // operator bool. This borrows a trick from boost::shared_ptr to avoid
+    //   to interfere with arithmetic operations.
+    bool operator_bool(void) const
+    { return this->base(); }
+
+private:
+    friend class ::boost::iterator_core_access;
+
+    typename base_t::reference dereference() const
+    {
+        return this->base_reference().get_cur_char();
+    }
+
+    void increment()
+    {
+        this->base_reference().next_char();
+    }
+
+    void decrement()
+    {
+        this->base_reference().prev_char();
+    }
+
+    void advance(typename base_t::difference_type n)
+    {
+        this->base_reference().advance(n);
+    }
+
+    template <
+        typename OtherDerivedT, typename OtherIteratorT,
+        typename V, typename C, typename R, typename D
+    >
+    typename base_t::difference_type distance_to(
+        iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+        const &x) const
+    {
+        return x.base().distance(this->base_reference());
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} /* namespace BOOST_SPIRIT_CLASSIC_NS */
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/iterator/impl/file_iterator.ipp> /* implementation */
+
+#endif /* BOOST_SPIRIT_FILE_ITERATOR_HPP */
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/file_iterator_fwd.hpp
new file mode 100644 (file)
index 0000000..fb732d5
--- /dev/null
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP)
+#define BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace fileiter_impl 
+    {
+        template <typename CharT = char>
+        class std_file_iterator;
+
+        // may never be defined -- so what...
+        template <typename CharT = char>
+        class mmap_file_iterator;
+    } 
+
+    // no defaults here -- too much dependencies
+    template <
+        typename CharT,
+        typename BaseIterator
+    > class file_iterator;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/fixed_size_queue.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/fixed_size_queue.hpp
new file mode 100644 (file)
index 0000000..6efbf4c
--- /dev/null
@@ -0,0 +1,402 @@
+/*=============================================================================
+    Copyright (c) 2001, Daniel C. Nuffer
+    Copyright (c) 2003, Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef FIXED_SIZE_QUEUE
+#define FIXED_SIZE_QUEUE
+
+#include <cstdlib>
+#include <iterator>
+#include <cstddef>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+
+// FIXES for broken compilers
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+
+#define BOOST_SPIRIT_ASSERT_FSQ_SIZE \
+    BOOST_SPIRIT_ASSERT(((m_tail + N + 1) - m_head) % (N+1) == m_size % (N+1)) \
+    /**/
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+    BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the fixed_size_queue class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+template <typename QueueT, typename T, typename PointerT>
+class fsq_iterator
+:   public boost::iterator_adaptor<
+        fsq_iterator<QueueT, T, PointerT>, 
+        PointerT,
+        T,
+        std::random_access_iterator_tag
+    >
+{
+public:
+    typedef typename QueueT::position_t position;
+    typedef boost::iterator_adaptor<
+            fsq_iterator<QueueT, T, PointerT>, PointerT, T,
+            std::random_access_iterator_tag
+        > base_t;
+
+    fsq_iterator() {}
+    fsq_iterator(position const &p_) : p(p_) {}
+    
+    position const &get_position() const { return p; }
+    
+private:
+    friend class boost::iterator_core_access;
+    
+    typename base_t::reference dereference() const
+    {
+        return p.self->m_queue[p.pos];
+    }
+
+    void increment()
+    {
+        ++p.pos;
+        if (p.pos == QueueT::MAX_SIZE+1)
+            p.pos = 0;
+    }
+
+    void decrement()
+    {
+        if (p.pos == 0)
+            p.pos = QueueT::MAX_SIZE;
+        else
+            --p.pos;
+    }
+
+    template <
+        typename OtherDerivedT, typename OtherIteratorT, 
+        typename V, typename C, typename R, typename D
+    >   
+    bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D> 
+        const &x) const
+    {
+        position const &rhs_pos = 
+            static_cast<OtherDerivedT const &>(x).get_position();
+        return (p.self == rhs_pos.self) && (p.pos == rhs_pos.pos);
+    }
+
+    template <
+        typename OtherDerivedT, typename OtherIteratorT, 
+        typename V, typename C, typename R, typename D
+    >   
+    typename base_t::difference_type distance_to(
+        iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D> 
+        const &x) const
+    {
+        typedef typename base_t::difference_type diff_t;
+
+        position const &p2 = 
+            static_cast<OtherDerivedT const &>(x).get_position();
+        std::size_t pos1 = p.pos;
+        std::size_t pos2 = p2.pos;
+
+        // Undefined behaviour if the iterators come from different
+        //  containers
+        BOOST_SPIRIT_ASSERT(p.self == p2.self);
+
+        if (pos1 < p.self->m_head)
+            pos1 += QueueT::MAX_SIZE;
+        if (pos2 < p2.self->m_head)
+            pos2 += QueueT::MAX_SIZE;
+
+        if (pos2 > pos1)
+            return diff_t(pos2 - pos1);
+        else
+            return -diff_t(pos1 - pos2);
+    }
+
+    void advance(typename base_t::difference_type n)
+    {
+        // Notice that we don't care values of n that can
+        //  wrap around more than one time, since it would
+        //  be undefined behaviour anyway (going outside
+        //  the begin/end range). Negative wrapping is a bit
+        //  cumbersome because we don't want to case p.pos
+        //  to signed.
+        if (n < 0)
+        {
+            n = -n;
+            if (p.pos < (std::size_t)n)
+                p.pos = QueueT::MAX_SIZE+1 - (n - p.pos);
+            else
+                p.pos -= n;
+        }
+        else
+        {
+            p.pos += n;
+            if (p.pos >= QueueT::MAX_SIZE+1)
+                p.pos -= QueueT::MAX_SIZE+1;
+        }
+    }
+    
+private:
+    position p;
+};
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace impl */
+
+template <typename T, std::size_t N>
+class fixed_size_queue
+{
+private:
+    struct position
+    {
+        fixed_size_queue* self;
+        std::size_t pos;
+
+        position() : self(0), pos(0) {}
+
+        // The const_cast here is just to avoid to have two different
+        //  position structures for the const and non-const case.
+        // The const semantic is guaranteed by the iterator itself
+        position(const fixed_size_queue* s, std::size_t p)
+            : self(const_cast<fixed_size_queue*>(s)), pos(p)
+        {}
+    };
+
+public:
+    // Declare the iterators
+    typedef impl::fsq_iterator<fixed_size_queue<T, N>, T, T*> iterator;
+    typedef impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*> 
+        const_iterator;
+    typedef position position_t;
+
+    friend class impl::fsq_iterator<fixed_size_queue<T, N>, T, T*>;
+    friend class impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*>;
+    
+    fixed_size_queue();
+    fixed_size_queue(const fixed_size_queue& x);
+    fixed_size_queue& operator=(const fixed_size_queue& x);
+    ~fixed_size_queue();
+
+    void push_back(const T& e);
+    void push_front(const T& e);
+    void serve(T& e);
+    void pop_front();
+
+    bool empty() const
+    {
+        return m_size == 0;
+    }
+
+    bool full() const
+    {
+        return m_size == N;
+    }
+
+    iterator begin()
+    {
+        return iterator(position(this, m_head));
+    }
+
+    const_iterator begin() const
+    {
+        return const_iterator(position(this, m_head));
+    }
+
+    iterator end()
+    {
+        return iterator(position(this, m_tail));
+    }
+
+    const_iterator end() const
+    {
+        return const_iterator(position(this, m_tail));
+    }
+
+    std::size_t size() const
+    {
+        return m_size;
+    }
+
+    T& front()
+    {
+        return m_queue[m_head];
+    }
+
+    const T& front() const
+    {
+        return m_queue[m_head];
+    }
+
+private:
+    // Redefine the template parameters to avoid using partial template
+    //  specialization on the iterator policy to extract N.
+    BOOST_STATIC_CONSTANT(std::size_t, MAX_SIZE = N);
+
+    std::size_t m_head;
+    std::size_t m_tail;
+    std::size_t m_size;
+    T m_queue[N+1];
+};
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::fixed_size_queue()
+    : m_head(0)
+    , m_tail(0)
+    , m_size(0)
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::fixed_size_queue(const fixed_size_queue& x)
+    : m_head(x.m_head)
+    , m_tail(x.m_tail)
+    , m_size(x.m_size)
+{
+    copy(x.begin(), x.end(), begin());
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline fixed_size_queue<T, N>&
+fixed_size_queue<T, N>::operator=(const fixed_size_queue& x)
+{
+    if (this != &x)
+    {
+        m_head = x.m_head;
+        m_tail = x.m_tail;
+        m_size = x.m_size;
+        copy(x.begin(), x.end(), begin());
+    }
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+    return *this;
+}
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::~fixed_size_queue()
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::push_back(const T& e)
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+    BOOST_SPIRIT_ASSERT(!full());
+
+    m_queue[m_tail] = e;
+    ++m_size;
+    ++m_tail;
+    if (m_tail == N+1)
+        m_tail = 0;
+
+
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::push_front(const T& e)
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+    BOOST_SPIRIT_ASSERT(!full());
+
+    if (m_head == 0)
+        m_head = N;
+    else
+        --m_head;
+
+    m_queue[m_head] = e;
+    ++m_size;
+
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::serve(T& e)
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+    e = m_queue[m_head];
+    pop_front();
+}
+
+
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::pop_front()
+{
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+    ++m_head;
+    if (m_head == N+1)
+        m_head = 0;
+    --m_size;
+
+    BOOST_SPIRIT_ASSERT(m_size <= N+1);
+    BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+    BOOST_SPIRIT_ASSERT(m_head <= N+1);
+    BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#undef BOOST_SPIRIT_ASSERT_FSQ_SIZE
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/file_iterator.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
new file mode 100644 (file)
index 0000000..0fb92c7
--- /dev/null
@@ -0,0 +1,463 @@
+/*=============================================================================
+    Copyright (c) 2003 Giovanni Bajo
+    Copyright (c) 2003 Martin Wille
+    Copyright (c) 2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#ifndef BOOST_SPIRIT_FILE_ITERATOR_IPP
+#define BOOST_SPIRIT_FILE_ITERATOR_IPP
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+#  include <windows.h>
+#endif
+
+#include <cstdio>
+#include <boost/shared_ptr.hpp>
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+#  include <boost/type_traits/remove_pointer.hpp>
+#endif
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_POSIX
+#  include <sys/types.h> // open, stat, mmap, munmap
+#  include <sys/stat.h>  // stat
+#  include <fcntl.h>     // open
+#  include <unistd.h>    // stat, mmap, munmap
+#  include <sys/mman.h>  // mmap, mmunmap
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+namespace fileiter_impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  std_file_iterator
+//
+//  Base class that implements iteration through a file using standard C
+//  stream library (fopen and friends). This class and the following are
+//  the base components on which the iterator is built (through the
+//  iterator adaptor library).
+//
+//  The opened file stream (FILE) is held with a shared_ptr<>, whose
+//  custom deleter invokes fcose(). This makes the syntax of the class
+//  very easy, especially everything related to copying.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename CharT>
+class std_file_iterator
+{
+public:
+    typedef CharT value_type;
+
+    std_file_iterator()
+    {}
+
+    explicit std_file_iterator(std::string const& fileName)
+    {
+        using namespace std;
+        FILE* f = fopen(fileName.c_str(), "rb");
+
+        // If the file was opened, store it into
+        //  the smart pointer.
+        if (f)
+        {
+            m_file.reset(f, fclose);
+            m_pos = 0;
+            m_eof = false;
+            update_char();
+        }
+    }
+
+    std_file_iterator(const std_file_iterator& iter)
+    { *this = iter; }
+
+    std_file_iterator& operator=(const std_file_iterator& iter)
+    {
+        m_file = iter.m_file;
+        m_curChar = iter.m_curChar;
+        m_eof = iter.m_eof;
+        m_pos = iter.m_pos;
+
+        return *this;
+    }
+
+    // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+    //  for shared_ptr to evaluate correctly
+    operator bool() const
+    { return m_file ? true : false; }
+
+    bool operator==(const std_file_iterator& iter) const
+    {
+        return (m_file == iter.m_file) && (m_eof == iter.m_eof) &&
+            (m_pos == iter.m_pos);
+    }
+
+    const CharT& get_cur_char(void) const
+    {
+        return m_curChar;
+    }
+
+    void prev_char(void)
+    {
+        m_pos -= sizeof(CharT);
+        update_char();
+    }
+
+    void next_char(void)
+    {
+        m_pos += sizeof(CharT);
+        update_char();
+    }
+
+    void seek_end(void)
+    {
+        using namespace std;
+        fseek(m_file.get(), 0, SEEK_END);
+        m_pos = ftell(m_file.get()) / sizeof(CharT);
+        m_eof = true;
+    }
+
+    void advance(std::ptrdiff_t n)
+    {
+        m_pos += n * sizeof(CharT);
+        update_char();
+    }
+
+    std::ptrdiff_t distance(const std_file_iterator& iter) const
+    {
+        return (std::ptrdiff_t)(m_pos - iter.m_pos) / sizeof(CharT);
+    }
+
+private:
+    boost::shared_ptr<std::FILE> m_file;
+    std::size_t m_pos;
+    CharT m_curChar;
+    bool m_eof;
+
+    void update_char(void)
+    {
+        using namespace std;
+        if ((std::size_t)ftell(m_file.get()) != m_pos)
+            fseek(m_file.get(), m_pos, SEEK_SET);
+
+        m_eof = (fread(&m_curChar, sizeof(CharT), 1, m_file.get()) < 1);
+    }
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  mmap_file_iterator
+//
+//  File iterator for memory mapped files, for now implemented on Windows and
+//  POSIX  platforms. This class has the same interface of std_file_iterator,
+//  and can be used in its place (in fact, it's the default for Windows and
+//  POSIX).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// mmap_file_iterator, Windows version
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+template <typename CharT>
+class mmap_file_iterator
+{
+public:
+    typedef CharT value_type;
+
+    mmap_file_iterator()
+      : m_filesize(0), m_curChar(0)
+    {}
+
+    explicit mmap_file_iterator(std::string const& fileName)
+      : m_filesize(0), m_curChar(0)
+    {
+        HANDLE hFile = ::CreateFileA(
+            fileName.c_str(),
+            GENERIC_READ,
+            FILE_SHARE_READ,
+            NULL,
+            OPEN_EXISTING,
+            FILE_FLAG_SEQUENTIAL_SCAN,
+            NULL
+        );
+
+        if (hFile == INVALID_HANDLE_VALUE)
+            return;
+
+        // Store the size of the file, it's used to construct
+        //  the end iterator
+        m_filesize = ::GetFileSize(hFile, NULL);
+
+        HANDLE hMap = ::CreateFileMapping(
+            hFile,
+            NULL,
+            PAGE_READONLY,
+            0, 0,
+            NULL
+        );
+
+        if (hMap == NULL)
+        {
+            ::CloseHandle(hFile);
+            return;
+        }
+
+        LPVOID pMem = ::MapViewOfFile(
+            hMap,
+            FILE_MAP_READ,
+            0, 0, 0
+        );
+
+        if (pMem == NULL)
+        {
+            ::CloseHandle(hMap);
+            ::CloseHandle(hFile);
+            return;
+        }
+
+        // We hold both the file handle and the memory pointer.
+        // We can close the hMap handle now because Windows holds internally
+        //  a reference to it since there is a view mapped.
+        ::CloseHandle(hMap);
+
+        // It seems like we can close the file handle as well (because
+        //  a reference is hold by the filemap object).
+        ::CloseHandle(hFile);
+
+        // Store the handles inside the shared_ptr (with the custom destructors)
+        m_mem.reset(static_cast<CharT*>(pMem), ::UnmapViewOfFile);
+
+        // Start of the file
+        m_curChar = m_mem.get();
+    }
+
+    mmap_file_iterator(const mmap_file_iterator& iter)
+    { *this = iter; }
+
+    mmap_file_iterator& operator=(const mmap_file_iterator& iter)
+    {
+        m_curChar = iter.m_curChar;
+        m_mem = iter.m_mem;
+        m_filesize = iter.m_filesize;
+
+        return *this;
+    }
+
+    // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+    //  for shared_ptr to evaluate correctly
+    operator bool() const
+    { return m_mem ? true : false; }
+
+    bool operator==(const mmap_file_iterator& iter) const
+    { return m_curChar == iter.m_curChar; }
+
+    const CharT& get_cur_char(void) const
+    { return *m_curChar; }
+
+    void next_char(void)
+    { m_curChar++; }
+
+    void prev_char(void)
+    { m_curChar--; }
+
+    void advance(std::ptrdiff_t n)
+    { m_curChar += n; }
+
+    std::ptrdiff_t distance(const mmap_file_iterator& iter) const
+    { return m_curChar - iter.m_curChar; }
+
+    void seek_end(void)
+    {
+        m_curChar = m_mem.get() +
+            (m_filesize / sizeof(CharT));
+    }
+
+private:
+    typedef boost::remove_pointer<HANDLE>::type handle_t;
+
+    boost::shared_ptr<CharT> m_mem;
+    std::size_t m_filesize;
+    CharT* m_curChar;
+};
+
+#endif // BOOST_SPIRIT_FILEITERATOR_WINDOWS
+
+///////////////////////////////////////////////////////////////////////////////
+// mmap_file_iterator, POSIX version
+#ifdef BOOST_SPIRIT_FILEITERATOR_POSIX
+template <typename CharT>
+class mmap_file_iterator
+{
+private:
+    struct mapping
+    {
+        mapping(void *p, off_t len)
+            : data(p)
+            , size(len)
+        { }
+
+        CharT const *begin() const
+        {
+            return static_cast<CharT *>(data);
+        }
+
+        CharT const *end() const
+        {
+            return static_cast<CharT *>(data) + size/sizeof(CharT);
+        }
+
+        ~mapping()
+        {
+            munmap(static_cast<char*>(data), size);
+        }
+
+    private:
+        void *data;
+        off_t size;
+    };
+
+public:
+    typedef CharT value_type;
+
+    mmap_file_iterator()
+      : m_curChar(0)
+    {}
+
+    explicit mmap_file_iterator(std::string const& file_name)
+      : m_curChar(0)
+    {
+        // open the file
+       int fd = open(file_name.c_str(),
+#ifdef O_NOCTTY
+            O_NOCTTY | // if stdin was closed then opening a file
+                       // would cause the file to become the controlling
+                       // terminal if the filename refers to a tty. Setting
+                       // O_NOCTTY inhibits this.
+#endif
+            O_RDONLY);
+
+        if (fd == -1)
+            return;
+
+        // call fstat to find get information about the file just
+        // opened (size and file type)
+        struct stat stat_buf;
+        if ((fstat(fd, &stat_buf) != 0) || !S_ISREG(stat_buf.st_mode))
+        {   // if fstat returns an error or if the file isn't a
+            // regular file we give up.
+            close(fd);
+            return;
+        }
+
+        // perform the actual mapping
+        void *p = mmap(0, stat_buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+        // it is safe to close() here. POSIX requires that the OS keeps a
+        // second handle to the file while the file is mmapped.
+        close(fd);
+
+        if (p == MAP_FAILED)
+            return;
+
+        mapping *m = 0;
+        try
+        {
+            m = new mapping(p, stat_buf.st_size);
+        }
+        catch(...)
+        {
+            munmap(static_cast<char*>(p), stat_buf.st_size);
+            throw;
+        }
+
+        m_mem.reset(m);
+
+        // Start of the file
+        m_curChar = m_mem->begin();
+    }
+
+    mmap_file_iterator(const mmap_file_iterator& iter)
+    { *this = iter; }
+
+    mmap_file_iterator& operator=(const mmap_file_iterator& iter)
+    {
+        m_curChar = iter.m_curChar;
+        m_mem = iter.m_mem;
+
+        return *this;
+    }
+
+    // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+    //  for shared_ptr to evaluate correctly
+    operator bool() const
+    { return m_mem ? true : false; }
+
+    bool operator==(const mmap_file_iterator& iter) const
+    { return m_curChar == iter.m_curChar; }
+
+    const CharT& get_cur_char(void) const
+    { return *m_curChar; }
+
+    void next_char(void)
+    { m_curChar++; }
+
+    void prev_char(void)
+    { m_curChar--; }
+
+    void advance(signed long n)
+    { m_curChar += n; }
+
+    long distance(const mmap_file_iterator& iter) const
+    { return m_curChar - iter.m_curChar; }
+
+    void seek_end(void)
+    {
+        m_curChar = m_mem->end();
+    }
+
+private:
+
+    boost::shared_ptr<mapping> m_mem;
+    CharT const* m_curChar;
+};
+
+#endif // BOOST_SPIRIT_FILEITERATOR_POSIX
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace boost::spirit::fileiter_impl */
+
+template <typename CharT, typename BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>::make_end(void)
+{
+    file_iterator iter(*this);
+    iter.base_reference().seek_end();
+    return iter;
+}
+
+template <typename CharT, typename BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>&
+file_iterator<CharT,BaseIteratorT>::operator=(const base_t& iter)
+{
+    base_t::operator=(iter);
+    return *this;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} /* namespace boost::spirit */
+
+
+#endif /* BOOST_SPIRIT_FILE_ITERATOR_IPP */
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/position_iterator.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/impl/position_iterator.ipp
new file mode 100644 (file)
index 0000000..d473af1
--- /dev/null
@@ -0,0 +1,138 @@
+/*=============================================================================
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002-2006 Hartmut Kaiser
+    Copyright (c) 2003 Giovanni Bajo
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef POSITION_ITERATOR_IPP
+#define POSITION_ITERATOR_IPP
+
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>  // for nil_t
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_policy<file_position_without_column>
+//
+//  Specialization to handle file_position_without_column. Only take care of
+//  newlines since no column tracking is needed.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+class position_policy<file_position_without_column_base<String> > {
+
+public:
+    void next_line(file_position_without_column_base<String>& pos)
+    {
+        ++pos.line;
+    }
+
+    void set_tab_chars(unsigned int /*chars*/){}
+    void next_char(file_position_without_column_base<String>& /*pos*/)    {}
+    void tabulation(file_position_without_column_base<String>& /*pos*/)   {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_policy<file_position>
+//
+//  Specialization to handle file_position. Track characters and tabulation
+//  to compute the current column correctly.
+//
+//  Default tab size is 4. You can change this with the set_tabchars member
+//  of position_iterator.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+class position_policy<file_position_base<String> > {
+
+public:
+    position_policy()
+        : m_CharsPerTab(4)
+    {}
+
+    void next_line(file_position_base<String>& pos)
+    {
+        ++pos.line;
+        pos.column = 1;
+    }
+
+    void set_tab_chars(unsigned int chars)
+    {
+        m_CharsPerTab = chars;
+    }
+
+    void next_char(file_position_base<String>& pos)
+    {
+        ++pos.column;
+    }
+
+    void tabulation(file_position_base<String>& pos)
+    {
+        pos.column += m_CharsPerTab - (pos.column - 1) % m_CharsPerTab;
+    }
+
+private:
+    unsigned int m_CharsPerTab;
+};
+
+/* namespace boost::spirit { */ namespace iterator_ { namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_iterator_base_generator
+//
+//  Metafunction to generate the iterator type using boost::iterator_adaptors,
+//  hiding all the metaprogramming thunking code in it. It is used
+//  mainly to keep the public interface (position_iterator) cleanear.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename MainIterT, typename ForwardIterT, typename PositionT>
+struct position_iterator_base_generator
+{
+private:
+    typedef boost::detail::iterator_traits<ForwardIterT> traits;
+    typedef typename traits::value_type value_type;
+    typedef typename traits::iterator_category iter_category_t;
+
+    // Position iterator is always a non-mutable iterator
+    typedef typename boost::add_const<value_type>::type const_value_type;
+
+public:
+    // Check if the MainIterT is nil. If it's nil, it means that the actual
+    //  self type is position_iterator. Otherwise, it's a real type we
+    //  must use
+    typedef typename boost::mpl::if_<
+        typename boost::is_same<MainIterT, nil_t>::type,
+        position_iterator<ForwardIterT, PositionT, nil_t>,
+        MainIterT
+    >::type main_iter_t;
+
+    typedef boost::iterator_adaptor<
+        main_iter_t,
+        ForwardIterT,
+        const_value_type,
+        boost::forward_traversal_tag
+    > type;
+};
+
+}}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} /* namespace boost::spirit::iterator_::impl */
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass.hpp
new file mode 100644 (file)
index 0000000..fd9482e
--- /dev/null
@@ -0,0 +1,1307 @@
+/*=============================================================================
+    Copyright (c) 2001, Daniel C. Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <deque>
+#include <iterator>
+#include <iostream>
+#include <algorithm>    // for std::swap
+#include <exception>    // for std::exception
+#include <boost/limits.hpp>
+#include <boost/iterator.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+#include <boost/spirit/home/classic/iterator/fixed_size_queue.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+#include <boost/spirit/home/classic/iterator/multi_pass_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl {
+    template <typename T>
+    inline void mp_swap(T& t1, T& t2);
+}
+
+namespace multi_pass_policies
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// class ref_counted
+// Implementation of an OwnershipPolicy used by multi_pass.
+//
+// Implementation modified from RefCounted class from the Loki library by
+// Andrei Alexandrescu
+///////////////////////////////////////////////////////////////////////////////
+class ref_counted
+{
+    protected:
+        ref_counted()
+            : count(new std::size_t(1))
+        {}
+
+        ref_counted(ref_counted const& x)
+            : count(x.count)
+        {}
+
+        // clone is called when a copy of the iterator is made, so increment
+        // the ref-count.
+        void clone()
+        {
+            ++*count;
+        }
+
+        // called when a copy is deleted.  Decrement the ref-count.  Return
+        // value of true indicates that the last copy has been released.
+        bool release()
+        {
+            if (!--*count)
+            {
+                delete count;
+                count = 0;
+                return true;
+            }
+            return false;
+        }
+
+        void swap(ref_counted& x)
+        {
+            impl::mp_swap(count, x.count);
+        }
+
+    public:
+        // returns true if there is only one iterator in existence.
+        // std_deque StoragePolicy will free it's buffered data if this
+        // returns true.
+        bool unique() const
+        {
+            return *count == 1;
+        }
+
+    private:
+        std::size_t* count;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class first_owner
+// Implementation of an OwnershipPolicy used by multi_pass
+// This ownership policy dictates that the first iterator created will
+// determine the lifespan of the shared components.  This works well for
+// spirit, since no dynamic allocation of iterators is done, and all copies
+// are make on the stack.
+//
+// There is a caveat about using this policy together with the std_deque
+// StoragePolicy. Since first_owner always returns false from unique(),
+// std_deque will only release the queued data if clear_queue() is called.
+///////////////////////////////////////////////////////////////////////////////
+class first_owner
+{
+    protected:
+        first_owner()
+            : first(true)
+        {}
+
+        first_owner(first_owner const&)
+            : first(false)
+        {}
+
+        void clone()
+        {
+        }
+
+        // return true to indicate deletion of resources
+        bool release()
+        {
+            return first;
+        }
+
+        void swap(first_owner&)
+        {
+            // if we're the first, we still remain the first, even if assigned
+            // to, so don't swap first_.  swap is only called from operator=
+        }
+
+    public:
+        bool unique() const
+        {
+            return false; // no way to know, so always return false
+        }
+
+    private:
+        bool first;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class illegal_backtracking
+// thrown by buf_id_check CheckingPolicy if an instance of an iterator is
+// used after another one has invalidated the queue
+///////////////////////////////////////////////////////////////////////////////
+class illegal_backtracking : public std::exception
+{
+public:
+
+    illegal_backtracking() throw() {}
+    ~illegal_backtracking() throw() {}
+
+    virtual const char*
+    what() const throw()
+    { return "BOOST_SPIRIT_CLASSIC_NS::illegal_backtracking"; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class buf_id_check
+// Implementation of the CheckingPolicy used by multi_pass
+// This policy is most effective when used together with the std_deque
+// StoragePolicy.
+// If used with the fixed_size_queue StoragePolicy, it will not detect
+// iterator derefereces that are out of the range of the queue.
+///////////////////////////////////////////////////////////////////////////////
+class buf_id_check
+{
+    protected:
+        buf_id_check()
+            : shared_buf_id(new unsigned long(0))
+            , buf_id(0)
+        {}
+
+        buf_id_check(buf_id_check const& x)
+            : shared_buf_id(x.shared_buf_id)
+            , buf_id(x.buf_id)
+        {}
+
+        // will be called from the destructor of the last iterator.
+        void destroy()
+        {
+            delete shared_buf_id;
+            shared_buf_id = 0;
+        }
+
+        void swap(buf_id_check& x)
+        {
+            impl::mp_swap(shared_buf_id, x.shared_buf_id);
+            impl::mp_swap(buf_id, x.buf_id);
+        }
+
+        // called to verify that everything is okay.
+        void check_if_valid() const
+        {
+            if (buf_id != *shared_buf_id)
+            {
+                boost::throw_exception(illegal_backtracking());
+            }
+        }
+
+        // called from multi_pass::clear_queue, so we can increment the count
+        void clear_queue()
+        {
+            ++*shared_buf_id;
+            ++buf_id;
+        }
+
+    private:
+        unsigned long* shared_buf_id;
+        unsigned long buf_id;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class no_check
+// Implementation of the CheckingPolicy used by multi_pass
+// It does not do anything :-)
+///////////////////////////////////////////////////////////////////////////////
+class no_check
+{
+    protected:
+        no_check() {}
+        no_check(no_check const&) {}
+        void destroy() {}
+        void swap(no_check&) {}
+        void check_if_valid() const {}
+        void clear_queue() {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class std_deque
+// Implementation of the StoragePolicy used by multi_pass
+// This stores all data in a std::deque, and keeps an offset to the current
+// position. It stores all the data unless there is only one
+// iterator using the queue.
+// Note: a position is used instead of an iterator, because a push_back on
+// a deque can invalidate any iterators.
+///////////////////////////////////////////////////////////////////////////////
+class std_deque
+{
+    public:
+
+template <typename ValueT>
+class inner
+{
+    private:
+
+        typedef std::deque<ValueT> queue_type;
+        queue_type* queuedElements;
+        mutable typename queue_type::size_type queuePosition;
+
+    protected:
+        inner()
+            : queuedElements(new queue_type)
+            , queuePosition(0)
+        {}
+
+        inner(inner const& x)
+            : queuedElements(x.queuedElements)
+            , queuePosition(x.queuePosition)
+        {}
+
+        // will be called from the destructor of the last iterator.
+        void destroy()
+        {
+            BOOST_SPIRIT_ASSERT(NULL != queuedElements);
+            delete queuedElements;
+            queuedElements = 0;
+        }
+
+        void swap(inner& x)
+        {
+            impl::mp_swap(queuedElements, x.queuedElements);
+            impl::mp_swap(queuePosition, x.queuePosition);
+        }
+
+        // This is called when the iterator is dereferenced.  It's a template
+        // method so we can recover the type of the multi_pass iterator
+        // and call unique and access the m_input data member.
+        template <typename MultiPassT>
+        static typename MultiPassT::reference dereference(MultiPassT const& mp)
+        {
+            if (mp.queuePosition == mp.queuedElements->size())
+            {
+                // check if this is the only iterator
+                if (mp.unique())
+                {
+                    // free up the memory used by the queue.
+                    if (mp.queuedElements->size() > 0)
+                    {
+                        mp.queuedElements->clear();
+                        mp.queuePosition = 0;
+                    }
+                }
+                return mp.get_input();
+            }
+            else
+            {
+                return (*mp.queuedElements)[mp.queuePosition];
+            }
+        }
+
+        // This is called when the iterator is incremented.  It's a template
+        // method so we can recover the type of the multi_pass iterator
+        // and call unique and access the m_input data member.
+        template <typename MultiPassT>
+        static void increment(MultiPassT& mp)
+        {
+            if (mp.queuePosition == mp.queuedElements->size())
+            {
+                // check if this is the only iterator
+                if (mp.unique())
+                {
+                    // free up the memory used by the queue.
+                    if (mp.queuedElements->size() > 0)
+                    {
+                        mp.queuedElements->clear();
+                        mp.queuePosition = 0;
+                    }
+                }
+                else
+                {
+                    mp.queuedElements->push_back(mp.get_input());
+                    ++mp.queuePosition;
+                }
+                mp.advance_input();
+            }
+            else
+            {
+                ++mp.queuePosition;
+            }
+
+        }
+
+        // called to forcibly clear the queue
+        void clear_queue()
+        {
+            queuedElements->clear();
+            queuePosition = 0;
+        }
+
+        // called to determine whether the iterator is an eof iterator
+        template <typename MultiPassT>
+        static bool is_eof(MultiPassT const& mp)
+        {
+            return mp.queuePosition == mp.queuedElements->size() &&
+                mp.input_at_eof();
+        }
+
+        // called by operator==
+        bool equal_to(inner const& x) const
+        {
+            return queuePosition == x.queuePosition;
+        }
+
+        // called by operator<
+        bool less_than(inner const& x) const
+        {
+            return queuePosition < x.queuePosition;
+        }
+}; // class inner
+
+}; // class std_deque
+
+
+///////////////////////////////////////////////////////////////////////////////
+// class fixed_size_queue
+// Implementation of the StoragePolicy used by multi_pass
+// fixed_size_queue keeps a circular buffer (implemented by
+// BOOST_SPIRIT_CLASSIC_NS::fixed_size_queue class) that is size N+1 and stores N elements.
+// It is up to the user to ensure that there is enough look ahead for their
+// grammar.  Currently there is no way to tell if an iterator is pointing
+// to forgotten data.  The leading iterator will put an item in the queue
+// and remove one when it is incremented.  No dynamic allocation is done,
+// except on creation of the queue (fixed_size_queue constructor).
+///////////////////////////////////////////////////////////////////////////////
+template < std::size_t N>
+class fixed_size_queue
+{
+    public:
+
+template <typename ValueT>
+class inner
+{
+    private:
+
+        typedef BOOST_SPIRIT_CLASSIC_NS::fixed_size_queue<ValueT, N> queue_type;
+        queue_type * queuedElements;
+        mutable typename queue_type::iterator queuePosition;
+
+    protected:
+        inner()
+            : queuedElements(new queue_type)
+            , queuePosition(queuedElements->begin())
+        {}
+
+        inner(inner const& x)
+            : queuedElements(x.queuedElements)
+            , queuePosition(x.queuePosition)
+        {}
+
+        // will be called from the destructor of the last iterator.
+        void destroy()
+        {
+            BOOST_SPIRIT_ASSERT(NULL != queuedElements);
+            delete queuedElements;
+            queuedElements = 0;
+        }
+
+        void swap(inner& x)
+        {
+            impl::mp_swap(queuedElements, x.queuedElements);
+            impl::mp_swap(queuePosition, x.queuePosition);
+        }
+
+        // This is called when the iterator is dereferenced.  It's a template
+        // method so we can recover the type of the multi_pass iterator
+        // and access the m_input data member.
+        template <typename MultiPassT>
+        static typename MultiPassT::reference dereference(MultiPassT const& mp)
+        {
+            if (mp.queuePosition == mp.queuedElements->end())
+            {
+                return mp.get_input();
+            }
+            else
+            {
+                return *mp.queuePosition;
+            }
+        }
+
+        // This is called when the iterator is incremented.  It's a template
+        // method so we can recover the type of the multi_pass iterator
+        // and access the m_input data member.
+        template <typename MultiPassT>
+        static void increment(MultiPassT& mp)
+        {
+            if (mp.queuePosition == mp.queuedElements->end())
+            {
+                // don't let the queue get larger than N
+                if (mp.queuedElements->size() >= N)
+                    mp.queuedElements->pop_front();
+
+                mp.queuedElements->push_back(mp.get_input());
+                mp.advance_input();
+            }
+            ++mp.queuePosition;
+        }
+
+        // no-op
+        void clear_queue()
+        {}
+
+        // called to determine whether the iterator is an eof iterator
+        template <typename MultiPassT>
+        static bool is_eof(MultiPassT const& mp)
+        {
+            return mp.queuePosition == mp.queuedElements->end() &&
+                mp.input_at_eof();
+        }
+
+        // called by operator==
+        bool equal_to(inner const& x) const
+        {
+            return queuePosition == x.queuePosition;
+        }
+
+        // called by operator<
+        bool less_than(inner const& x) const
+        {
+            return queuePosition < x.queuePosition;
+        }
+}; // class inner
+
+}; // class fixed_size_queue
+
+
+///////////////////////////////////////////////////////////////////////////////
+// class input_iterator
+// Implementation of the InputPolicy used by multi_pass
+// input_iterator encapsulates an input iterator of type InputT
+///////////////////////////////////////////////////////////////////////////////
+class input_iterator
+{
+    public:
+
+template <typename InputT>
+class inner
+{
+    private:
+        typedef
+            typename boost::detail::iterator_traits<InputT>::value_type
+            result_type;
+
+    public:
+        typedef result_type value_type;
+
+    private:
+        struct Data {
+            Data(InputT const &input_) 
+            :   input(input_), was_initialized(false)
+            {}
+            
+            InputT input;
+            value_type curtok;
+            bool was_initialized;
+        };
+
+       // Needed by compilers not implementing the resolution to DR45. For
+       // reference, see
+       // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+
+       friend struct Data;
+
+    public:
+        typedef
+            typename boost::detail::iterator_traits<InputT>::difference_type
+            difference_type;
+        typedef
+            typename boost::detail::iterator_traits<InputT>::pointer
+            pointer;
+        typedef
+            typename boost::detail::iterator_traits<InputT>::reference
+            reference;
+
+    protected:
+        inner()
+            : data(0)
+        {}
+
+        inner(InputT x)
+            : data(new Data(x))
+        {}
+
+        inner(inner const& x)
+            : data(x.data)
+        {}
+
+        void destroy()
+        {
+            delete data;
+            data = 0;
+        }
+
+        bool same_input(inner const& x) const
+        {
+            return data == x.data;
+        }
+
+        typedef
+            typename boost::detail::iterator_traits<InputT>::value_type
+            value_t;
+        void swap(inner& x)
+        {
+            impl::mp_swap(data, x.data);
+        }
+
+        void ensure_initialized() const
+        {
+            if (data && !data->was_initialized) {
+                data->curtok = *data->input;      // get the first token
+                data->was_initialized = true;
+            }
+        }
+
+    public:
+        reference get_input() const
+        {
+            BOOST_SPIRIT_ASSERT(NULL != data);
+            ensure_initialized();
+            return data->curtok;
+        }
+
+        void advance_input()
+        {
+            BOOST_SPIRIT_ASSERT(NULL != data);
+            data->was_initialized = false;        // should get the next token
+            ++data->input;
+        }
+
+        bool input_at_eof() const
+        {
+            return !data || data->input == InputT();
+        }
+
+    private:
+        Data *data;
+};
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class lex_input
+// Implementation of the InputPolicy used by multi_pass
+// lex_input gets tokens (ints) from yylex()
+///////////////////////////////////////////////////////////////////////////////
+class lex_input
+{
+    public:
+
+template <typename InputT>
+class inner
+{
+    public:
+        typedef int value_type;
+    typedef std::ptrdiff_t difference_type;
+        typedef int* pointer;
+        typedef int& reference;
+
+    protected:
+        inner()
+            : curtok(new int(0))
+        {}
+
+        inner(InputT x)
+            : curtok(new int(x))
+        {}
+
+        inner(inner const& x)
+            : curtok(x.curtok)
+        {}
+
+        void destroy()
+        {
+            delete curtok;
+            curtok = 0;
+        }
+
+        bool same_input(inner const& x) const
+        {
+            return curtok == x.curtok;
+        }
+
+        void swap(inner& x)
+        {
+            impl::mp_swap(curtok, x.curtok);
+        }
+
+    public:
+        reference get_input() const
+        {
+            return *curtok;
+        }
+
+        void advance_input()
+        {
+            extern int yylex();
+            *curtok = yylex();
+        }
+
+        bool input_at_eof() const
+        {
+            return *curtok == 0;
+        }
+
+    private:
+        int* curtok;
+
+};
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class functor_input
+// Implementation of the InputPolicy used by multi_pass
+// functor_input gets tokens from a functor
+// Note: the functor must have a typedef for result_type
+// It also must have a static variable of type result_type defined to
+// represent eof that is called eof.
+///////////////////////////////////////////////////////////////////////////////
+class functor_input
+{
+    public:
+
+template <typename FunctorT>
+class inner
+{
+    typedef typename FunctorT::result_type result_type;
+    public:
+        typedef result_type value_type;
+    typedef std::ptrdiff_t difference_type;
+        typedef result_type* pointer;
+        typedef result_type& reference;
+
+    protected:
+        inner()
+            : ftor(0)
+            , curtok(0)
+        {}
+
+        inner(FunctorT const& x)
+            : ftor(new FunctorT(x))
+            , curtok(new result_type((*ftor)()))
+        {}
+
+        inner(inner const& x)
+            : ftor(x.ftor)
+            , curtok(x.curtok)
+        {}
+
+        void destroy()
+        {
+            delete ftor;
+            ftor = 0;
+            delete curtok;
+            curtok = 0;
+        }
+
+        bool same_input(inner const& x) const
+        {
+            return ftor == x.ftor;
+        }
+
+        void swap(inner& x)
+        {
+            impl::mp_swap(curtok, x.curtok);
+            impl::mp_swap(ftor, x.ftor);
+        }
+
+    public:
+        reference get_input() const
+        {
+            return *curtok;
+        }
+
+        void advance_input()
+        {
+            if (curtok) {
+                *curtok = (*ftor)();
+            }
+        }
+
+        bool input_at_eof() const
+        {
+            return !curtok || *curtok == ftor->eof;
+        }
+
+        FunctorT& get_functor() const
+        {
+            return *ftor;
+        }
+
+
+    private:
+        FunctorT* ftor;
+        result_type* curtok;
+
+};
+
+};
+
+} // namespace multi_pass_policies
+
+///////////////////////////////////////////////////////////////////////////////
+// iterator_base_creator
+///////////////////////////////////////////////////////////////////////////////
+
+namespace iterator_ { namespace impl {
+
+// Meta-function to generate a std::iterator<> base class for multi_pass. This
+//  is used mainly to improve conformance of compilers not supporting PTS
+//  and thus relying on inheritance to recognize an iterator.
+// We are using boost::iterator<> because it offers an automatic workaround
+//  for broken std::iterator<> implementations.
+template <typename InputPolicyT, typename InputT>
+struct iterator_base_creator
+{
+    typedef typename InputPolicyT::BOOST_NESTED_TEMPLATE inner<InputT> input_t;
+
+    typedef boost::iterator
+    <
+        std::forward_iterator_tag,
+        typename input_t::value_type,
+        typename input_t::difference_type,
+        typename input_t::pointer,
+        typename input_t::reference
+    > type;
+};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// class template multi_pass 
+///////////////////////////////////////////////////////////////////////////////
+
+// The default multi_pass instantiation uses a ref-counted std_deque scheme.
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+class multi_pass
+    : public OwnershipPolicy
+    , public CheckingPolicy
+    , public StoragePolicy::template inner<
+                typename InputPolicy::template inner<InputT>::value_type>
+    , public InputPolicy::template inner<InputT>
+    , public iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
+{
+        typedef OwnershipPolicy OP;
+        typedef CheckingPolicy CHP;
+        typedef typename StoragePolicy::template inner<
+            typename InputPolicy::template inner<InputT>::value_type> SP;
+        typedef typename InputPolicy::template inner<InputT> IP;
+        typedef typename
+            iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
+            IB;
+
+    public:
+        typedef typename IB::value_type value_type;
+        typedef typename IB::difference_type difference_type;
+        typedef typename IB::reference reference;
+        typedef typename IB::pointer pointer;
+        typedef InputT iterator_type;
+
+        multi_pass();
+        explicit multi_pass(InputT input);
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        multi_pass(int);
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+        ~multi_pass();
+
+        multi_pass(multi_pass const&);
+        multi_pass& operator=(multi_pass const&);
+
+        void swap(multi_pass& x);
+
+        reference operator*() const;
+        pointer operator->() const;
+        multi_pass& operator++();
+        multi_pass operator++(int);
+
+        void clear_queue();
+
+        bool operator==(const multi_pass& y) const;
+        bool operator<(const multi_pass& y) const;
+
+    private: // helper functions
+        bool is_eof() const;
+};
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass()
+    : OP()
+    , CHP()
+    , SP()
+    , IP()
+{
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(InputT input)
+    : OP()
+    , CHP()
+    , SP()
+    , IP(input)
+{
+}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+    // The standard library shipped with gcc-3.1 has a bug in
+    // bits/basic_string.tcc. It tries  to use iter::iter(0) to
+    // construct an iterator. Ironically, this  happens in sanity
+    // checking code that isn't required by the standard.
+    // The workaround is to provide an additional constructor that
+    // ignores its int argument and behaves like the default constructor.
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(int)
+    : OP()
+    , CHP()
+    , SP()
+    , IP()
+{
+}
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+~multi_pass()
+{
+    if (OP::release())
+    {
+        CHP::destroy();
+        SP::destroy();
+        IP::destroy();
+    }
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(
+        multi_pass const& x)
+    : OP(x)
+    , CHP(x)
+    , SP(x)
+    , IP(x)
+{
+    OP::clone();
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator=(
+        multi_pass const& x)
+{
+    multi_pass temp(x);
+    temp.swap(*this);
+    return *this;
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline void
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+swap(multi_pass& x)
+{
+    OP::swap(x);
+    CHP::swap(x);
+    SP::swap(x);
+    IP::swap(x);
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+reference
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator*() const
+{
+    CHP::check_if_valid();
+    return SP::dereference(*this);
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+pointer
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator->() const
+{
+    return &(operator*());
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator++()
+{
+    CHP::check_if_valid();
+    SP::increment(*this);
+    return *this;
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator++(int)
+{
+    multi_pass
+    <
+        InputT,
+        InputPolicy,
+        OwnershipPolicy,
+        CheckingPolicy,
+        StoragePolicy
+    > tmp(*this);
+
+    ++*this;
+
+    return tmp;
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline void
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+clear_queue()
+{
+    SP::clear_queue();
+    CHP::clear_queue();
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+is_eof() const
+{
+    return SP::is_eof(*this);
+}
+
+///// Comparisons
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator==(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+        StoragePolicy>& y) const
+{
+    bool is_eof_ = SP::is_eof(*this);
+    bool y_is_eof_ = SP::is_eof(y);
+    
+    if (is_eof_ && y_is_eof_)
+    {
+        return true;  // both are EOF
+    }
+    else if (is_eof_ ^ y_is_eof_)
+    {
+        return false; // one is EOF, one isn't
+    }
+    else if (!IP::same_input(y))
+    {
+        return false;
+    }
+    else
+    {
+        return SP::equal_to(y);
+    }
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator<(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+        StoragePolicy>& y) const
+{
+    return SP::less_than(y);
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+bool operator!=(
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& x,
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& y)
+{
+    return !(x == y);
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+bool operator>(
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& x,
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& y)
+{
+    return y < x;
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+bool operator>=(
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& x,
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& y)
+{
+    return !(x < y);
+}
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+inline
+bool operator<=(
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& x,
+        const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+                        StoragePolicy>& y)
+{
+    return !(y < x);
+}
+
+///// Generator function
+template <typename InputT>
+inline multi_pass<InputT, 
+    multi_pass_policies::input_iterator, multi_pass_policies::ref_counted,
+    multi_pass_policies::buf_id_check, multi_pass_policies::std_deque>
+make_multi_pass(InputT i)
+{
+    return multi_pass<InputT, 
+        multi_pass_policies::input_iterator, multi_pass_policies::ref_counted,
+        multi_pass_policies::buf_id_check, multi_pass_policies::std_deque>(i);
+}
+
+// this could be a template typedef, since such a thing doesn't
+// exist in C++, we'll use inheritance to accomplish the same thing.
+
+template <typename InputT, std::size_t N>
+class look_ahead :
+    public multi_pass<
+        InputT,
+        multi_pass_policies::input_iterator,
+        multi_pass_policies::first_owner,
+        multi_pass_policies::no_check,
+        multi_pass_policies::fixed_size_queue<N> >
+{
+        typedef multi_pass<
+            InputT,
+            multi_pass_policies::input_iterator,
+            multi_pass_policies::first_owner,
+            multi_pass_policies::no_check,
+            multi_pass_policies::fixed_size_queue<N> > base_t;
+    public:
+        look_ahead()
+            : base_t() {}
+
+        explicit look_ahead(InputT x)
+            : base_t(x) {}
+
+        look_ahead(look_ahead const& x)
+            : base_t(x) {}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        look_ahead(int)         // workaround for a bug in the library
+            : base_t() {}       // shipped with gcc 3.1
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+    // default generated operators destructor and assignment operator are okay.
+};
+
+template
+<
+    typename InputT,
+    typename InputPolicy,
+    typename OwnershipPolicy,
+    typename CheckingPolicy,
+    typename StoragePolicy
+>
+void swap(
+    multi_pass<
+        InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
+    > &x,
+    multi_pass<
+        InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
+    > &y)
+{
+    x.swap(y);
+}
+
+namespace impl {
+
+    template <typename T>
+    inline void mp_swap(T& t1, T& t2)
+    {
+        using std::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+        swap(t1, t2);
+    }
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/multi_pass_fwd.hpp
new file mode 100644 (file)
index 0000000..a212305
--- /dev/null
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP
+
+#include <cstddef>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace multi_pass_policies
+    {
+        class ref_counted;
+        class first_owner;
+        class buf_id_check;
+        class no_check;
+        class std_deque;
+        template<std::size_t N> class fixed_size_queue;
+        class input_iterator;
+        class lex_input;
+        class functor_input;
+    }
+
+    template
+    <
+        typename InputT,
+        typename InputPolicy = multi_pass_policies::input_iterator,
+        typename OwnershipPolicy = multi_pass_policies::ref_counted,
+        typename CheckingPolicy = multi_pass_policies::buf_id_check,
+        typename StoragePolicy = multi_pass_policies::std_deque
+    >
+    class multi_pass;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator.hpp
new file mode 100644 (file)
index 0000000..e352f88
--- /dev/null
@@ -0,0 +1,436 @@
+/*=============================================================================
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002-2006 Hartmut Kaiser
+    Copyright (c) 2003 Giovanni Bajo
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_POSITION_ITERATOR_HPP
+#define BOOST_SPIRIT_POSITION_ITERATOR_HPP
+
+#include <string>
+#include <boost/config.hpp>
+#include <boost/concept_check.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/iterator/position_iterator_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  file_position_without_column
+//
+//  A structure to hold positional information. This includes the file,
+//  and the line number
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+struct file_position_without_column_base {
+    String file;
+    int line;
+
+    file_position_without_column_base(String const& file_ = String(),
+                  int line_ = 1):
+        file    (file_),
+        line    (line_)
+    {}
+
+    bool operator==(const file_position_without_column_base& fp) const
+    { return line == fp.line && file == fp.file; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  file_position
+//
+//  This structure holds complete file position, including file name,
+//  line and column number
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+struct file_position_base : public file_position_without_column_base<String> {
+    int column;
+
+    file_position_base(String const& file_ = String(),
+                       int line_ = 1, int column_ = 1):
+        file_position_without_column_base<String> (file_, line_),
+        column                       (column_)
+    {}
+
+    bool operator==(const file_position_base& fp) const
+    { return column == fp.column && this->line == fp.line && this->file == fp.file; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_policy<>
+//
+//  This template is the policy to handle the file position. It is specialized
+//  on the position type. Providing a custom file_position also requires
+//  providing a specialization of this class.
+//
+//  Policy interface:
+//
+//    Default constructor of the custom position class must be accessible.
+//    set_tab_chars(unsigned int chars) - Set the tabstop width
+//    next_char(PositionT& pos)  - Notify that a new character has been
+//      processed
+//    tabulation(PositionT& pos) - Notify that a tab character has been
+//      processed
+//    next_line(PositionT& pos)  - Notify that a new line delimiter has
+//      been reached.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename PositionT> class position_policy;
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} /* namespace BOOST_SPIRIT_CLASSIC_NS */
+
+
+// This must be included here for full compatibility with old MSVC
+#include "boost/spirit/home/classic/iterator/impl/position_iterator.ipp"
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_iterator
+//
+//  It wraps an iterator, and keeps track of the current position in the input,
+//  as it gets incremented.
+//
+//  The wrapped iterator must be at least a Forward iterator. The position
+//  iterator itself will always be a non-mutable Forward iterator.
+//
+//  In order to have begin/end iterators constructed, the end iterator must be
+//  empty constructed. Similar to what happens with stream iterators. The begin
+//  iterator must be constructed from both, the begin and end iterators of the
+//  wrapped iterator type. This is necessary to implement the lookahead of
+//  characters necessary to parse CRLF sequences.
+//
+//  In order to extract the current positional data from the iterator, you may
+//  use the get_position member function.
+//
+//  You can also use the set_position member function to reset the current
+//  position to something new.
+//
+//  The structure that holds the current position can be customized through a
+//  template parameter, and the class position_policy must be specialized
+//  on the new type to define how to handle it. Currently, it's possible
+//  to choose between the file_position and file_position_without_column
+//  (which saves some overhead if managing current column is not required).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+     BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the position_iterator class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Uses the newer iterator_adaptor version (should be released with
+//  Boost V1.31.0)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename ForwardIteratorT,
+    typename PositionT,
+    typename SelfT
+>
+class position_iterator
+:   public iterator_::impl::position_iterator_base_generator<
+        SelfT,
+        ForwardIteratorT,
+        PositionT
+    >::type,
+    public position_policy<PositionT>
+{
+private:
+
+    typedef position_policy<PositionT> position_policy_t;
+    typedef typename iterator_::impl::position_iterator_base_generator<
+            SelfT,
+            ForwardIteratorT,
+            PositionT
+        >::type base_t;
+    typedef typename iterator_::impl::position_iterator_base_generator<
+            SelfT,
+            ForwardIteratorT,
+            PositionT
+        >::main_iter_t main_iter_t;
+
+public:
+
+    typedef PositionT position_t;
+
+    position_iterator()
+    :   _isend(true)
+    {}
+
+    position_iterator(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end)
+    :   base_t(begin), _end(end), _pos(PositionT()), _isend(begin == end)
+    {}
+
+    template <typename FileNameT>
+    position_iterator(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT fileName)
+    :   base_t(begin), _end(end), _pos(PositionT(fileName)),
+        _isend(begin == end)
+    {}
+
+    template <typename FileNameT, typename LineT>
+    position_iterator(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT fileName, LineT line)
+    :   base_t(begin), _end(end), _pos(PositionT(fileName, line)),
+        _isend(begin == end)
+    {}
+
+    template <typename FileNameT, typename LineT, typename ColumnT>
+    position_iterator(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT fileName, LineT line, ColumnT column)
+    :   base_t(begin), _end(end), _pos(PositionT(fileName, line, column)),
+        _isend(begin == end)
+    {}
+
+    position_iterator(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        const PositionT& pos)
+    :   base_t(begin), _end(end), _pos(pos), _isend(begin == end)
+    {}
+
+    position_iterator(const position_iterator& iter)
+    :   base_t(iter.base()), position_policy_t(iter),
+        _end(iter._end), _pos(iter._pos), _isend(iter._isend)
+    {}
+
+    position_iterator& operator=(const position_iterator& iter)
+    {
+        base_t::operator=(iter);
+        position_policy_t::operator=(iter);
+        _end = iter._end;
+        _pos = iter._pos;
+        _isend = iter._isend;
+        return *this;
+    }
+
+    void set_position(PositionT const& newpos) { _pos = newpos; }
+    PositionT& get_position() { return _pos; }
+    PositionT const& get_position() const { return _pos; }
+
+    void set_tabchars(unsigned int chars)
+    {
+        // This function (which comes from the position_policy) has a
+        //  different name on purpose, to avoid messing with using
+        //  declarations or qualified calls to access the base template
+        //  function, which might break some compilers.
+        this->position_policy_t::set_tab_chars(chars);
+    }
+
+private:
+    friend class boost::iterator_core_access;
+
+    void increment()
+    {
+        typename base_t::reference val = *(this->base());
+        if (val == '\n') {
+            ++this->base_reference();
+            this->next_line(_pos);
+            static_cast<main_iter_t &>(*this).newline();
+        }
+        else if ( val == '\r') {
+            ++this->base_reference();
+            if (this->base_reference() == _end || *(this->base()) != '\n')
+            {
+                this->next_line(_pos);
+                static_cast<main_iter_t &>(*this).newline();
+            }
+        }
+        else if (val == '\t') {
+            this->tabulation(_pos);
+            ++this->base_reference();
+        }
+        else {
+            this->next_char(_pos);
+            ++this->base_reference();
+        }
+
+        // The iterator is at the end only if it's the same
+        //  of the
+        _isend = (this->base_reference() == _end);
+    }
+
+    template <
+        typename OtherDerivedT, typename OtherIteratorT,
+        typename V, typename C, typename R, typename D
+    >
+    bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+        const &x) const
+    {
+        OtherDerivedT const &rhs = static_cast<OtherDerivedT const &>(x);
+        bool x_is_end = rhs._isend;
+
+        return (_isend == x_is_end) && (_isend || this->base() == rhs.base());
+    }
+
+protected:
+
+    void newline(void)
+    {}
+
+    ForwardIteratorT _end;
+    PositionT _pos;
+    bool _isend;
+};
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  position_iterator2
+//
+//  Equivalent to position_iterator, but it is able to extract the current
+//  line into a string. This is very handy for error reports.
+//
+//  Notice that the footprint of this class is higher than position_iterator,
+//  (how much depends on how bulky the underlying iterator is), so it should
+//  be used only if necessary.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template
+<
+    typename ForwardIteratorT,
+    typename PositionT
+>
+class position_iterator2
+    : public position_iterator
+    <
+        ForwardIteratorT,
+        PositionT,
+        position_iterator2<ForwardIteratorT, PositionT>
+    >
+{
+    typedef position_iterator
+    <
+        ForwardIteratorT,
+        PositionT,
+        position_iterator2<ForwardIteratorT, PositionT> // JDG 4-15-03
+    >  base_t;
+
+public:
+    typedef typename base_t::value_type value_type;
+    typedef PositionT position_t;
+
+    position_iterator2()
+    {}
+
+    position_iterator2(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end):
+        base_t(begin, end),
+        _startline(begin)
+    {}
+
+    template <typename FileNameT>
+    position_iterator2(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT file):
+        base_t(begin, end, file),
+        _startline(begin)
+    {}
+
+    template <typename FileNameT, typename LineT>
+    position_iterator2(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT file, LineT line):
+        base_t(begin, end, file, line),
+        _startline(begin)
+    {}
+
+    template <typename FileNameT, typename LineT, typename ColumnT>
+    position_iterator2(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        FileNameT file, LineT line, ColumnT column):
+        base_t(begin, end, file, line, column),
+        _startline(begin)
+    {}
+
+    position_iterator2(
+        const ForwardIteratorT& begin,
+        const ForwardIteratorT& end,
+        const PositionT& pos):
+        base_t(begin, end, pos),
+        _startline(begin)
+    {}
+
+    position_iterator2(const position_iterator2& iter)
+        : base_t(iter), _startline(iter._startline)
+    {}
+
+    position_iterator2& operator=(const position_iterator2& iter)
+    {
+        base_t::operator=(iter);
+        _startline = iter._startline;
+        return *this;
+    }
+
+    ForwardIteratorT get_currentline_begin(void) const
+    { return _startline; }
+
+    ForwardIteratorT get_currentline_end(void) const
+    { return get_endline(); }
+
+    std::basic_string<value_type> get_currentline(void) const
+    {
+        return std::basic_string<value_type>
+            (get_currentline_begin(), get_currentline_end());
+    }
+
+protected:
+    ForwardIteratorT _startline;
+
+    friend class position_iterator<ForwardIteratorT, PositionT,
+        position_iterator2<ForwardIteratorT, PositionT> >;
+
+    ForwardIteratorT get_endline() const
+    {
+        ForwardIteratorT endline = _startline;
+        while (endline != this->_end && *endline != '\r' && *endline != '\n')
+        {
+            ++endline;
+        }
+        return endline;
+    }
+
+    void newline(void)
+    { _startline = this->base(); }
+};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/position_iterator_fwd.hpp
new file mode 100644 (file)
index 0000000..f194e24
--- /dev/null
@@ -0,0 +1,60 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    Copyright (c) 2002-2006 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP)
+#define BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP
+
+#include <string>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename String = std::string> 
+    struct file_position_base;
+    
+    typedef file_position_base<std::string> file_position;
+
+    template <typename String = std::string> 
+    struct file_position_without_column_base;
+
+    typedef file_position_without_column_base<std::string> file_position_without_column;
+
+    template <
+        typename ForwardIteratorT,
+        typename PositionT = file_position_base<
+            std::basic_string<
+                typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
+            > 
+        >,
+        typename SelfT = nil_t
+    >
+    class position_iterator;
+
+    template
+    <
+        typename ForwardIteratorT,
+        typename PositionT = file_position_base<
+            std::basic_string<
+                typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
+            > 
+        >
+    >
+    class position_iterator2;
+
+    template <typename PositionT> class position_policy;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/iterator/typeof.hpp
new file mode 100644 (file)
index 0000000..23882ca
--- /dev/null
@@ -0,0 +1,94 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_TYPEOF_HPP)
+#define BOOST_SPIRIT_ITERATOR_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/iterator/multi_pass_fwd.hpp>
+#include <boost/spirit/home/classic/iterator/file_iterator_fwd.hpp>
+#include <boost/spirit/home/classic/iterator/position_iterator_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // external (from core)
+    struct nil_t;
+
+    // fixed_size_queue.hpp
+    template<typename T, std::size_t N> class fixed_size_queue;
+    template<typename QueueT, typename T, typename PointerT>
+    class fsq_iterator;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::nil_t)
+#   define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
+#endif
+
+
+// multi_pass.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::multi_pass,5)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::ref_counted)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::first_owner)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::buf_id_check)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::no_check)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::std_deque)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::fixed_size_queue,(BOOST_TYPEOF_INTEGRAL(std::size_t)))
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::input_iterator)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::lex_input)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::functor_input)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::multi_pass,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::multi_pass,1)
+
+
+// file_iterator.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::file_iterator,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::std_file_iterator,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::mmap_file_iterator,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::std_file_iterator<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::std_file_iterator<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::mmap_file_iterator<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::fileiter_impl::mmap_file_iterator<wchar_t>)
+
+
+// fixed_size_queue.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fixed_size_queue,(typename)(BOOST_TYPEOF_INTEGRAL(std::size_t)))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fsq_iterator,3)
+
+
+// position_iterator.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::position_iterator,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::position_iterator2,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::position_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::file_position_base,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::file_position_without_column_base,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::file_position)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::file_position_base<std::basic_string<wchar_t> >)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::file_position_without_column)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::file_position_without_column_base<std::basic_string<wchar_t> >)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta.hpp
new file mode 100644 (file)
index 0000000..bdb93c5
--- /dev/null
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_META_MAIN_HPP)
+#define BOOST_SPIRIT_META_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Meta
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/home/classic/meta/fundamental.hpp>
+#include <boost/spirit/home/classic/meta/parser_traits.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#include <boost/spirit/home/classic/meta/traverse.hpp>
+
+#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/as_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/as_parser.hpp
new file mode 100644 (file)
index 0000000..c5cc82d
--- /dev/null
@@ -0,0 +1,113 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_AS_PARSER_HPP)
+#define BOOST_SPIRIT_AS_PARSER_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper templates to derive the parser type from an auxilliary type
+    //  and to generate an object of the required parser type given an
+    //  auxilliary object. Supported types to convert are parsers,
+    //  single characters and character strings.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace impl
+    {
+        template<typename T>
+        struct default_as_parser
+        {
+            typedef T type;
+            static type const& convert(type const& p)
+            {
+                return p;
+            }
+        };
+
+        struct char_as_parser
+        {
+            typedef chlit<char> type;
+            static type convert(char ch)
+            {
+                return type(ch);
+            }
+        };
+
+        struct wchar_as_parser
+        {
+            typedef chlit<wchar_t> type;
+            static type convert(wchar_t ch)
+            {
+                return type(ch);
+            }
+        };
+
+        struct string_as_parser
+        {
+            typedef strlit<char const*> type;
+            static type convert(char const* str)
+            {
+                return type(str);
+            }
+        };
+
+        struct wstring_as_parser
+        {
+            typedef strlit<wchar_t const*> type;
+            static type convert(wchar_t const* str)
+            {
+                return type(str);
+            }
+        };
+    }
+
+    template<typename T>
+    struct as_parser : impl::default_as_parser<T> {};
+
+    template<>
+    struct as_parser<char> : impl::char_as_parser {};
+
+    template<>
+    struct as_parser<wchar_t> : impl::wchar_as_parser {};
+
+    template<>
+    struct as_parser<char*> : impl::string_as_parser {};
+
+    template<>
+    struct as_parser<char const*> : impl::string_as_parser {};
+
+    template<>
+    struct as_parser<wchar_t*> : impl::wstring_as_parser {};
+
+    template<>
+    struct as_parser<wchar_t const*> : impl::wstring_as_parser {};
+
+    template<int N>
+    struct as_parser<char[N]> : impl::string_as_parser {};
+
+    template<int N>
+    struct as_parser<wchar_t[N]> : impl::wstring_as_parser {};
+
+    template<int N>
+    struct as_parser<char const[N]> : impl::string_as_parser {};
+
+    template<int N>
+    struct as_parser<wchar_t const[N]> : impl::wstring_as_parser {};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/fundamental.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/fundamental.hpp
new file mode 100644 (file)
index 0000000..c7fcf04
--- /dev/null
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
+#define BOOST_SPIRIT_FUNDAMENTAL_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/impl/fundamental.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper template for counting the number of nodes contained in a
+    //  given parser type.
+    //  All parser_category type parsers are counted as nodes.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT>
+    struct node_count {
+
+        typedef typename ParserT::parser_category_t parser_category_t;
+        typedef typename impl::nodes<parser_category_t>
+            ::template count<ParserT, mpl::int_<0> > count_t;
+
+        BOOST_STATIC_CONSTANT(int, value = count_t::value);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper template for counting the number of leaf nodes contained in a
+    //  given parser type.
+    //  Only plain_parser_category type parsers are counted as leaf nodes.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT>
+    struct leaf_count {
+
+        typedef typename ParserT::parser_category_t parser_category_t;
+        typedef typename impl::leafs<parser_category_t>
+            ::template count<ParserT, mpl::int_<0> > count_t;
+
+        BOOST_STATIC_CONSTANT(int, value = count_t::value);
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/fundamental.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/fundamental.ipp
new file mode 100644 (file)
index 0000000..7b1d1aa
--- /dev/null
@@ -0,0 +1,177 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_FUNDAMENTAL_IPP)
+#define BOOST_SPIRIT_FUNDAMENTAL_IPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper template for counting the number of nodes contained in a
+    //  given parser type.
+    //  All parser_category type parsers are counted as nodes.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct nodes;
+
+    template <>
+    struct nodes<plain_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (LeafCountT::value + 1) };
+        };
+    };
+
+    template <>
+    struct nodes<unary_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (nodes<subject_category_t>
+                ::template count<subject_t, LeafCountT>::value + 1) };
+        };
+    };
+
+    template <>
+    struct nodes<action_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (nodes<subject_category_t>
+                ::template count<subject_t, LeafCountT>::value + 1) };
+        };
+    };
+
+    template <>
+    struct nodes<binary_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::left_t                left_t;
+            typedef typename ParserT::right_t               right_t;
+            typedef typename left_t::parser_category_t      left_category_t;
+            typedef typename right_t::parser_category_t     right_category_t;
+
+            typedef count self_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum {
+                leftcount = (nodes<left_category_t>
+                    ::template count<left_t, LeafCountT>::value),
+                rightcount = (nodes<right_category_t>
+                    ::template count<right_t, LeafCountT>::value),
+                value = ((self_t::leftcount) + (self_t::rightcount) + 1)
+            };
+        };
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Helper template for counting the number of leaf nodes contained in a
+    //  given parser type.
+    //  Only plain_parser_category type parsers are counted as leaf nodes.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct leafs;
+
+    template <>
+    struct leafs<plain_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (LeafCountT::value + 1) };
+        };
+    };
+
+    template <>
+    struct leafs<unary_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (leafs<subject_category_t>
+                ::template count<subject_t, LeafCountT>::value) };
+        };
+    };
+
+    template <>
+    struct leafs<action_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum { value = (leafs<subject_category_t>
+                ::template count<subject_t, LeafCountT>::value) };
+        };
+    };
+
+    template <>
+    struct leafs<binary_parser_category> {
+
+        template <typename ParserT, typename LeafCountT>
+        struct count {
+
+            typedef typename ParserT::left_t                left_t;
+            typedef typename ParserT::right_t               right_t;
+            typedef typename left_t::parser_category_t      left_category_t;
+            typedef typename right_t::parser_category_t     right_category_t;
+
+            typedef count self_t;
+
+            // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+            enum {
+                leftcount = (leafs<left_category_t>
+                    ::template count<left_t, LeafCountT>::value),
+                rightcount = (leafs<right_category_t>
+                    ::template count<right_t, LeafCountT>::value),
+                value = (self_t::leftcount + self_t::rightcount)
+            };
+        };
+    };
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_IPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/parser_traits.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/parser_traits.ipp
new file mode 100644 (file)
index 0000000..846a58b
--- /dev/null
@@ -0,0 +1,116 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    Copyright (c) 2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_TRAITS_IPP)
+#define BOOST_SPIRIT_PARSER_TRAITS_IPP
+
+#include <boost/spirit/home/classic/core/composite/operators.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl
+{
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_alternative = false);
+        BOOST_STATIC_CONSTANT(bool, is_sequence = false);
+        BOOST_STATIC_CONSTANT(bool, is_sequential_or = false);
+        BOOST_STATIC_CONSTANT(bool, is_intersection = false);
+        BOOST_STATIC_CONSTANT(bool, is_difference = false);
+        BOOST_STATIC_CONSTANT(bool, is_exclusive_or = false);
+        BOOST_STATIC_CONSTANT(bool, is_optional = false);
+        BOOST_STATIC_CONSTANT(bool, is_kleene_star = false);
+        BOOST_STATIC_CONSTANT(bool, is_positive = false);
+    };
+
+    template <typename ParserT>
+    struct parser_type_traits : public parser_type_traits_base {
+
+    //  no definition here, fallback for all not explicitly mentioned parser
+    //  types
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<alternative<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_alternative = true);
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<sequence<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_sequence = true);
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<sequential_or<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_sequential_or = true);
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<intersection<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_intersection = true);
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<difference<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_difference = true);
+    };
+
+    template <typename A, typename B>
+    struct parser_type_traits<exclusive_or<A, B> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_exclusive_or = true);
+    };
+
+    template <typename S>
+    struct parser_type_traits<optional<S> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_optional = true);
+    };
+
+    template <typename S>
+    struct parser_type_traits<kleene_star<S> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_kleene_star = true);
+    };
+
+    template <typename S>
+    struct parser_type_traits<positive<S> >
+    :   public parser_type_traits_base {
+
+        BOOST_STATIC_CONSTANT(bool, is_positive = true);
+    };
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_PARSER_TRAITS_IPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/refactoring.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/refactoring.ipp
new file mode 100644 (file)
index 0000000..61cc6b5
--- /dev/null
@@ -0,0 +1,451 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REFACTORING_IPP
+#define BOOST_SPIRIT_REFACTORING_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The struct 'self_nested_refactoring' is used to indicate, that the
+//  refactoring algorithm should be 'self-nested'.
+//
+//  The struct 'non_nested_refactoring' is used to indicate, that no nesting
+//  of refactoring algorithms is reqired.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+struct non_nested_refactoring { typedef non_nested_refactoring embed_t; };
+struct self_nested_refactoring { typedef self_nested_refactoring embed_t; };
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Helper templates for refactoring parsers
+//
+///////////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  refactor the left unary operand of a binary parser
+    //
+    //      The refactoring should be done only if the left operand is an
+    //      unary_parser_category parser.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct refactor_unary_nested {
+
+        template <
+            typename ParserT, typename NestedT,
+            typename ScannerT, typename BinaryT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& /*nested_d*/)
+        {
+            return binary.parse(scan);
+        }
+    };
+
+    template <>
+    struct refactor_unary_nested<unary_parser_category> {
+
+        template <
+            typename ParserT, typename ScannerT, typename BinaryT,
+            typename NestedT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& nested_d)
+        {
+            typedef typename BinaryT::parser_generator_t op_t;
+            typedef
+                typename BinaryT::left_t::parser_generator_t
+                unary_t;
+
+            return
+                unary_t::generate(
+                    nested_d[
+                        op_t::generate(binary.left().subject(), binary.right())
+                    ]
+                ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct refactor_unary_non_nested {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+        {
+            return binary.parse(scan);
+        }
+    };
+
+    template <>
+    struct refactor_unary_non_nested<unary_parser_category> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+        {
+            typedef typename BinaryT::parser_generator_t op_t;
+            typedef
+                typename BinaryT::left_t::parser_generator_t
+                unary_t;
+
+            return unary_t::generate(
+                op_t::generate(binary.left().subject(), binary.right())
+            ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename NestedT>
+    struct refactor_unary_type {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& nested_d)
+        {
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+
+            return refactor_unary_nested<parser_category_t>::
+                    parse(p, scan, binary, nested_d);
+        }
+    };
+
+    template <>
+    struct refactor_unary_type<non_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            non_nested_refactoring const&)
+        {
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+
+            return refactor_unary_non_nested<parser_category_t>::
+                    parse(p, scan, binary);
+        }
+
+    };
+
+    template <>
+    struct refactor_unary_type<self_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            self_nested_refactoring const &nested_tag)
+        {
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+            typedef typename ParserT::parser_generator_t parser_generator_t;
+
+            parser_generator_t nested_d(nested_tag);
+            return refactor_unary_nested<parser_category_t>::
+                    parse(p, scan, binary, nested_d);
+        }
+
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  refactor the action on the left operand of a binary parser
+    //
+    //      The refactoring should be done only if the left operand is an
+    //      action_parser_category parser.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct refactor_action_nested {
+
+        template <
+            typename ParserT, typename ScannerT, typename BinaryT,
+            typename NestedT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& nested_d)
+        {
+            return nested_d[binary].parse(scan);
+        }
+    };
+
+    template <>
+    struct refactor_action_nested<action_parser_category> {
+
+        template <
+            typename ParserT, typename ScannerT, typename BinaryT,
+            typename NestedT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& nested_d)
+        {
+            typedef typename BinaryT::parser_generator_t binary_gen_t;
+
+            return (
+                nested_d[
+                    binary_gen_t::generate(
+                        binary.left().subject(),
+                        binary.right()
+                    )
+                ][binary.left().predicate()]
+            ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct refactor_action_non_nested {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+        {
+            return binary.parse(scan);
+        }
+    };
+
+    template <>
+    struct refactor_action_non_nested<action_parser_category> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+        {
+            typedef typename BinaryT::parser_generator_t binary_gen_t;
+
+            return (
+                binary_gen_t::generate(
+                    binary.left().subject(),
+                    binary.right()
+                )[binary.left().predicate()]
+            ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename NestedT>
+    struct refactor_action_type {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            NestedT const& nested_d)
+        {
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+
+            return refactor_action_nested<parser_category_t>::
+                    parse(p, scan, binary, nested_d);
+        }
+    };
+
+    template <>
+    struct refactor_action_type<non_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            non_nested_refactoring const&)
+        {
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+
+            return refactor_action_non_nested<parser_category_t>::
+                parse(p, scan, binary);
+        }
+    };
+
+    template <>
+    struct refactor_action_type<self_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename BinaryT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+            self_nested_refactoring const &nested_tag)
+        {
+            typedef typename ParserT::parser_generator_t parser_generator_t;
+            typedef
+                typename BinaryT::left_t::parser_category_t
+                parser_category_t;
+
+            parser_generator_t nested_d(nested_tag);
+            return refactor_action_nested<parser_category_t>::
+                    parse(p, scan, binary, nested_d);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  refactor the action attached to a binary parser
+    //
+    //      The refactoring should be done only if the given parser is an
+    //      binary_parser_category parser.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct attach_action_nested {
+
+        template <
+            typename ParserT, typename ScannerT, typename ActionT,
+            typename NestedT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, ActionT const &action,
+            NestedT const& nested_d)
+        {
+            return action.parse(scan);
+        }
+    };
+
+    template <>
+    struct attach_action_nested<binary_parser_category> {
+
+        template <
+            typename ParserT, typename ScannerT, typename ActionT,
+            typename NestedT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, ActionT const &action,
+            NestedT const& nested_d)
+        {
+            typedef
+                typename ActionT::subject_t::parser_generator_t
+                binary_gen_t;
+
+            return (
+                binary_gen_t::generate(
+                    nested_d[action.subject().left()[action.predicate()]],
+                    nested_d[action.subject().right()[action.predicate()]]
+                )
+            ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CategoryT>
+    struct attach_action_non_nested {
+
+        template <typename ParserT, typename ScannerT, typename ActionT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, ActionT const &action)
+        {
+            return action.parse(scan);
+        }
+    };
+
+    template <>
+    struct attach_action_non_nested<binary_parser_category> {
+
+        template <typename ParserT, typename ScannerT, typename ActionT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &, ScannerT const& scan, ActionT const &action)
+        {
+            typedef
+                typename ActionT::subject_t::parser_generator_t
+                binary_gen_t;
+
+            return (
+                binary_gen_t::generate(
+                    action.subject().left()[action.predicate()],
+                    action.subject().right()[action.predicate()]
+                )
+            ).parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename NestedT>
+    struct attach_action_type {
+
+        template <typename ParserT, typename ScannerT, typename ActionT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, ActionT const& action,
+            NestedT const& nested_d)
+        {
+            typedef
+                typename ActionT::subject_t::parser_category_t
+                parser_category_t;
+
+            return attach_action_nested<parser_category_t>::
+                    parse(p, scan, action, nested_d);
+        }
+    };
+
+    template <>
+    struct attach_action_type<non_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename ActionT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, ActionT const &action,
+            non_nested_refactoring const&)
+        {
+            typedef
+                typename ActionT::subject_t::parser_category_t
+                parser_category_t;
+
+            return attach_action_non_nested<parser_category_t>::
+                parse(p, scan, action);
+        }
+    };
+
+    template <>
+    struct attach_action_type<self_nested_refactoring> {
+
+        template <typename ParserT, typename ScannerT, typename ActionT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const &p, ScannerT const& scan, ActionT const &action,
+            self_nested_refactoring const& nested_tag)
+        {
+            typedef typename ParserT::parser_generator_t parser_generator_t;
+            typedef
+                typename ActionT::subject_t::parser_category_t
+                parser_category_t;
+
+            parser_generator_t nested_d(nested_tag);
+            return attach_action_nested<parser_category_t>::
+                    parse(p, scan, action, nested_d);
+        }
+    };
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/traverse.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/impl/traverse.ipp
new file mode 100644 (file)
index 0000000..3968230
--- /dev/null
@@ -0,0 +1,393 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TRAVERSE_IPP)
+#define BOOST_SPIRIT_TRAVERSE_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/meta/fundamental.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl
+{
+
+    template <typename CategoryT>
+    struct traverse_post_order_return_category;
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Environment class for post_order_traversal
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <int Level, int Node, int Index, int LastLeft>
+struct traverse_post_order_env {
+
+    BOOST_STATIC_CONSTANT(int, level = Level);
+    BOOST_STATIC_CONSTANT(int, node = Node);
+    BOOST_STATIC_CONSTANT(int, index = Index);
+    BOOST_STATIC_CONSTANT(int, lastleft = LastLeft);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  traverse_post_order_return template
+//
+//      This template is a helper for dispatching the calculation of a parser
+//      type result for a traversal level to the corresponding parser_category
+//      based specialization.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename MetaT, typename ParserT, typename EnvT>
+struct traverse_post_order_return {
+
+    typedef typename ParserT::parser_category_t parser_category_t;
+    typedef typename impl::traverse_post_order_return_category<parser_category_t>
+        ::template result<MetaT, ParserT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  parser_traversal_..._result templates
+//
+//      These are metafunctions, which calculate the resulting parser type
+//      for all subparsers and feed these types to the user supplied
+//      metafunctions to get back the resulting parser type of this traversal
+//      level.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename MetaT, typename ParserT, typename EnvT>
+struct parser_traversal_plain_result {
+
+    typedef typename MetaT::template plain_result<ParserT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename MetaT, typename UnaryT, typename SubjectT, typename EnvT>
+struct parser_traversal_unary_result {
+
+    typedef typename MetaT
+        ::template unary_result<UnaryT, SubjectT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename MetaT, typename ActionT, typename SubjectT, typename EnvT>
+struct parser_traversal_action_result {
+
+    typedef typename MetaT
+        ::template action_result<ActionT, SubjectT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename MetaT, typename BinaryT, typename LeftT,
+    typename RightT, typename EnvT
+>
+struct parser_traversal_binary_result {
+
+    BOOST_STATIC_CONSTANT(int,
+        thisnum = (node_count<BinaryT>::value + EnvT::lastleft-1));
+    BOOST_STATIC_CONSTANT(int,
+        leftnum = (node_count<LeftT>::value + EnvT::lastleft-1));
+    BOOST_STATIC_CONSTANT(int,
+        leafnum = (leaf_count<LeftT>::value + EnvT::index));
+
+    typedef parser_traversal_binary_result self_t;
+
+    // left traversal environment and resulting parser type
+    typedef traverse_post_order_env<
+                (EnvT::level+1), (self_t::leftnum), (EnvT::index), (EnvT::lastleft)
+            > left_sub_env_t;
+    typedef typename traverse_post_order_return<
+                MetaT, LeftT, left_sub_env_t
+            >::type
+        left_t;
+
+    // right traversal environment and resulting parser type
+    typedef traverse_post_order_env<
+                (EnvT::level+1), (self_t::thisnum-1), (self_t::leafnum), (self_t::leftnum+1)
+            > right_sub_env_t;
+    typedef typename traverse_post_order_return<
+                MetaT, RightT, right_sub_env_t
+            >::type
+        right_t;
+
+    typedef typename MetaT::template binary_result<
+                BinaryT, left_t, right_t, EnvT
+            >::type
+        type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Meta functions, which dispatch the calculation of the return type of
+    //  of the post_order traverse function to the result template of the
+    //  corresponding parser_category based metafunction template.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <typename CategoryT>
+    struct traverse_post_order_return_category;
+
+    template <>
+    struct traverse_post_order_return_category<plain_parser_category> {
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        struct result {
+
+            typedef typename parser_traversal_plain_result<
+                        MetaT, ParserT, EnvT
+                    >::type
+                type;
+        };
+    };
+
+    template <>
+    struct traverse_post_order_return_category<unary_parser_category> {
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        struct result {
+
+            typedef typename parser_traversal_unary_result<
+                        MetaT, ParserT, typename ParserT::subject_t, EnvT
+                    >::type
+                type;
+        };
+    };
+
+    template <>
+    struct traverse_post_order_return_category<action_parser_category> {
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        struct result {
+
+            typedef typename parser_traversal_action_result<
+                        MetaT, ParserT, typename ParserT::subject_t, EnvT
+                    >::type
+                type;
+        };
+    };
+
+    template <>
+    struct traverse_post_order_return_category<binary_parser_category> {
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        struct result {
+
+            typedef typename parser_traversal_binary_result<
+                        MetaT, ParserT, typename ParserT::left_t,
+                        typename ParserT::right_t, EnvT
+                    >::type
+                type;
+        };
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Post-order parser traversal
+    //
+    //      The following templates contain the parser_category based code for
+    //
+    //        - calculating the type of the resulting parser, which is to be
+    //          returned from a level of traversal
+    //        - traversing down the composite parser structure, this traversal
+    //          returnes a new parser object
+    //
+    //      Both tasks are delegated to the MetaT metafunction supplied by the
+    //      user.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <typename CategoryT>
+    struct traverse_post_order;
+
+    template <>
+    struct traverse_post_order<plain_parser_category> {
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        struct result {
+
+            typedef
+                typename parser_traversal_plain_result<MetaT, ParserT, EnvT>::type
+                type;
+        };
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        static
+        typename parser_traversal_plain_result<MetaT, ParserT, EnvT>::type
+        generate(MetaT const &meta_, ParserT const &parser_, EnvT const &env)
+        {
+            return meta_.generate_plain(parser_, env);
+        }
+    };
+
+    template <>
+    struct traverse_post_order<unary_parser_category> {
+
+        template <
+            typename MetaT, typename ParserT, typename SubjectT, typename EnvT
+        >
+        struct result {
+
+            typedef typename parser_traversal_unary_result<
+                        MetaT, ParserT, SubjectT, EnvT
+                    >::type
+                type;
+        };
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        static
+        typename parser_traversal_unary_result<
+            MetaT, ParserT, 
+            typename traverse_post_order_return<
+                MetaT, typename ParserT::subject_t, EnvT
+            >::type,
+            EnvT
+        >::type
+        generate(MetaT const &meta_, ParserT const &unary_, EnvT const &env)
+        {
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            return meta_.generate_unary(
+                unary_,
+                traverse_post_order<subject_category_t>::generate(meta_,
+                    unary_.subject(),
+                    traverse_post_order_env<
+                        EnvT::level+1, EnvT::node-1, EnvT::index, EnvT::lastleft
+                    >()
+                ),
+                env
+            );
+        }
+    };
+
+    template <>
+    struct traverse_post_order<action_parser_category> {
+
+        template <
+            typename MetaT, typename ParserT, typename SubjectT, typename EnvT
+        >
+        struct result {
+
+            typedef typename parser_traversal_action_result<
+                        MetaT, ParserT, SubjectT, EnvT
+                    >::type
+                type;
+        };
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        static
+        typename parser_traversal_action_result<
+            MetaT, ParserT, 
+            typename traverse_post_order_return<
+                MetaT, typename ParserT::subject_t, EnvT
+            >::type,
+            EnvT
+        >::type
+        generate(MetaT const &meta_, ParserT const &action_, EnvT const &env)
+        {
+            typedef typename ParserT::subject_t             subject_t;
+            typedef typename subject_t::parser_category_t   subject_category_t;
+
+            return meta_.generate_action(
+                action_,
+                traverse_post_order<subject_category_t>::generate(meta_,
+                    action_.subject(),
+                    traverse_post_order_env<
+                        EnvT::level+1, EnvT::node-1, EnvT::index, EnvT::lastleft
+                    >()
+                ),
+                env
+            );
+        }
+    };
+
+    template <>
+    struct traverse_post_order<binary_parser_category> {
+
+        template <
+            typename MetaT, typename ParserT, typename LeftT,
+            typename RightT, typename EnvT
+        >
+        struct result {
+
+            typedef typename parser_traversal_binary_result<
+                        MetaT, ParserT, LeftT, RightT, EnvT
+                    >::type
+                type;
+        };
+
+        template <typename MetaT, typename ParserT, typename EnvT>
+        static
+        typename parser_traversal_binary_result<
+            MetaT, ParserT, 
+            typename traverse_post_order_return<
+                MetaT, typename ParserT::left_t, EnvT
+            >::type,
+            typename traverse_post_order_return<
+                MetaT, typename ParserT::right_t, EnvT
+            >::type,
+            EnvT
+        >::type
+        generate(MetaT const &meta_, ParserT const &binary_, EnvT const& /*env*/)
+        {
+            typedef typename ParserT::left_t                left_t;
+            typedef typename ParserT::right_t               right_t;
+            typedef typename left_t::parser_category_t      left_category_t;
+            typedef typename right_t::parser_category_t     right_category_t;
+
+            enum {
+                leftnum = (node_count<left_t>::value + EnvT::lastleft-1),
+                thisnum = (node_count<ParserT>::value + EnvT::lastleft-1),
+                rightnum = (thisnum-1),
+                leafnum = (leaf_count<left_t>::value + EnvT::index)
+            };
+
+            return meta_.generate_binary(
+                binary_,
+                traverse_post_order<left_category_t>::generate(
+                    meta_, binary_.left(),
+                    traverse_post_order_env<
+                        EnvT::level+1, leftnum, EnvT::index, EnvT::lastleft
+                    >()
+                ),
+                traverse_post_order<right_category_t>::generate(
+                    meta_, binary_.right(),
+                    traverse_post_order_env<
+                        EnvT::level+1, rightnum, leafnum, leftnum+1
+                    >()
+                ),
+                traverse_post_order_env<
+                    EnvT::level, thisnum, EnvT::index, EnvT::lastleft
+                >()
+            );
+        }
+    };
+
+}   //  namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_TRAVERSE_IPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/parser_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/parser_traits.hpp
new file mode 100644 (file)
index 0000000..618aade
--- /dev/null
@@ -0,0 +1,320 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    Copyright (c) 2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
+#define BOOST_SPIRIT_PARSER_TRAITS_HPP
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/meta/impl/parser_traits.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Parser traits templates
+//
+//      Used to determine the type and several other characteristics of a given
+//      parser type.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_parser traits template can be used to tell wether a given
+// class is a parser.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct is_parser
+{
+    BOOST_STATIC_CONSTANT(bool, value =
+        (::boost::is_base_and_derived<parser<T>, T>::value));
+
+//  [JDG 2/3/03] simplified implementation by
+//  using boost::is_base_and_derived
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The is_unary_composite traits template can be used to tell if a given
+//  parser is a unary parser as for instance kleene_star or optional.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+struct is_unary_composite {
+
+    BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+        typename UnaryT::parser_category_t, unary_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The is_acction_parser traits template can be used to tell if a given
+//  parser is a action parser, i.e. it is a composite consisting of a
+//  auxilliary parser and an attached semantic action.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct is_action_parser {
+
+    BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+        typename ActionT::parser_category_t, action_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The is_binary_composite traits template can be used to tell if a given
+//  parser is a binary parser as for instance sequence or difference.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+struct is_binary_composite {
+
+    BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+        typename BinaryT::parser_category_t, binary_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The is_composite_parser traits template can be used to tell if a given
+//  parser is a unary or a binary parser composite type.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CompositeT>
+struct is_composite_parser {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::is_unary_composite<CompositeT>::value ||
+        ::BOOST_SPIRIT_CLASSIC_NS::is_binary_composite<CompositeT>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename ParserT>
+struct is_alternative {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_alternative));
+};
+
+template <typename ParserT>
+struct is_sequence {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_sequence));
+};
+
+template <typename ParserT>
+struct is_sequential_or {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_sequential_or));
+};
+
+template <typename ParserT>
+struct is_intersection {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_intersection));
+};
+
+template <typename ParserT>
+struct is_difference {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_difference));
+};
+
+template <typename ParserT>
+struct is_exclusive_or {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_exclusive_or));
+};
+
+template <typename ParserT>
+struct is_optional {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_optional));
+};
+
+template <typename ParserT>
+struct is_kleene_star {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_kleene_star));
+};
+
+template <typename ParserT>
+struct is_positive {
+
+    BOOST_STATIC_CONSTANT(bool, value = (
+        ::BOOST_SPIRIT_CLASSIC_NS::impl::parser_type_traits<ParserT>::is_positive));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Parser extraction templates
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The unary_subject template can be used to return the type of the
+//  parser used as the subject of an unary parser.
+//  If the parser under inspection is not an unary type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+struct unary_subject {
+
+    BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLASSIC_NS::is_unary_composite<UnaryT>::value);
+    typedef typename UnaryT::subject_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The get_unary_subject template function returns the parser object, which
+//  is used as the subject of an unary parser.
+//  If the parser under inspection is not an unary type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+inline typename unary_subject<UnaryT>::type const &
+get_unary_subject(UnaryT const &unary_)
+{
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_unary_composite<UnaryT>::value);
+    return unary_.subject();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The binary_left_subject and binary_right_subject templates can be used to
+//  return the types of the parsers used as the left and right subject of an
+//  binary parser.
+//  If the parser under inspection is not a binary type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+struct binary_left_subject {
+
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_binary_composite<BinaryT>::value);
+    typedef typename BinaryT::left_t type;
+};
+
+template <typename BinaryT>
+struct binary_right_subject {
+
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_binary_composite<BinaryT>::value);
+    typedef typename BinaryT::right_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The get_binary_left_subject and get_binary_right_subject template functions
+//  return the parser object, which is used as the left or right subject of a
+//  binary parser.
+//  If the parser under inspection is not a binary type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+inline typename binary_left_subject<BinaryT>::type const &
+get_binary_left_subject(BinaryT const &binary_)
+{
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_binary_composite<BinaryT>::value);
+    return binary_.left();
+}
+
+template <typename BinaryT>
+inline typename binary_right_subject<BinaryT>::type const &
+get_binary_right_subject(BinaryT const &binary_)
+{
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_binary_composite<BinaryT>::value);
+    return binary_.right();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The action_subject template can be used to return the type of the
+//  parser used as the subject of an action parser.
+//  If the parser under inspection is not an action type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct action_subject {
+
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_action_parser<ActionT>::value);
+    typedef typename ActionT::subject_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The get_action_subject template function returns the parser object, which
+//  is used as the subject of an action parser.
+//  If the parser under inspection is not an action type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+inline typename action_subject<ActionT>::type const &
+get_action_subject(ActionT const &action_)
+{
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_action_parser<ActionT>::value);
+    return action_.subject();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The semantic_action template can be used to return the type of the
+//  attached semantic action of an action parser.
+//  If the parser under inspection is not an action type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct semantic_action {
+
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_action_parser<ActionT>::value);
+    typedef typename ActionT::predicate_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The get_semantic_action template function returns the attached semantic
+//  action of an action parser.
+//  If the parser under inspection is not an action type parser the compilation
+//  will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+inline typename semantic_action<ActionT>::type const &
+get_semantic_action(ActionT const &action_)
+{
+    BOOST_STATIC_ASSERT(::BOOST_SPIRIT_CLASSIC_NS::is_action_parser<ActionT>::value);
+    return action_.predicate();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/refactoring.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/refactoring.hpp
new file mode 100644 (file)
index 0000000..e5d45f9
--- /dev/null
@@ -0,0 +1,287 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REFACTORING_HPP
+#define BOOST_SPIRIT_REFACTORING_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#include <boost/spirit/home/classic/meta/impl/refactoring.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  refactor_unary_parser class
+//
+//      This helper template allows to attach an unary operation to a newly
+//      constructed parser, which combines the subject of the left operand of
+//      the original given parser (BinaryT) with the right operand of the
+//      original binary parser through the original binary operation and
+//      rewraps the resulting parser with the original unary operator.
+//
+//      For instance given the parser:
+//          *some_parser - another_parser
+//
+//      will be refactored to:
+//          *(some_parser - another_parser)
+//
+//      If the parser to refactor is not a unary parser, no refactoring is done
+//      at all.
+//
+//      The original parser should be a binary_parser_category parser,
+//      else the compilation will fail
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class refactor_unary_gen;
+
+template <typename BinaryT, typename NestedT = non_nested_refactoring>
+class refactor_unary_parser :
+    public parser<refactor_unary_parser<BinaryT, NestedT> > {
+
+public:
+    //  the parser to refactor has to be at least a binary_parser_category
+    //  parser
+    BOOST_STATIC_ASSERT((
+        boost::is_convertible<typename BinaryT::parser_category_t,
+            binary_parser_category>::value
+    ));
+
+    refactor_unary_parser(BinaryT const& binary_, NestedT const& nested_)
+    : binary(binary_), nested(nested_) {}
+
+    typedef refactor_unary_parser<BinaryT, NestedT> self_t;
+    typedef refactor_unary_gen<NestedT> parser_generator_t;
+    typedef typename BinaryT::left_t::parser_category_t parser_category_t;
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::refactor_unary_type<NestedT>::
+            parse(*this, scan, binary, nested);
+    }
+
+private:
+    typename as_parser<BinaryT>::type::embed_t binary;
+    typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class refactor_unary_gen {
+
+public:
+    typedef refactor_unary_gen<NestedT> embed_t;
+
+    refactor_unary_gen(NestedT const& nested_ = non_nested_refactoring())
+    : nested(nested_) {}
+
+    template <typename ParserT>
+    refactor_unary_parser<ParserT, NestedT>
+    operator[](parser<ParserT> const& subject) const
+    {
+        return refactor_unary_parser<ParserT, NestedT>
+            (subject.derived(), nested);
+    }
+
+private:
+    typename NestedT::embed_t nested;
+};
+
+const refactor_unary_gen<> refactor_unary_d = refactor_unary_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  refactor_action_parser class
+//
+//      This helper template allows to attach an action taken from the left
+//      operand of the given binary parser to a newly constructed parser,
+//      which combines the subject of the left operand of the original binary
+//      parser with the right operand of the original binary parser by means of
+//      the original binary operator parser.
+//
+//      For instance the parser:
+//          some_parser[some_attached_functor] - another_parser
+//
+//      will be refactored to:
+//          (some_parser - another_parser)[some_attached_functor]
+//
+//      If the left operand to refactor is not an action parser, no refactoring
+//      is done at all.
+//
+//      The original parser should be a binary_parser_category parser,
+//      else the compilation will fail
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class refactor_action_gen;
+
+template <typename BinaryT, typename NestedT = non_nested_refactoring>
+class refactor_action_parser :
+    public parser<refactor_action_parser<BinaryT, NestedT> > {
+
+public:
+    //  the parser to refactor has to be at least a binary_parser_category
+    //  parser
+    BOOST_STATIC_ASSERT((
+        boost::is_convertible<typename BinaryT::parser_category_t,
+            binary_parser_category>::value
+    ));
+
+    refactor_action_parser(BinaryT const& binary_, NestedT const& nested_)
+    : binary(binary_), nested(nested_) {}
+
+    typedef refactor_action_parser<BinaryT, NestedT> self_t;
+    typedef refactor_action_gen<NestedT> parser_generator_t;
+    typedef typename BinaryT::left_t::parser_category_t parser_category_t;
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::refactor_action_type<NestedT>::
+            parse(*this, scan, binary, nested);
+    }
+
+private:
+    typename as_parser<BinaryT>::type::embed_t binary;
+    typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class refactor_action_gen {
+
+public:
+    typedef refactor_action_gen<NestedT> embed_t;
+
+    refactor_action_gen(NestedT const& nested_ = non_nested_refactoring())
+    : nested(nested_) {}
+
+    template <typename ParserT>
+    refactor_action_parser<ParserT, NestedT>
+    operator[](parser<ParserT> const& subject) const
+    {
+        return refactor_action_parser<ParserT, NestedT>
+            (subject.derived(), nested);
+    }
+
+private:
+    typename NestedT::embed_t nested;
+};
+
+const refactor_action_gen<> refactor_action_d = refactor_action_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  attach_action_parser class
+//
+//      This helper template allows to attach an action given separately
+//      to to all parsers, out of which the given parser is constructed and
+//      reconstructs a new parser having the same structure.
+//
+//      For instance the parser:
+//          (some_parser >> another_parser)[some_attached_functor]
+//
+//      will be refactored to:
+//          some_parser[some_attached_functor]
+//              >> another_parser[some_attached_functor]
+//
+//      The original parser should be a action_parser_category parser,
+//      else the compilation will fail
+//
+//      If the parser, to which the action is attached is not an binary parser,
+//      no refactoring is done at all.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class attach_action_gen;
+
+template <typename ActionT, typename NestedT = non_nested_refactoring>
+class attach_action_parser :
+    public parser<attach_action_parser<ActionT, NestedT> > {
+
+public:
+    //  the parser to refactor has to be at least a action_parser_category
+    //  parser
+    BOOST_STATIC_ASSERT((
+        boost::is_convertible<typename ActionT::parser_category_t,
+            action_parser_category>::value
+    ));
+
+    attach_action_parser(ActionT const& actor_, NestedT const& nested_)
+    : actor(actor_), nested(nested_) {}
+
+    typedef attach_action_parser<ActionT, NestedT> self_t;
+    typedef attach_action_gen<NestedT> parser_generator_t;
+    typedef typename ActionT::parser_category_t parser_category_t;
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::attach_action_type<NestedT>::
+            parse(*this, scan, actor, nested);
+    }
+
+private:
+    typename as_parser<ActionT>::type::embed_t actor;
+    typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class attach_action_gen {
+
+public:
+    typedef attach_action_gen<NestedT> embed_t;
+
+    attach_action_gen(NestedT const& nested_ = non_nested_refactoring())
+    : nested(nested_) {}
+
+    template <typename ParserT, typename ActionT>
+    attach_action_parser<action<ParserT, ActionT>, NestedT>
+    operator[](action<ParserT, ActionT> const& actor) const
+    {
+        return attach_action_parser<action<ParserT, ActionT>, NestedT>
+            (actor, nested);
+    }
+
+private:
+    typename NestedT::embed_t nested;
+};
+
+const attach_action_gen<> attach_action_d = attach_action_gen<>();
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_REFACTORING_HPP
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/traverse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/meta/traverse.hpp
new file mode 100644 (file)
index 0000000..aef68cb
--- /dev/null
@@ -0,0 +1,222 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TRAVERSE_HPP)
+#define BOOST_SPIRIT_TRAVERSE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/impl/traverse.ipp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Post-order traversal of auxilliary parsers.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct post_order
+    {
+        //  Return the parser type, which is generated as the result of the
+        //  traverse function below.
+
+        template <typename MetaT, typename ParserT>
+        struct result
+        {
+            typedef typename
+                traverse_post_order_return<
+                    MetaT
+                  , ParserT
+                  , traverse_post_order_env<0, 0, 0, 0>
+                >::type
+            type;
+        };
+
+        //  Traverse a given parser and refactor it with the help of the given
+        //  MetaT metafunction template.
+
+        template <typename MetaT, typename ParserT>
+        static typename result<MetaT, ParserT>::type
+        traverse(MetaT const &meta_, ParserT const &parser_)
+        {
+            typedef typename ParserT::parser_category_t parser_category_t;
+            return impl::traverse_post_order<parser_category_t>::generate(
+                meta_, parser_, traverse_post_order_env<0, 0, 0, 0>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Transform policies
+    //
+    //      The following policy classes could be used to assemble some new
+    //      transformation metafunction which uses identity transformations
+    //      for some parser_category type parsers.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  transform plain parsers
+    template <typename TransformT>
+    struct plain_identity_policy
+    {
+        template <typename ParserT, typename EnvT>
+        struct plain_result
+        {
+            // plain parsers should be embedded and returned correctly
+            typedef typename ParserT::embed_t type;
+        };
+
+        template <typename ParserT, typename EnvT>
+        typename parser_traversal_plain_result<TransformT, ParserT, EnvT>::type
+        generate_plain(ParserT const &parser_, EnvT const& /*env*/) const
+        {
+            return parser_;
+        }
+    };
+
+    //////////////////////////////////
+    //  transform unary parsers
+    template <typename UnaryT, typename SubjectT>
+    struct unary_identity_policy_return
+    {
+        typedef typename UnaryT::parser_generator_t parser_generator_t;
+        typedef typename parser_generator_t
+            ::template result<SubjectT>::type type;
+    };
+
+    template <typename TransformT>
+    struct unary_identity_policy
+    {
+        template <typename UnaryT, typename SubjectT, typename EnvT>
+        struct unary_result
+        {
+            typedef
+                typename unary_identity_policy_return<UnaryT, SubjectT>::type
+            type;
+        };
+
+        template <typename UnaryT, typename SubjectT, typename EnvT>
+        typename parser_traversal_unary_result<
+            TransformT, UnaryT, SubjectT, EnvT>::type
+        generate_unary(
+            UnaryT const &, SubjectT const &subject_, EnvT const& /*env*/) const
+        {
+            typedef typename UnaryT::parser_generator_t parser_generator_t;
+            return parser_generator_t::template generate<SubjectT>(subject_);
+        }
+    };
+
+    //////////////////////////////////
+    //  transform action parsers
+    template <typename TransformT>
+    struct action_identity_policy
+    {
+        template <typename ActionT, typename SubjectT, typename EnvT>
+        struct action_result
+        {
+            typedef action<SubjectT, typename ActionT::predicate_t> type;
+        };
+
+        template <typename ActionT, typename SubjectT, typename EnvT>
+        typename parser_traversal_action_result<
+            TransformT, ActionT, SubjectT, EnvT
+        >::type
+        generate_action(ActionT const &action_, SubjectT const &subject_,
+            EnvT const& /*env*/) const
+        {
+            return subject_[action_.predicate()];
+        }
+    };
+
+    //////////////////////////////////
+    //  transform binary parsers
+    template <typename BinaryT, typename LeftT, typename RightT>
+    struct binary_identity_policy_return
+    {
+        typedef typename BinaryT::parser_generator_t parser_generator_t;
+        typedef typename parser_generator_t
+            ::template result<LeftT, RightT>::type type;
+    };
+
+    template <typename TransformT>
+    struct binary_identity_policy
+    {
+        template <typename BinaryT, typename LeftT
+            , typename RightT, typename EnvT>
+        struct binary_result {
+
+            typedef typename
+                binary_identity_policy_return<BinaryT, LeftT, RightT>::type
+            type;
+        };
+
+        template <typename BinaryT, typename LeftT
+            , typename RightT, typename EnvT>
+        typename parser_traversal_binary_result<
+            TransformT, BinaryT, LeftT, RightT, EnvT
+        >::type
+        generate_binary(
+            BinaryT const &, LeftT const& left_
+          , RightT const& right_, EnvT const& /*env*/) const
+        {
+            typedef typename BinaryT::parser_generator_t parser_generator_t;
+            return parser_generator_t::
+                template generate<LeftT, RightT>(left_, right_);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  transform_policies template
+    //
+    //      The transform_policies template metafunction could serve as a
+    //      base class for new metafunctions to be passed to the traverse meta
+    //      template (see above), where only minimal parts have to be
+    //      overwritten.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <
+        typename TransformT,
+        typename PlainPolicyT = plain_identity_policy<TransformT>,
+        typename UnaryPolicyT = unary_identity_policy<TransformT>,
+        typename ActionPolicyT = action_identity_policy<TransformT>,
+        typename BinaryPolicyT = binary_identity_policy<TransformT>
+    >
+    struct transform_policies :
+        public PlainPolicyT,
+        public UnaryPolicyT,
+        public ActionPolicyT,
+        public BinaryPolicyT
+    {
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Identity transformation
+    //
+    //      The identity_transform metafunction supplied to the traverse
+    //      template will generate a new parser, which will be exactly
+    //      identical to the parser given as the parameter to the traverse
+    //      metafunction. I.e. the following conceptual 'equation' will be
+    //      always true:
+    //
+    //      some_parser ==
+    //          post_order::traverse(identity_transform(), some_parser)
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    struct identity_transform : transform_policies<identity_transform> {};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // !defined(BOOST_SPIRIT_TRAVERSE_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/namespace.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/namespace.hpp
new file mode 100644 (file)
index 0000000..f64fc81
--- /dev/null
@@ -0,0 +1,35 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_CLASSIC_NAMESPACE_HPP)
+#define SPIRIT_CLASSIC_NAMESPACE_HPP
+
+#if defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+
+// Use the old namespace for Spirit.Classic, everything is located in the 
+// namespace boost::spirit.
+// This is in place for backwards compatibility with Spirit V1.8.x. Don't use
+// it when combining Spirit.Classic with other parts of the library
+
+#define BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN /*namespace classic {*/
+#define BOOST_SPIRIT_CLASSIC_NS              boost::spirit/*::classic*/
+#define BOOST_SPIRIT_CLASSIC_NAMESPACE_END   /*}*/
+        
+#else
+
+// This is the normal (and suggested) mode of operation when using 
+// Spirit.Classic. Everything will be located in the namespace 
+// boost::spirit::classic, avoiding name clashes with other parts of Spirit.
+
+#define BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN namespace classic {
+#define BOOST_SPIRIT_CLASSIC_NS              boost::spirit::classic
+#define BOOST_SPIRIT_CLASSIC_NAMESPACE_END   }
+
+#endif
+
+#endif 
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix.hpp
new file mode 100644 (file)
index 0000000..c0aadd1
--- /dev/null
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PHOENIX_HPP)
+#define BOOST_SPIRIT_PHOENIX_HPP
+
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+#include <boost/spirit/home/classic/phoenix/tuple_helpers.hpp>
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/primitives.hpp>
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+#include <boost/spirit/home/classic/phoenix/functions.hpp>
+#include <boost/spirit/home/classic/phoenix/operators.hpp>
+#include <boost/spirit/home/classic/phoenix/special_ops.hpp>
+#include <boost/spirit/home/classic/phoenix/statements.hpp>
+#include <boost/spirit/home/classic/phoenix/binders.hpp>
+#include <boost/spirit/home/classic/phoenix/closures.hpp>
+#include <boost/spirit/home/classic/phoenix/casts.hpp>
+#include <boost/spirit/home/classic/phoenix/new.hpp>
+
+#endif // !defined(BOOST_SPIRIT_PHOENIX_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/actor.hpp
new file mode 100644 (file)
index 0000000..67a4b02
--- /dev/null
@@ -0,0 +1,604 @@
+/*=============================================================================
+    Phoenix v1.2
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_ACTOR_HPP
+#define PHOENIX_ACTOR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+//  These are forward declared here because we cannot include impl.hpp
+//  or operators.hpp yet but the actor's assignment operator and index
+//  operator are required to be members.
+
+//////////////////////////////////
+struct assign_op;
+struct index_op;
+
+//////////////////////////////////
+namespace impl {
+
+    template <typename OperationT, typename BaseT, typename B>
+    struct make_binary1;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  unpack_tuple class
+//
+//      This class is used to unpack a supplied tuple such, that the members of 
+//      this tuple will be handled as if they would be supplied separately.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT>
+struct unpack_tuple : public TupleT {
+
+    typedef TupleT tuple_t;
+    
+    unpack_tuple() {}
+    unpack_tuple(tuple_t const &tuple_) : TupleT(tuple_) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  actor class
+//
+//      This class is a protocol class for all actors. This class is
+//      essentially an interface contract. The actor class does not
+//      really know how how to act on anything but instead relies on the
+//      template parameter BaseT (from which the actor will derive from)
+//      to do the actual action.
+//
+//      An actor is a functor that is capable of accepting arguments up
+//      to a predefined maximum. It is up to the base class to do the
+//      actual processing or possibly to limit the arity (no. of
+//      arguments) passed in. Upon invocation of the functor through a
+//      supplied operator(), the actor funnels the arguments passed in
+//      by the client into a tuple and calls the base eval member
+//      function.
+//
+//      Schematically:
+//
+//          arg0 ---------|
+//          arg1 ---------|
+//          arg2 ---------|---> tupled_args ---> base.eval
+//          ...           |
+//          argN ---------|
+//
+//          actor::operator()(arg0, arg1... argN)
+//              ---> BaseT::eval(tupled_args);
+//
+//      Actor base classes from which this class inherits from are
+//      expected to have a corresponding member function eval compatible
+//      with the conceptual Interface:
+//
+//          template <typename TupleT>
+//          actor_return_type
+//          eval(TupleT const& args) const;
+//
+//      where args are the actual arguments passed in by the client
+//      funneled into a tuple (see tuple.hpp for details).
+//
+//      The actor_return_type can be anything. Base classes are free to
+//      return any type, even argument dependent types (types that are
+//      deduced from the types of the arguments). After evaluating the
+//      parameters and doing some computations or actions, the eval
+//      member function concludes by returning something back to the
+//      client. To do this, the forwarding function (the actor's
+//      operator()) needs to know the return type of the eval member
+//      function that it is calling. For this purpose, actor base
+//      classes are required to provide a nested template class:
+//
+//          template <typename TupleT>
+//          struct result;
+//
+//      This auxiliary class provides the result type information
+//      returned by the eval member function of a base actor class. The
+//      nested template class result should have a typedef 'type' that
+//      reflects the return type of its member function eval. It is
+//      basically a type computer that answers the question "given
+//      arguments packed into a TupleT type, what will be the result
+//      type of the eval member function of ActorT?". The template class
+//      actor_result queries this to extract the return type of an
+//      actor. Example:
+//
+//          typedef typename actor_result<ActorT, TupleT>::type
+//              actor_return_type;
+//
+//      where actor_return_type is the actual type returned by ActorT's
+//      eval member function given some arguments in a TupleT.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActorT, typename TupleT>
+struct actor_result {
+
+    typedef typename ActorT::template result<TupleT>::type type;
+    typedef typename remove_reference<type>::type plain_type;
+};
+
+//////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+template <typename BaseT>
+struct actor : public BaseT {
+
+    actor();
+    actor(BaseT const& base);
+
+    typename actor_result<BaseT, tuple<> >::type
+    operator()() const;
+
+    template <typename A>
+    typename actor_result<BaseT, tuple<A&> >::type
+    operator()(A& a) const;
+
+    template <typename A, typename B>
+    typename actor_result<BaseT, tuple<A&, B&> >::type
+    operator()(A& a, B& b) const;
+
+    template <typename A, typename B, typename C>
+    typename actor_result<BaseT, tuple<A&, B&, C&> >::type
+    operator()(A& a, B& b, C& c) const;
+
+#if PHOENIX_LIMIT > 3
+    template <typename A, typename B, typename C, typename D>
+    typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
+    operator()(A& a, B& b, C& c, D& d) const;
+
+    template <typename A, typename B, typename C, typename D, typename E>
+    typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
+    operator()(A& a, B& b, C& c, D& d, E& e) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F>
+    typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&> >::type
+    operator()(A& a, B& b, C& c, D& d, E& e, F& f) const;
+
+#if PHOENIX_LIMIT > 6
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G>
+    typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&, G&> >::type
+    operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+    >::type
+    operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+    >::type
+    operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i) const;
+
+#if PHOENIX_LIMIT > 9
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+        K& k) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+        K& k, L& l) const;
+
+#if PHOENIX_LIMIT > 12
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+        K& k, L& l, M& m) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+        K& k, L& l, M& m, N& n) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O>
+    typename actor_result<BaseT,
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+    >::type
+    operator()(
+        A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+        K& k, L& l, M& m, N& n, O& o) const;
+
+#endif
+#endif
+#endif
+#endif
+
+    template <typename TupleT>
+    typename actor_result<BaseT, unpack_tuple<TupleT> >::type
+    operator()(unpack_tuple<TupleT> const &t) const;
+    
+    template <typename B>
+    typename impl::make_binary1<assign_op, BaseT, B>::type
+    operator=(B const& b) const;
+
+    template <typename B>
+    typename impl::make_binary1<index_op, BaseT, B>::type
+    operator[](B const& b) const;
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+//
+//  as_actor
+//
+//      as_actor is a meta-program that converts an arbitrary type into
+//      an actor. All participants in the framework must be first-class
+//      actors. This meta-program is used all throughout the framework
+//      whenever an unknown type needs to be converted to an actor.
+//      as_actor specializations are expected to have a typedef 'type'.
+//      This is the destination actor type. A static member function
+//      'convert' converts an object to this target type.
+//
+//      The meta-program does no conversion if the object to be
+//      converted is already an actor.
+//
+///////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct as_actor;
+
+//////////////////////////////////
+template <typename BaseT>
+struct as_actor<actor<BaseT> > {
+
+    typedef actor<BaseT> type;
+    static type convert(actor<BaseT> const& x) { return x; }
+};
+
+//////////////////////////////////
+template <>
+struct as_actor<nil_t> {
+
+    typedef nil_t type;
+    static nil_t convert(nil_t /*x*/)
+    { return nil_t(); }
+};
+
+//////////////////////////////////
+template <>
+struct as_actor<void> {
+
+    typedef void type;
+    //  ERROR!!!
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  actor class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BaseT>
+actor<BaseT>::actor()
+:   BaseT() {}
+
+//////////////////////////////////
+template <typename BaseT>
+actor<BaseT>::actor(BaseT const& base)
+:   BaseT(base) {}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename actor_result<BaseT, tuple<> >::type
+actor<BaseT>::operator()() const
+{
+    return BaseT::eval(tuple<>());
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A>
+inline typename actor_result<BaseT, tuple<A&> >::type
+actor<BaseT>::operator()(A& a_) const
+{
+    return BaseT::eval(tuple<A&>(a_));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B>
+inline typename actor_result<BaseT, tuple<A&, B&> >::type
+actor<BaseT>::operator()(A& a_, B& b_) const
+{
+    return BaseT::eval(tuple<A&, B&>(a_, b_));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C>
+inline typename actor_result<BaseT, tuple<A&, B&, C&> >::type
+actor<BaseT>::operator()(A& a_, B& b_, C& c_) const
+{
+    return BaseT::eval(tuple<A&, B&, C&>(a_, b_, c_));
+}
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C, typename D>
+inline typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
+actor<BaseT>::operator()(A& a_, B& b_, C& c_, D& d_) const
+{
+    return BaseT::eval(tuple<A&, B&, C&, D&>(a_, b_, c_, d_));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C, typename D, typename E>
+inline typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
+actor<BaseT>::operator()(A& a_, B& b_, C& c_, D& d_, E& e_) const
+{
+    return BaseT::eval(tuple<A&, B&, C&, D&, E&>(a_, b_, c_, d_, e_));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&>
+        (a_, b_, c_, d_, e_, f_)
+    );
+}
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&>
+        (a_, b_, c_, d_, e_, f_, g_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+        (a_, b_, c_, d_, e_, f_, g_, h_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_)
+    );
+}
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_,
+    K& k_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_,
+    K& k_, L& l_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_)
+    );
+}
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_,
+    K& k_, L& l_, M& m_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_,
+    K& k_, L& l_, M& m_, N& n_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_)
+    );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+inline typename actor_result<BaseT,
+    tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+>::type
+actor<BaseT>::operator()(
+    A& a_, B& b_, C& c_, D& d_, E& e_, F& f_, G& g_, H& h_, I& i_, J& j_,
+    K& k_, L& l_, M& m_, N& n_, O& o_
+) const
+{
+    return BaseT::eval(
+        tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+        (a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_, o_)
+    );
+}
+
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename TupleT>
+typename actor_result<BaseT, unpack_tuple<TupleT> >::type
+actor<BaseT>::operator()(unpack_tuple<TupleT> const &t) const
+{
+    return BaseT::eval(t);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/binders.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/binders.hpp
new file mode 100644 (file)
index 0000000..a1d1159
--- /dev/null
@@ -0,0 +1,4066 @@
+/*=============================================================================
+    Phoenix v1.2
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_BINDERS_HPP
+#define PHOENIX_BINDERS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/functions.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Binders
+//
+//      There are times when it is desireable to bind a simple functor,
+//      function, member function or member variable for deferred
+//      evaluation. This can be done through the binding facilities
+//      provided below. There are template classes:
+//
+//          1) function_ptr           ( function pointer binder )
+//          2) functor                ( functor pointer binder )
+//          3) member_function_ptr    ( member function pointer binder )
+//          4) member_var_ptr         ( member variable pointer binder )
+//
+//      These template classes are specialized lazy function classes for
+//      functors, function pointers, member function pointers and member
+//      variable pointers, respectively. These are subclasses of the
+//      lazy-function class (see functions.hpp). Each of these has a
+//      corresponding overloaded bind(x) function. Each bind(x) function
+//      generates a suitable binder object.
+//
+//      Example, given a function foo:
+//
+//          void foo_(int n) { std::cout << n << std::endl; }
+//
+//      Here's how the function foo is bound:
+//
+//          bind(&foo_)
+//
+//      This bind expression results to a lazy-function (see
+//      functions.hpp) that is lazily evaluated. This bind expression is
+//      also equivalent to:
+//
+//          function_ptr<void, int> foo = &foo_;
+//
+//      The template parameter of the function_ptr is the return and
+//      argument types of actual signature of the function to be bound
+//      read from left to right:
+//
+//          void foo_(int); ---> function_ptr<void, int>
+//
+//      Either bind(&foo_) and its equivalent foo can now be used in the
+//      same way a lazy function (see functions.hpp) is used:
+//
+//          bind(&foo_)(arg1)
+//
+//      or
+//
+//          foo(arg1)
+//
+//      The latter, of course, being much easier to understand. This is
+//      now a full-fledged lazy function that can finally be evaluated
+//      by another function call invocation. A second function call will
+//      invoke the actual foo function:
+//
+//          int i = 4;
+//          foo(arg1)(i);
+//
+//      will print out "4".
+//
+//      Binding functors and member functions can be done similarly.
+//      Here's how to bind a functor (e.g. std::plus<int>):
+//
+//          bind(std::plus<int>())
+//
+//      or
+//
+//          functor<std::plus<int> > plus;
+//
+//      Again, these are full-fledged lazy functions. In this case,
+//      unlike the first example, expect 2 arguments (std::plus<int>
+//      needs two arguments lhs and rhs). Either or both of which can be
+//      lazily bound:
+//
+//          plus(arg1, arg2)     // arg1 + arg2
+//          plus(100, arg1)      // 100 + arg1
+//          plus(100, 200)       // 300
+//
+//      A bound member function takes in a pointer or reference to an
+//      object as the first argument. For instance, given:
+//
+//          struct xyz { void foo(int) const; };
+//
+//      xyz's foo member function can be bound as:
+//
+//          bind(&xyz::foo)
+//
+//      or
+//
+//          member_function_ptr<void, xyz, int> xyz_foo = &xyz::foo;
+//
+//      The template parameter of the member_function_ptr is the return,
+//      class and argument types of actual signature of the function to
+//      be bound read from left to right:
+//
+//          void xyz::foo_(int); ---> member_function_ptr<void, xyz, int>
+//
+//      Take note that a member_function_ptr lazy-function expects the
+//      first argument to be a pointer or reference to an object. Both
+//      the object (reference or pointer) and the arguments can be
+//      lazily bound. Examples:
+//
+//          xyz obj;
+//          xyz_foo(arg1, arg2)   // arg1.foo(arg2)
+//          xyz_foo(obj, arg1)    // obj.foo(arg1)
+//          xyz_foo(obj, 100)     // obj.foo(100)
+//
+//      Be reminded that var(obj) must be used to call non-const member
+//      functions. For example, if xyz was declared as:
+//
+//          struct xyz { void foo(int); };
+//
+//      the pointer or reference to the object must also be non-const.
+//      Lazily bound arguments are stored as const value by default (see
+//      variable class in primitives.hpp).
+//
+//          xyz_foo(var(obj), 100)    // obj.foo(100)
+//
+//      Finally, member variables can be bound much like member
+//      functions. For instance, given:
+//
+//          struct xyz { int v; };
+//
+//      xyz::v can be bound as:
+//
+//          bind(&xyz::v)
+//      or
+//
+//          member_var_ptr<int, xyz> xyz_v = &xyz::v;
+//
+//      The template parameter of the member_var_ptr is the type of the
+//      variable followed by the class:
+//
+//          int xyz::v; ---> member_var_ptr<int, xyz>
+//
+//      Just like the member_function_ptr, member_var_ptr also expects
+//      the first argument to be a pointer or reference to an object.
+//      Both the object (reference or pointer) and the arguments can be
+//      lazily bound. Examples:
+//
+//          xyz obj;
+//          xyz_v(arg1)   // arg1.v
+//          xyz_v(obj)    // obj.v
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Functor binder
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename FuncT>
+struct functor_action : public FuncT {
+
+#if !defined(__BORLANDC__) && (!defined(__MWERKS__) || (__MWERKS__ > 0x3002))
+
+    template <
+            typename A = nil_t
+        ,   typename B = nil_t
+        ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+        ,   typename D = nil_t
+        ,   typename E = nil_t
+        ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+        ,   typename G = nil_t
+        ,   typename H = nil_t
+        ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+        ,   typename J = nil_t
+        ,   typename K = nil_t
+        ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+        ,   typename M = nil_t
+        ,   typename N = nil_t
+        ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+    >
+    struct result { typedef typename FuncT::result_type type; };
+#endif
+
+    functor_action(FuncT fptr_ = FuncT())
+    :   FuncT(fptr_) {}
+};
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The following specializations are needed because Borland and CodeWarrior
+//  does not accept default template arguments in nested template classes in
+//  classes (i.e functor_action::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename FuncT, typename TupleT>
+struct composite0_result<functor_action<FuncT>, TupleT> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A>
+struct composite1_result<functor_action<FuncT>, TupleT, A> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B>
+struct composite2_result<functor_action<FuncT>, TupleT, A, B> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C>
+struct composite3_result<functor_action<FuncT>, TupleT, A, B, C> {
+
+    typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D>
+struct composite4_result<functor_action<FuncT>, TupleT,
+    A, B, C, D> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct composite6_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F> {
+
+    typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct composite7_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct composite8_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct composite9_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I> {
+
+    typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct composite11_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct composite12_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L> {
+
+    typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct composite13_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct composite14_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+    typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<functor_action<FuncT>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+    typedef typename FuncT::result_type type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename FuncT>
+struct functor : public function<functor_action<FuncT> > {
+
+    functor(FuncT func)
+    :   function<functor_action<FuncT> >(functor_action<FuncT>(func)) {};
+};
+
+//////////////////////////////////
+template <typename FuncT>
+inline functor<FuncT>
+bind(FuncT func)
+{
+    return functor<FuncT>(func);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member variable pointer binder
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+    //////////////////////////////////
+    template <typename T>
+    struct as_ptr {
+
+        typedef T* pointer_type;
+
+        static T* get(T& ref)
+        { return &ref; }
+    };
+
+    //////////////////////////////////
+    template <typename T>
+    struct as_ptr<T*> {
+
+        typedef T* pointer_type;
+
+        static T* get(T* ptr)
+        { return ptr; }
+    };
+}
+
+//////////////////////////////////
+template <typename ActionT, typename ClassT>
+struct member_var_ptr_action_result {
+
+    typedef typename ActionT::template result<ClassT>::type type;
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+struct member_var_ptr_action {
+
+    typedef member_var_ptr_action<T, ClassT> self_t;
+
+    template <typename CT>
+    struct result {
+        typedef typename boost::mpl::if_<boost::is_const<CT>, T const&, T&
+            >::type type;
+    };
+
+    typedef T ClassT::*mem_var_ptr_t;
+
+    member_var_ptr_action(mem_var_ptr_t ptr_)
+    :   ptr(ptr_) {}
+
+    template <typename CT>
+    typename member_var_ptr_action_result<self_t, CT>::type
+    operator()(CT& obj) const
+    { return impl::as_ptr<CT>::get(obj)->*ptr; }
+
+    mem_var_ptr_t ptr;
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+struct member_var_ptr
+:   public function<member_var_ptr_action<T, ClassT> > {
+
+    member_var_ptr(T ClassT::*mp)
+    :   function<member_var_ptr_action<T, ClassT> >
+        (member_var_ptr_action<T, ClassT>(mp)) {}
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+inline member_var_ptr<T, ClassT>
+bind(T ClassT::*mp)
+{
+    return member_var_ptr<T, ClassT>(mp);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename RT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+    ,   typename NU = nil_t  // Not used
+>
+struct function_ptr_action;
+
+//////////////////////////////////
+template <
+    typename RT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct function_ptr
+:   public function<function_ptr_action<RT
+    , A, B, C
+#if PHOENIX_LIMIT > 3
+    , D, E, F
+#if PHOENIX_LIMIT > 6
+    , G, H, I
+#if PHOENIX_LIMIT > 9
+    , J, K, L
+#if PHOENIX_LIMIT > 12
+    , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > > {
+
+    typedef function_ptr_action<RT
+        , A, B, C
+#if PHOENIX_LIMIT > 3
+        , D, E, F
+#if PHOENIX_LIMIT > 6
+        , G, H, I
+#if PHOENIX_LIMIT > 9
+        , J, K, L
+#if PHOENIX_LIMIT > 12
+        , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > action_t;
+
+    template <typename FPT>
+    function_ptr(FPT fp)
+    :   function<action_t>(action_t(fp)) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT>
+struct function_ptr_action<RT,
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)();
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()() const
+    { return fptr(); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT>
+inline function_ptr<RT>
+bind(RT(*fptr)())
+{
+    return function_ptr<RT>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A>
+struct function_ptr_action<RT,
+    A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A);
+
+    template <typename A_>
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(A a) const
+    { return fptr(a); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A>
+inline function_ptr<RT, A>
+bind(RT(*fptr)(A))
+{
+    return function_ptr<RT, A>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B>
+struct function_ptr_action<RT,
+    A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B);
+
+    template <typename A_, typename B_>
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(A a, B b) const
+    { return fptr(a, b); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B>
+inline function_ptr<RT, A, B>
+bind(RT(*fptr)(A, B))
+{
+    return function_ptr<RT, A, B>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B, typename C>
+struct function_ptr_action<RT,
+    A, B, C,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C);
+
+    template <typename A_, typename B_, typename C_>
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(A a, B b, C c) const
+    { return fptr(a, b, c); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B, typename C>
+inline function_ptr<RT, A, B, C>
+bind(RT(*fptr)(A, B, C))
+{
+    return function_ptr<RT, A, B, C>(fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B, typename C, typename D>
+struct function_ptr_action<RT,
+    A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D);
+
+    template <typename A_, typename B_, typename C_, typename D_>
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(A a, B b, C c, D d) const
+    { return fptr(a, b, c, d); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B, typename C, typename D>
+inline function_ptr<RT, A, B, C, D>
+bind(RT(*fptr)(A, B, C, D))
+{
+    return function_ptr<RT, A, B, C, D>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e
+    ) const
+    { return fptr(a, b, c, d, e); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E
+>
+inline function_ptr<RT, A, B, C, D, E>
+bind(RT(*fptr)(A, B, C, D, E))
+{
+    return function_ptr<RT, A, B, C, D, E>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f
+    ) const
+    { return fptr(a, b, c, d, e, f); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F
+>
+inline function_ptr<RT, A, B, C, D, E, F>
+bind(RT(*fptr)(A, B, C, D, E, F))
+{
+    return function_ptr<RT, A, B, C, D, E, F>(fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g
+    ) const
+    { return fptr(a, b, c, d, e, f, g); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G
+>
+inline function_ptr<RT, A, B, C, D, E, F, G>
+bind(RT(*fptr)(A, B, C, D, E, F, G))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_,
+        typename K_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j,
+        K k
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j, k); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_,
+        typename K_, typename L_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j,
+        K k, L l
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j, k, l); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_,
+        typename K_, typename L_, typename M_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j,
+        K k, L l, M m
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_,
+        typename K_, typename L_, typename M_, typename N_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j,
+        K k, L l, M m, N n
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Function pointer binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O
+>
+struct function_ptr_action<RT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+
+    template <
+        typename A_, typename B_, typename C_, typename D_, typename E_,
+        typename F_, typename G_, typename H_, typename I_, typename J_,
+        typename K_, typename L_, typename M_, typename N_, typename O_
+    >
+    struct result { typedef result_type type; };
+
+    function_ptr_action(func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e,
+        F f, G g, H h, I i, J j,
+        K k, L l, M m, N n, O o
+    ) const
+    { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); }
+
+    func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+    return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename RT,
+    typename ClassT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+    ,   typename NU = nil_t  // Not used
+>
+struct member_function_ptr_action;
+
+//////////////////////////////////
+template <
+    typename RT,
+    typename ClassT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct member_function_ptr
+:   public function<member_function_ptr_action<RT, ClassT
+    , A, B, C
+#if PHOENIX_LIMIT > 3
+    , D, E, F
+#if PHOENIX_LIMIT > 6
+    , G, H, I
+#if PHOENIX_LIMIT > 9
+    , J, K, L
+#if PHOENIX_LIMIT > 12
+    , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > > {
+
+    typedef member_function_ptr_action<RT, ClassT
+        , A, B, C
+#if PHOENIX_LIMIT > 3
+        , D, E, F
+#if PHOENIX_LIMIT > 6
+        , G, H, I
+#if PHOENIX_LIMIT > 9
+        , J, K, L
+#if PHOENIX_LIMIT > 12
+        , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > action_t;
+
+    template <typename FPT>
+    member_function_ptr(FPT fp)
+    :   function<action_t>(action_t(fp)) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT>
+struct member_function_ptr_action<RT, ClassT,
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)();
+    typedef RT(ClassT::*cmf)() const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT>
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT>
+inline member_function_ptr<RT, ClassT>
+bind(RT(ClassT::*fptr)())
+{
+    return member_function_ptr<RT, ClassT>(fptr);
+}
+
+template <typename RT, typename ClassT>
+inline member_function_ptr<RT, ClassT const>
+bind(RT(ClassT::*fptr)() const)
+{
+    return member_function_ptr<RT, ClassT const>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+struct member_function_ptr_action<RT, ClassT,
+    A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A);
+    typedef RT(ClassT::*cmf)(A) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT, typename A_>
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj, A a) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline member_function_ptr<RT, ClassT, A>
+bind(RT(ClassT::*fptr)(A))
+{
+    return member_function_ptr<RT, ClassT, A>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline member_function_ptr<RT, ClassT const, A>
+bind(RT(ClassT::*fptr)(A) const)
+{
+    return member_function_ptr<RT, ClassT const, A>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B);
+    typedef RT(ClassT::*cmf)(A, B) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT, typename A_, typename B_>
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj, A a, B b) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline member_function_ptr<RT, ClassT, A, B>
+bind(RT(ClassT::*fptr)(A, B))
+{
+    return member_function_ptr<RT, ClassT, A, B>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline member_function_ptr<RT, ClassT const, A, B>
+bind(RT(ClassT::*fptr)(A, B) const)
+{
+    return member_function_ptr<RT, ClassT const, A, B>(fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C);
+    typedef RT(ClassT::*cmf)(A, B, C) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT, typename A_, typename B_, typename C_>
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj, A a, B b, C c) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline member_function_ptr<RT, ClassT, A, B, C>
+bind(RT(ClassT::*fptr)(A, B, C))
+{
+    return member_function_ptr<RT, ClassT, A, B, C>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline member_function_ptr<RT, ClassT const, A, B, C>
+bind(RT(ClassT::*fptr)(A, B, C) const)
+{
+    return member_function_ptr<RT, ClassT const, A, B, C>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D);
+    typedef RT(ClassT::*cmf)(A, B, C, D) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D>
+bind(RT(ClassT::*fptr)(A, B, C, D))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D>
+bind(RT(ClassT::*fptr)(A, B, C, D) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E>
+bind(RT(ClassT::*fptr)(A, B, C, D, E))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E>
+bind(RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E>(fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H>(fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i
+    ) const
+    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h, i); }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j, k);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j, k, l);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j, k, l, m);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_, typename N_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Member function pointer binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+struct member_function_ptr_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT,
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_, typename N_,
+        typename O_
+    >
+    struct result { typedef result_type type; };
+
+    member_function_ptr_action(mem_func_ptr_t fptr_)
+    :   fptr(fptr_) {}
+
+    template <typename CT>
+    result_type operator()(CT& obj,
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
+    ) const
+    {
+        return (impl::as_ptr<CT>::get(obj)->*fptr)
+            (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+    }
+
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+    return member_function_ptr<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+    return member_function_ptr<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename RT,
+    typename ClassT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+    ,   typename NU = nil_t  // Not used
+>
+struct bound_member_action;
+
+//////////////////////////////////
+template <
+    typename RT,
+    typename ClassT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct bound_member
+:   public function<bound_member_action<RT, ClassT
+    , A, B, C
+#if PHOENIX_LIMIT > 3
+    , D, E, F
+#if PHOENIX_LIMIT > 6
+    , G, H, I
+#if PHOENIX_LIMIT > 9
+    , J, K, L
+#if PHOENIX_LIMIT > 12
+    , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > > {
+
+    typedef bound_member_action<RT, ClassT
+        , A, B, C
+#if PHOENIX_LIMIT > 3
+        , D, E, F
+#if PHOENIX_LIMIT > 6
+        , G, H, I
+#if PHOENIX_LIMIT > 9
+        , J, K, L
+#if PHOENIX_LIMIT > 12
+        , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > action_t;
+
+    template <typename CT, typename FPT>
+    bound_member(CT & c, FPT fp)
+    :   function<action_t>(action_t(c,fp)) {}
+
+#if !defined(__BORLANDC__)
+    template <typename CT, typename FPT>
+    bound_member(CT * c, FPT fp)
+    :   function<action_t>(action_t(c,fp)) {}
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename RT, typename ClassT>
+struct bound_member_action<RT, ClassT,
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)();
+    typedef RT(ClassT::*cmf)() const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename CT>
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()() const
+    { return (obj->*fptr)(); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT>
+bind(ClassT & obj, RT(ClassT::*fptr)())
+{
+    return bound_member<RT,ClassT>(obj, fptr);
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT>
+bind(ClassT * obj, RT(ClassT::*fptr)())
+{
+#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
+    return bound_member<RT,ClassT>(*obj, fptr);
+#else
+    return bound_member<RT,ClassT>(obj, fptr);
+#endif
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT const>
+bind(ClassT const& obj, RT(ClassT::*fptr)())
+{
+    return bound_member<RT,ClassT const>(obj, fptr);
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT const>
+bind(ClassT  const* obj, RT(ClassT::*fptr)() const)
+{
+#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
+    return bound_member<RT,ClassT const>(*obj, fptr);
+#else
+    return bound_member<RT,ClassT const>(obj, fptr);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+struct bound_member_action<RT, ClassT,
+    A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A);
+    typedef RT(ClassT::*cmf)(A) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename A_>
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(A a) const
+    { return (obj->*fptr)(a); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT, A>
+bind(ClassT & obj, RT(ClassT::*fptr)(A))
+{
+    return bound_member<RT, ClassT, A>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT, A>
+bind(ClassT * obj, RT(ClassT::*fptr)(A))
+{
+    return bound_member<RT, ClassT, A>(obj,fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT const, A>
+bind(ClassT const& obj, RT(ClassT::*fptr)(A) const)
+{
+    return bound_member<RT, ClassT const, A>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT const, A>
+bind(ClassT const* obj, RT(ClassT::*fptr)(A) const)
+{
+    return bound_member<RT, ClassT const, A>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+struct bound_member_action<RT, ClassT,
+    A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B);
+    typedef RT(ClassT::*cmf)(A, B) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename A_, typename B_>
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(A a, B b) const
+    { return (obj->*fptr)(a, b); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT, A, B>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B))
+{
+    return bound_member<RT, ClassT, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT, A, B>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B))
+{
+    return bound_member<RT, ClassT, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT const, A, B>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B) const)
+{
+    return bound_member<RT, ClassT const, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT const, A, B>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B) const)
+{
+    return bound_member<RT, ClassT const, A, B>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+struct bound_member_action<RT, ClassT,
+    A, B, C, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C);
+    typedef RT(ClassT::*cmf)(A, B, C) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename A_, typename B_, typename C_>
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(A a, B b, C c) const
+    { return (obj->*fptr)(a, b, c); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT, A, B, C>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C))
+{
+    return bound_member<RT, ClassT, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT, A, B, C>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C))
+{
+    return bound_member<RT, ClassT, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT const, A, B, C>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C) const)
+{
+    return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT const, A, B, C>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C) const)
+{
+    return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D);
+    typedef RT(ClassT::*cmf)(A, B, C, D) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename A_, typename B_, typename C_, typename D_>
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(A a, B b, C c, D d) const
+    { return (obj->*fptr)(a, b, c, d); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT, A, B, C, D>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT, A, B, C, D>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT const, A, B, C, D>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT const, A, B, C, D>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <typename A_, typename B_, typename C_, typename D_,
+        typename E_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e
+    ) const
+    { return (obj->*fptr)(a, b, c, d, e); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline bound_member<RT, ClassT, A, B, C, D, E>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline bound_member<RT, ClassT, A, B, C, D, E>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f
+    ) const
+    { return (obj->*fptr)(a, b, c, d, e, f); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g
+    ) const
+    { return (obj->*fptr)(a, b, c, d, e, f, g); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h
+    ) const
+    { return (obj->*fptr)(a, b, c, d, e, f, g, h); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i
+    ) const
+    { return (obj->*fptr)(a, b, c, d, e, f, g, h, i); }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_, typename N_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Bound member function binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+struct bound_member_action<RT, ClassT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+    typedef RT result_type;
+    typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+    typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
+    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+        mem_func_ptr_t;
+
+    template <
+        typename A_, typename B_, typename C_, typename D_,
+        typename E_, typename F_, typename G_, typename H_, typename I_,
+        typename J_, typename K_, typename L_, typename M_, typename N_,
+        typename O_
+    >
+    struct result { typedef result_type type; };
+
+    template <typename CT>
+    bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+    :   obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+    result_type operator()(
+        A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
+    ) const
+    {
+        return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+    }
+
+    typename impl::as_ptr<ClassT>::pointer_type obj;
+    mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+    return bound_member<
+        RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+    typename A, typename B, typename C, typename D,
+    typename E, typename F, typename G, typename H, typename I,
+    typename J, typename K, typename L, typename M, typename N,
+    typename O
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+    return bound_member<
+        RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/casts.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/casts.hpp
new file mode 100644 (file)
index 0000000..84922a7
--- /dev/null
@@ -0,0 +1,1470 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Hartmut Kaiser
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef PHOENIX_CASTS_HPP
+#define PHOENIX_CASTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Phoenix predefined maximum construct_ limit. This limit defines the maximum
+//  number of parameters supported for calles to the set of construct_ template
+//  functions (lazy object construction, see below). This number defaults to 3.
+//  The actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//  PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
+
+#if !defined(PHOENIX_CONSTRUCT_LIMIT)
+#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
+#endif
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Lazy C++ casts
+//
+//      The set of lazy C++ cast template classes and functions provide a way
+//      of lazily casting certain type to another during parsing.
+//      The lazy C++ templates are (syntactically) used very much like
+//      the well known C++ casts:
+//
+//          A *a = static_cast_<A *>(...actor returning a convertible type...);
+//
+//      where the given parameter should be an actor, which eval() function
+//      returns a convertible type.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename A>
+struct static_cast_l {
+
+    template <typename TupleT>
+    struct result { typedef T type; };
+
+    static_cast_l(A const& a_)
+    :   a(a_) {}
+
+    template <typename TupleT>
+    T
+    eval(TupleT const& args) const
+    {
+        return static_cast<T>(a.eval(args));
+    }
+
+    A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<static_cast_l<T, BaseAT> >
+static_cast_(actor<BaseAT> const& a)
+{
+    typedef static_cast_l<T, BaseAT> cast_t;
+    return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct dynamic_cast_l {
+
+    template <typename TupleT>
+    struct result { typedef T type; };
+
+    dynamic_cast_l(A const& a_)
+    :   a(a_) {}
+
+    template <typename TupleT>
+    T
+    eval(TupleT const& args) const
+    {
+        return dynamic_cast<T>(a.eval(args));
+    }
+
+    A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<dynamic_cast_l<T, BaseAT> >
+dynamic_cast_(actor<BaseAT> const& a)
+{
+    typedef dynamic_cast_l<T, BaseAT> cast_t;
+    return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct reinterpret_cast_l {
+
+    template <typename TupleT>
+    struct result { typedef T type; };
+
+    reinterpret_cast_l(A const& a_)
+    :   a(a_) {}
+
+    template <typename TupleT>
+    T
+    eval(TupleT const& args) const
+    {
+        return reinterpret_cast<T>(a.eval(args));
+    }
+
+    A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<reinterpret_cast_l<T, BaseAT> >
+reinterpret_cast_(actor<BaseAT> const& a)
+{
+    typedef reinterpret_cast_l<T, BaseAT> cast_t;
+    return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct const_cast_l {
+
+    template <typename TupleT>
+    struct result { typedef T type; };
+
+    const_cast_l(A const& a_)
+    :   a(a_) {}
+
+    template <typename TupleT>
+    T
+    eval(TupleT const& args) const
+    {
+        return const_cast<T>(a.eval(args));
+    }
+
+    A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<const_cast_l<T, BaseAT> >
+const_cast_(actor<BaseAT> const& a)
+{
+    typedef const_cast_l<T, BaseAT> cast_t;
+    return actor<cast_t>(cast_t(a));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  construct_
+//
+//      Lazy object construction
+//
+//      The set of construct_<> template classes and functions provide a way
+//      of lazily constructing certain object from a arbitrary set of
+//      actors during parsing.
+//      The construct_ templates are (syntactically) used very much like
+//      the well known C++ casts:
+//
+//          A a = construct_<A>(...arbitrary list of actors...);
+//
+//      where the given parameters are submitted as parameters to the
+//      contructor of the object of type A. (This certainly implies, that
+//      type A has a constructor with a fitting set of parameter types
+//      defined.)
+//
+//      The maximum number of needed parameters is controlled through the
+//      preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
+//      limit should not be greater than PHOENIX_LIMIT.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct construct_l_0 {
+    typedef T result_type;
+
+    T operator()() const {
+        return T();
+    }
+};
+
+
+template <typename T>
+struct construct_l {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+        ,   typename D
+        ,   typename E
+        ,   typename F
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+        ,   typename G
+        ,   typename H
+        ,   typename I
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+        ,   typename J
+        ,   typename K
+        ,   typename L
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+        ,   typename M
+        ,   typename N
+        ,   typename O
+#endif
+#endif
+#endif
+#endif
+    >
+    struct result { typedef T type; };
+
+    T operator()() const 
+    {
+        return T();
+    }
+
+    template <typename A>
+    T operator()(A const& a) const 
+    {
+        T t(a); 
+        return t;
+    }
+
+    template <typename A, typename B>
+    T operator()(A const& a, B const& b) const 
+    {
+        T t(a, b);
+        return t;
+    }
+
+    template <typename A, typename B, typename C>
+    T operator()(A const& a, B const& b, C const& c) const 
+    {
+        T t(a, b, c);
+        return t;
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+    template <
+        typename A, typename B, typename C, typename D
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d) const
+    {
+        T t(a, b, c, d);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e) const
+    {
+        T t(a, b, c, d, e);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f) const
+    {
+        T t(a, b, c, d, e, f);
+        return t;
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g) const
+    {
+        T t(a, b, c, d, e, f, g);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h) const
+    {
+        T t(a, b, c, d, e, f, g, h);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i) const
+    {
+        T t(a, b, c, d, e, f, g, h, i);
+        return t;
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l);
+        return t;
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+        return t;
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n, O const& o) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+        return t;
+    }
+
+#endif
+#endif
+#endif
+#endif
+};
+
+
+template <typename T>
+struct construct_1 {
+
+    template <
+            typename A
+    >
+    struct result { typedef T type; };
+
+    template <typename A>
+    T operator()(A const& a) const 
+    {
+        T t(a);
+        return t;
+    }
+
+};
+
+template <typename T>
+struct construct_2 {
+
+    template <
+            typename A
+        ,   typename B
+    >
+    struct result { typedef T type; };
+
+    template <typename A, typename B>
+    T operator()(A const& a, B const& b) const 
+    {
+        T t(a, b);
+        return t;
+    }
+
+};
+
+template <typename T>
+struct construct_3 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+    >
+    struct result { typedef T type; };
+
+    template <typename A, typename B, typename C>
+    T operator()(A const& a, B const& b, C const& c) const 
+    {
+        T t(a, b, c);
+        return t;
+    }
+};
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+template <typename T>
+struct construct_4 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d) const
+    {
+        T t(a, b, c, d);
+        return t;
+    }
+};
+
+
+template <typename T>
+struct construct_5 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e) const
+    {
+        T t(a, b, c, d, e);
+        return t;
+    }
+};
+
+
+template <typename T>
+struct construct_6 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f) const
+    {
+        T t(a, b, c, d, e, f);
+        return t;
+    }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+template <typename T>
+struct construct_7 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g) const
+    {
+        T t(a, b, c, d, e, f, g);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_8 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h) const
+    {
+        T t(a, b, c, d, e, f, g, h);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_9 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i) const
+    {
+        T t(a, b, c, d, e, f, g, h, i);
+        return t;
+    }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+template <typename T>
+struct construct_10 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_11 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_12 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l) const
+    {
+        T t(a, b, c, d, f, e, g, h, i, j, k, l);
+        return t;
+    }
+};
+#endif
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+template <typename T>
+struct construct_13 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_14 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+        ,   typename N
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n) const
+    {
+        T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+        return t;
+    }
+};
+
+template <typename T>
+struct construct_15 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+        ,   typename N
+        ,   typename O
+    >
+    struct result { typedef T type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O
+    >
+    T operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n, O const& o) const
+    {
+        T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
+        return t;
+    }
+};
+#endif
+
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The following specializations are needed because Borland and CodeWarrior
+//  does not accept default template arguments in nested template classes in
+//  classes (i.e construct_l::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename TupleT>
+struct composite0_result<construct_l_0<T>, TupleT> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A>
+struct composite1_result<construct_l<T>, TupleT, A> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B>
+struct composite2_result<construct_l<T>, TupleT, A, B> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C>
+struct composite3_result<construct_l<T>, TupleT, A, B, C> {
+
+    typedef T type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D>
+struct composite4_result<construct_l<T>, TupleT,
+    A, B, C, D> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<construct_l<T>, TupleT,
+    A, B, C, D, E> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct composite6_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F> {
+
+    typedef T type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct composite7_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct composite8_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct composite9_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I> {
+
+    typedef T type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct composite11_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct composite12_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L> {
+
+    typedef T type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct composite13_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct composite14_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+    typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<construct_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+    typedef T type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename T>
+inline typename impl::make_composite<construct_l_0<T> >::type
+construct_()
+{
+    typedef impl::make_composite<construct_l_0<T> > make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+    
+    return type_t(composite_type_t(construct_l_0<T>()));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+inline typename impl::make_composite<construct_1<T>, A>::type
+construct_(A const& a)
+{
+    typedef impl::make_composite<construct_1<T>, A> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_1<T>(), 
+        as_actor<A>::convert(a)
+    ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B>
+inline typename impl::make_composite<construct_2<T>, A, B>::type
+construct_(A const& a, B const& b)
+{
+    typedef impl::make_composite<construct_2<T>, A, B> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_2<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b)
+    ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B, typename C>
+inline typename impl::make_composite<construct_3<T>, A, B, C>::type
+construct_(A const& a, B const& b, C const& c)
+{
+    typedef impl::make_composite<construct_3<T>, A, B, C> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_3<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<construct_4<T>, A, B, C, D>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d)
+{
+    typedef
+        impl::make_composite<construct_4<T>, A, B, C, D>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_4<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<construct_5<T>, A, B, C, D, E>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e)
+{
+    typedef
+        impl::make_composite<construct_5<T>, A, B, C, D, E>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_5<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F
+>
+inline typename impl::make_composite<construct_6<T>, A, B, C, D, E, F>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f)
+{
+    typedef
+        impl::make_composite<construct_6<T>, A, B, C, D, E, F>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_6<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G
+>
+inline typename impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g)
+{
+    typedef
+        impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_7<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H
+>
+inline typename impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h)
+{
+    typedef
+        impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_8<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i)
+{
+    typedef
+        impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_9<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+    construct_10<T>, A, B, C, D, E, F, G, H, I, J>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j)
+{
+    typedef
+        impl::make_composite<
+            construct_10<T>, A, B, C, D, E, F, G, H, I, J
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_10<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K
+>
+inline typename impl::make_composite<
+    construct_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k)
+{
+    typedef
+        impl::make_composite<
+            construct_11<T>, A, B, C, D, E, F, G, H, I, J, K
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_11<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L
+>
+inline typename impl::make_composite<
+    construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l)
+{
+    typedef
+        impl::make_composite<
+            construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_12<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M
+>
+inline typename impl::make_composite<
+    construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m)
+{
+    typedef
+        impl::make_composite<
+            construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_13<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+    construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n)
+{
+    typedef
+        impl::make_composite<
+            construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_14<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+    construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
+construct_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n, O const& o)
+{
+    typedef
+        impl::make_composite<
+            construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(construct_15<T>(), 
+        as_actor<A>::convert(a), 
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n),
+        as_actor<O>::convert(o)
+    ));
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif // PHOENIX_CASTS_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/closures.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/closures.hpp
new file mode 100644 (file)
index 0000000..6493e38
--- /dev/null
@@ -0,0 +1,446 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+    MT code Copyright (c) 2002-2003 Martin Wille
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef CLASSIC_PHOENIX_CLOSURES_HPP
+#define CLASSIC_PHOENIX_CLOSURES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/assert.hpp>
+
+#ifdef PHOENIX_THREADSAFE
+#include <boost/thread/tss.hpp>
+#include <boost/thread/once.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Adaptable closures
+//
+//      The framework will not be complete without some form of closures
+//      support. Closures encapsulate a stack frame where local
+//      variables are created upon entering a function and destructed
+//      upon exiting. Closures provide an environment for local
+//      variables to reside. Closures can hold heterogeneous types.
+//
+//      Phoenix closures are true hardware stack based closures. At the
+//      very least, closures enable true reentrancy in lambda functions.
+//      A closure provides access to a function stack frame where local
+//      variables reside. Modeled after Pascal nested stack frames,
+//      closures can be nested just like nested functions where code in
+//      inner closures may access local variables from in-scope outer
+//      closures (accessing inner scopes from outer scopes is an error
+//      and will cause a run-time assertion failure).
+//
+//      There are three (3) interacting classes:
+//
+//      1) closure:
+//
+//      At the point of declaration, a closure does not yet create a
+//      stack frame nor instantiate any variables. A closure declaration
+//      declares the types and names[note] of the local variables. The
+//      closure class is meant to be subclassed. It is the
+//      responsibility of a closure subclass to supply the names for
+//      each of the local variable in the closure. Example:
+//
+//          struct my_closure : closure<int, string, double> {
+//
+//              member1 num;        // names the 1st (int) local variable
+//              member2 message;    // names the 2nd (string) local variable
+//              member3 real;       // names the 3rd (double) local variable
+//          };
+//
+//          my_closure clos;
+//
+//      Now that we have a closure 'clos', its local variables can be
+//      accessed lazily using the dot notation. Each qualified local
+//      variable can be used just like any primitive actor (see
+//      primitives.hpp). Examples:
+//
+//          clos.num = 30
+//          clos.message = arg1
+//          clos.real = clos.num * 1e6
+//
+//      The examples above are lazily evaluated. As usual, these
+//      expressions return composite actors that will be evaluated
+//      through a second function call invocation (see operators.hpp).
+//      Each of the members (clos.xxx) is an actor. As such, applying
+//      the operator() will reveal its identity:
+//
+//          clos.num() // will return the current value of clos.num
+//
+//      *** [note] Acknowledgement: Juan Carlos Arevalo-Baeza (JCAB)
+//      introduced and initilally implemented the closure member names
+//      that uses the dot notation.
+//
+//      2) closure_member
+//
+//      The named local variables of closure 'clos' above are actually
+//      closure members. The closure_member class is an actor and
+//      conforms to its conceptual interface. member1..memberN are
+//      predefined typedefs that correspond to each of the listed types
+//      in the closure template parameters.
+//
+//      3) closure_frame
+//
+//      When a closure member is finally evaluated, it should refer to
+//      an actual instance of the variable in the hardware stack.
+//      Without doing so, the process is not complete and the evaluated
+//      member will result to an assertion failure. Remember that the
+//      closure is just a declaration. The local variables that a
+//      closure refers to must still be instantiated.
+//
+//      The closure_frame class does the actual instantiation of the
+//      local variables and links these variables with the closure and
+//      all its members. There can be multiple instances of
+//      closure_frames typically situated in the stack inside a
+//      function. Each closure_frame instance initiates a stack frame
+//      with a new set of closure local variables. Example:
+//
+//          void foo()
+//          {
+//              closure_frame<my_closure> frame(clos);
+//              /* do something */
+//          }
+//
+//      where 'clos' is an instance of our closure 'my_closure' above.
+//      Take note that the usage above precludes locally declared
+//      classes. If my_closure is a locally declared type, we can still
+//      use its self_type as a paramater to closure_frame:
+//
+//          closure_frame<my_closure::self_type> frame(clos);
+//
+//      Upon instantiation, the closure_frame links the local variables
+//      to the closure. The previous link to another closure_frame
+//      instance created before is saved. Upon destruction, the
+//      closure_frame unlinks itself from the closure and relinks the
+//      preceding closure_frame prior to this instance.
+//
+//      The local variables in the closure 'clos' above is default
+//      constructed in the stack inside function 'foo'. Once 'foo' is
+//      exited, all of these local variables are destructed. In some
+//      cases, default construction is not desirable and we need to
+//      initialize the local closure variables with some values. This
+//      can be done by passing in the initializers in a compatible
+//      tuple. A compatible tuple is one with the same number of
+//      elements as the destination and where each element from the
+//      destination can be constructed from each corresponding element
+//      in the source. Example:
+//
+//          tuple<int, char const*, int> init(123, "Hello", 1000);
+//          closure_frame<my_closure> frame(clos, init);
+//
+//      Here now, our closure_frame's variables are initialized with
+//      int: 123, char const*: "Hello" and int: 1000.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl
+{
+    ///////////////////////////////////////////////////////////////////////
+    // closure_frame_holder is a simple class that encapsulates the
+    // storage for a frame pointer. It uses thread specific data in
+    // case when multithreading is enabled, an ordinary pointer otherwise
+    //
+    // it has get() and set() member functions. set() has to be used
+    // _after_ get(). get() contains intialisation code in the multi
+    // threading case
+    //
+    // closure_frame_holder is used by the closure<> class to store
+    // the pointer to the current frame.
+    //
+#ifndef PHOENIX_THREADSAFE
+    template <typename FrameT>
+    struct closure_frame_holder
+    {
+        typedef FrameT frame_t;
+        typedef frame_t *frame_ptr;
+
+        closure_frame_holder() : frame(0) {}
+
+        frame_ptr &get() { return frame; }
+        void set(frame_t *f) { frame = f; }
+
+    private:
+        frame_ptr frame;
+
+        // no copies, no assignments
+        closure_frame_holder(closure_frame_holder const &);
+        closure_frame_holder &operator=(closure_frame_holder const &);
+    };
+#else
+    template <typename FrameT>
+    struct closure_frame_holder
+    {
+        typedef FrameT   frame_t;
+        typedef frame_t *frame_ptr;
+
+        closure_frame_holder() : tsp_frame() {}
+
+        frame_ptr &get()
+        {
+            if (!tsp_frame.get())
+                tsp_frame.reset(new frame_ptr(0));
+            return *tsp_frame;
+        }
+        void set(frame_ptr f)
+        {
+            *tsp_frame = f;
+        }
+
+    private:
+        boost::thread_specific_ptr<frame_ptr> tsp_frame;
+
+        // no copies, no assignments
+        closure_frame_holder(closure_frame_holder const &);
+        closure_frame_holder &operator=(closure_frame_holder const &);
+    };
+#endif
+} // namespace phoenix::impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  closure_frame class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ClosureT>
+class closure_frame : public ClosureT::tuple_t {
+
+public:
+
+    closure_frame(ClosureT const& clos)
+    : ClosureT::tuple_t(), save(clos.frame.get()), frame(clos.frame)
+    { clos.frame.set(this); }
+
+    template <typename TupleT>
+    closure_frame(ClosureT const& clos, TupleT const& init)
+    : ClosureT::tuple_t(init), save(clos.frame.get()), frame(clos.frame)
+    { clos.frame.set(this); }
+
+    ~closure_frame()
+    { frame.set(save); }
+
+private:
+
+    closure_frame(closure_frame const&);            // no copy
+    closure_frame& operator=(closure_frame const&); // no assign
+
+    closure_frame* save;
+    impl::closure_frame_holder<closure_frame>& frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  closure_member class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ClosureT>
+class closure_member {
+
+public:
+
+    typedef typename ClosureT::tuple_t tuple_t;
+
+    closure_member()
+    : frame(ClosureT::closure_frame_holder_ref()) {}
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename tuple_element<
+            N, typename ClosureT::tuple_t
+        >::rtype type;
+    };
+
+    template <typename TupleT>
+    typename tuple_element<N, typename ClosureT::tuple_t>::rtype
+    eval(TupleT const& /*args*/) const
+    {
+        using namespace std;
+        BOOST_ASSERT(frame.get() != 0);
+        return (*frame.get())[tuple_index<N>()];
+    }
+
+private:
+    impl::closure_frame_holder<typename ClosureT::closure_frame_t> &frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  closure class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+        typename T0 = nil_t
+    ,   typename T1 = nil_t
+    ,   typename T2 = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename T3 = nil_t
+    ,   typename T4 = nil_t
+    ,   typename T5 = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename T6 = nil_t
+    ,   typename T7 = nil_t
+    ,   typename T8 = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename T9 = nil_t
+    ,   typename T10 = nil_t
+    ,   typename T11 = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename T12 = nil_t
+    ,   typename T13 = nil_t
+    ,   typename T14 = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+class closure {
+
+public:
+
+    typedef tuple<
+            T0, T1, T2
+#if PHOENIX_LIMIT > 3
+        ,   T3, T4, T5
+#if PHOENIX_LIMIT > 6
+        ,   T6, T7, T8
+#if PHOENIX_LIMIT > 9
+        ,   T9, T10, T11
+#if PHOENIX_LIMIT > 12
+        ,   T12, T13, T14
+#endif
+#endif
+#endif
+#endif
+        > tuple_t;
+
+    typedef closure<
+            T0, T1, T2
+#if PHOENIX_LIMIT > 3
+        ,   T3, T4, T5
+#if PHOENIX_LIMIT > 6
+        ,   T6, T7, T8
+#if PHOENIX_LIMIT > 9
+        ,   T9, T10, T11
+#if PHOENIX_LIMIT > 12
+        ,   T12, T13, T14
+#endif
+#endif
+#endif
+#endif
+        > self_t;
+
+    typedef closure_frame<self_t> closure_frame_t;
+
+                            closure()
+                            : frame()       { closure_frame_holder_ref(&frame); }
+
+    typedef actor<closure_member<0, self_t> > member1;
+    typedef actor<closure_member<1, self_t> > member2;
+    typedef actor<closure_member<2, self_t> > member3;
+
+#if PHOENIX_LIMIT > 3
+    typedef actor<closure_member<3, self_t> > member4;
+    typedef actor<closure_member<4, self_t> > member5;
+    typedef actor<closure_member<5, self_t> > member6;
+
+#if PHOENIX_LIMIT > 6
+    typedef actor<closure_member<6, self_t> > member7;
+    typedef actor<closure_member<7, self_t> > member8;
+    typedef actor<closure_member<8, self_t> > member9;
+
+#if PHOENIX_LIMIT > 9
+    typedef actor<closure_member<9, self_t> > member10;
+    typedef actor<closure_member<10, self_t> > member11;
+    typedef actor<closure_member<11, self_t> > member12;
+
+#if PHOENIX_LIMIT > 12
+    typedef actor<closure_member<12, self_t> > member13;
+    typedef actor<closure_member<13, self_t> > member14;
+    typedef actor<closure_member<14, self_t> > member15;
+
+#endif
+#endif
+#endif
+#endif
+
+#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
+private:
+#endif
+
+    closure(closure const&);            // no copy
+    closure& operator=(closure const&); // no assign
+
+#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
+    template <int N, typename ClosureT>
+    friend class closure_member;
+
+    template <typename ClosureT>
+    friend class closure_frame;
+#endif
+
+    typedef impl::closure_frame_holder<closure_frame_t> holder_t;
+
+#ifdef PHOENIX_THREADSAFE
+    static boost::thread_specific_ptr<holder_t*> &
+    tsp_frame_instance()
+    {
+        static boost::thread_specific_ptr<holder_t*> the_instance;
+        return the_instance;
+    }
+
+    static void
+    tsp_frame_instance_init()
+    {
+        tsp_frame_instance();
+    }
+#endif
+
+    static holder_t &
+    closure_frame_holder_ref(holder_t* holder_ = 0)
+    {
+#ifdef PHOENIX_THREADSAFE
+        static boost::once_flag been_here = BOOST_ONCE_INIT;
+        boost::call_once(been_here, tsp_frame_instance_init);
+        boost::thread_specific_ptr<holder_t*> &tsp_frame = tsp_frame_instance();
+        if (!tsp_frame.get())
+            tsp_frame.reset(new holder_t *(0));
+        holder_t *& holder = *tsp_frame;
+#else
+        static holder_t* holder = 0;
+#endif
+        if (holder_ != 0)
+            holder = holder_;
+        return *holder;
+    }
+
+    mutable holder_t frame;
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+}
+   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/composite.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/composite.hpp
new file mode 100644 (file)
index 0000000..3fed61d
--- /dev/null
@@ -0,0 +1,1431 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_COMPOSITE_HPP
+#define PHOENIX_COMPOSITE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite class
+//
+//      A composite is an actor base class composed of zero or more
+//      actors (see actor.hpp) and an operation. A composite is itself
+//      an actor superclass and conforms to its conceptual interface.
+//      Its eval member function un-funnels the tupled actual arguments
+//      from the tuple by invoking each of the actors' eval member
+//      function. The results of each are then passed on as arguments to
+//      the operation. Specializations are provided to handle different
+//      numbers of actors.
+//
+//      Schematically:
+//
+//          actor0.eval(tupled_args) --> arg0 --> |
+//          actor1.eval(tupled_args) --> arg1 --> |
+//          actor2.eval(tupled_args) --> arg3 --> | --> operation(arg0...argN)
+//            ...                                 |
+//          actorN.eval(tupled_args) --> argN --> |
+//
+//      The operation can be any suitable functor that can accept the
+//      arguments passed in by the composite. The operation is expected
+//      to have a member operator() that carries out the actual
+//      operation. There should be a one to one correspondence between
+//      actors of the composite and the arguments of the operation's
+//      member operator().
+//
+//      The operation is also expected to have a nested template class
+//      result<T0...TN>. The nested template class result should have a
+//      typedef 'type' that reflects the return type of its member
+//      operator(). This is essentially a type computer that answers the
+//      metaprogramming question "Given arguments of type T0...TN, what
+//      will be its operator()'s return type?".
+//
+//      There is a special case for operations that accept no arguments.
+//      Such nullary operations are only required to define a typedef
+//      result_type that reflects the return type of its operator().
+//
+//      Here's an example of a simple operation that squares a number:
+//
+//          struct square {
+//
+//              template <typename ArgT>
+//              struct result { typedef ArgT type; };
+//
+//              template <typename ArgT>
+//              ArgT operator()(ArgT n) const { return n * n; }
+//          };
+//
+//      As can be seen, operations can be polymorphic. Its arguments and
+//      return type are not fixed to a particular type. The example
+//      above for example, can handle any ArgT type as long as it has a
+//      multiplication operator.
+//
+//      Composites are not created directly. Instead, there are meta-
+//      programs provided that indirectly create composites. See
+//      operators.hpp, binders.hpp and functions.hpp for examples.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename OperationT
+    ,   typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+    ,   typename NU = nil_t  // Not used
+>
+struct composite;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <0 actor> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT>
+struct composite0_result {
+
+    typedef typename OperationT::result_type type;
+};
+
+//////////////////////////////////
+template <typename OperationT>
+struct composite<OperationT,
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite0_result<
+            OperationT, TupleT
+        >::type type;
+    };
+
+    composite(OperationT const& op_)
+    :   op(op_) {}
+
+    template <typename TupleT>
+    typename OperationT::result_type
+    eval(TupleT const& /*args*/) const
+    {
+        return op();
+    }
+
+    mutable OperationT op; //  operation
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <1 actor> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A>
+struct composite1_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A>
+struct composite<OperationT,
+    A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite1_result<
+            OperationT, TupleT, A
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_)
+    :   op(op_), a(a_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        return op(ra);
+    }
+
+    mutable OperationT op; //  operation
+    A a; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <2 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B>
+struct composite2_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B>
+struct composite<OperationT,
+    A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite2_result<
+            OperationT, TupleT, A, B
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_)
+    :   op(op_), a(a_), b(b_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        return op(ra, rb);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <3 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C>
+struct composite3_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C>
+struct composite<OperationT,
+    A, B, C,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite3_result<
+            OperationT, TupleT, A, B, C
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_)
+    :   op(op_), a(a_), b(b_), c(c_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        return op(ra, rb, rc);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; //  actors
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <4 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D>
+struct composite4_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D>
+struct composite<OperationT,
+    A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite4_result<
+            OperationT, TupleT, A, B, C, D
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        return op(ra, rb, rc, rd);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <5 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E>
+struct composite5_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E>
+struct composite<OperationT,
+    A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite5_result<
+            OperationT, TupleT, A, B, C, D, E
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        return op(ra, rb, rc, rd, re);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <6 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct composite6_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct composite<OperationT,
+    A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E, F> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite6_result<
+            OperationT, TupleT, A, B, C, D, E, F
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        return op(ra, rb, rc, rd, re, rf);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; //  actors
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <7 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct composite7_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E, F, G> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite7_result<
+            OperationT, TupleT, A, B, C, D, E, F, G
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <8 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct composite8_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E, F, G, H> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite8_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <9 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct composite9_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E, F, G, H, I> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite9_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; //  actors
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <10 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct composite10_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite10_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <11 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct composite11_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type,
+        typename actor_result<K, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT,
+        A, B, C, D, E, F, G, H, I, J, K> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite11_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+        K const& k_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        typename actor_result<K, TupleT>::type rk = k.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+    K k;//  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <12 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct composite12_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type,
+        typename actor_result<K, TupleT>::plain_type,
+        typename actor_result<L, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+> {
+
+    typedef composite<OperationT,
+        A, B, C, D, E, F, G, H, I, J, K, L> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite12_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+        K const& k_, L const& l_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        typename actor_result<K, TupleT>::type rk = k.eval(args);
+        typename actor_result<L, TupleT>::type rl = l.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+    K k; L l;//  actors
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <13 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct composite13_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type,
+        typename actor_result<K, TupleT>::plain_type,
+        typename actor_result<L, TupleT>::plain_type,
+        typename actor_result<M, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t
+> {
+
+    typedef composite<OperationT,
+        A, B, C, D, E, F, G, H, I, J, K, L, M> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite13_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+        K const& k_, L const& l_, M const& m_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        typename actor_result<K, TupleT>::type rk = k.eval(args);
+        typename actor_result<L, TupleT>::type rl = l.eval(args);
+        typename actor_result<M, TupleT>::type rm = m.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+    K k; L l; M m; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <14 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct composite14_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type,
+        typename actor_result<K, TupleT>::plain_type,
+        typename actor_result<L, TupleT>::plain_type,
+        typename actor_result<M, TupleT>::plain_type,
+        typename actor_result<N, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t
+> {
+
+    typedef composite<OperationT,
+        A, B, C, D, E, F, G, H, I, J, K, L, M, N> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite14_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+        K const& k_, L const& l_, M const& m_, N const& n_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_), n(n_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        typename actor_result<K, TupleT>::type rk = k.eval(args);
+        typename actor_result<L, TupleT>::type rl = l.eval(args);
+        typename actor_result<M, TupleT>::type rm = m.eval(args);
+        typename actor_result<N, TupleT>::type rn = n.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+    K k; L l; M m; N n; //  actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  composite <15 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct composite15_result {
+
+    typedef typename OperationT::template result<
+        typename actor_result<A, TupleT>::plain_type,
+        typename actor_result<B, TupleT>::plain_type,
+        typename actor_result<C, TupleT>::plain_type,
+        typename actor_result<D, TupleT>::plain_type,
+        typename actor_result<E, TupleT>::plain_type,
+        typename actor_result<F, TupleT>::plain_type,
+        typename actor_result<G, TupleT>::plain_type,
+        typename actor_result<H, TupleT>::plain_type,
+        typename actor_result<I, TupleT>::plain_type,
+        typename actor_result<J, TupleT>::plain_type,
+        typename actor_result<K, TupleT>::plain_type,
+        typename actor_result<L, TupleT>::plain_type,
+        typename actor_result<M, TupleT>::plain_type,
+        typename actor_result<N, TupleT>::plain_type,
+        typename actor_result<O, TupleT>::plain_type
+    >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct composite<OperationT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t
+> {
+
+    typedef composite<OperationT,
+        A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename composite15_result<
+            OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+        >::type type;
+    };
+
+    composite(OperationT const& op_,
+        A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+        F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+        K const& k_, L const& l_, M const& m_, N const& n_, O const& o_)
+    :   op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_), n(n_), o(o_) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        typename actor_result<A, TupleT>::type ra = a.eval(args);
+        typename actor_result<B, TupleT>::type rb = b.eval(args);
+        typename actor_result<C, TupleT>::type rc = c.eval(args);
+        typename actor_result<D, TupleT>::type rd = d.eval(args);
+        typename actor_result<E, TupleT>::type re = e.eval(args);
+        typename actor_result<F, TupleT>::type rf = f.eval(args);
+        typename actor_result<G, TupleT>::type rg = g.eval(args);
+        typename actor_result<H, TupleT>::type rh = h.eval(args);
+        typename actor_result<I, TupleT>::type ri = i.eval(args);
+        typename actor_result<J, TupleT>::type rj = j.eval(args);
+        typename actor_result<K, TupleT>::type rk = k.eval(args);
+        typename actor_result<L, TupleT>::type rl = l.eval(args);
+        typename actor_result<M, TupleT>::type rm = m.eval(args);
+        typename actor_result<N, TupleT>::type rn = n.eval(args);
+        typename actor_result<O, TupleT>::type ro = o.eval(args);
+        return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro);
+    }
+
+    mutable OperationT op; //  operation
+    A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+    K k; L l; M m; N n; O o; //  actors
+};
+
+#endif
+#endif
+#endif
+#endif
+
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //      make_composite is basically a type computer that answers the
+    //      question "Given types T0..TN, what composite type should I
+    //      create <composite_type> and if I were to generate an actual
+    //      composite, what type <type> should I return?"
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename OperationT
+        ,   typename A = nil_t
+        ,   typename B = nil_t
+        ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+        ,   typename D = nil_t
+        ,   typename E = nil_t
+        ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+        ,   typename G = nil_t
+        ,   typename H = nil_t
+        ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+        ,   typename J = nil_t
+        ,   typename K = nil_t
+        ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+        ,   typename M = nil_t
+        ,   typename N = nil_t
+        ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+    >
+    struct make_composite {
+
+        typedef composite<OperationT
+            ,   typename as_actor<A>::type
+            ,   typename as_actor<B>::type
+            ,   typename as_actor<C>::type
+
+#if PHOENIX_LIMIT > 3
+            ,   typename as_actor<D>::type
+            ,   typename as_actor<E>::type
+            ,   typename as_actor<F>::type
+
+#if PHOENIX_LIMIT > 6
+            ,   typename as_actor<G>::type
+            ,   typename as_actor<H>::type
+            ,   typename as_actor<I>::type
+
+#if PHOENIX_LIMIT > 9
+            ,   typename as_actor<J>::type
+            ,   typename as_actor<K>::type
+            ,   typename as_actor<L>::type
+
+#if PHOENIX_LIMIT > 12
+            ,   typename as_actor<M>::type
+            ,   typename as_actor<N>::type
+            ,   typename as_actor<O>::type
+
+#endif
+#endif
+#endif
+#endif
+        > composite_type;
+
+        typedef actor<composite_type> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //      make_unary, make_binary, make_binary1, make_binary2 and
+    //      make_binary3 utilities are provided here for easy creation of
+    //      unary and binary composites.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    //////////////////////////////////  input is an actor
+    template <typename OperationT, typename BaseT>
+    struct make_unary {
+
+        typedef typename make_composite
+            <OperationT, actor<BaseT> >::type type;
+
+        static type
+        construct(actor<BaseT> const& _0)
+        {
+            typedef typename make_composite
+                    <OperationT, actor<BaseT> >::composite_type
+                ret_t;
+
+            return ret_t(OperationT(), _0);
+        }
+    };
+
+    //////////////////////////////////  LHS is an actor, RHS is unknown
+    template <typename OperationT, typename BaseT, typename B>
+    struct make_binary1 {
+
+        typedef typename make_composite
+            <OperationT, actor<BaseT>, B>::type type;
+
+        static type
+        construct(actor<BaseT> const& _0, B const& _1)
+        {
+            typedef typename make_composite
+                    <OperationT, actor<BaseT>, B>::composite_type
+                ret_t;
+            
+            return ret_t(OperationT(), _0, as_actor<B>::convert(_1));
+        }
+    };
+
+    //////////////////////////////////  LHS is unknown, RHS is an actor
+    template <typename OperationT, typename A, typename BaseT>
+    struct make_binary2 {
+
+        typedef typename make_composite
+            <OperationT, A, actor<BaseT> >::type type;
+
+        static type
+        construct(A const& _0, actor<BaseT> const& _1)
+        {
+            typedef typename make_composite
+                    <OperationT, A, actor<BaseT> >::composite_type
+                ret_t;
+
+            return ret_t(OperationT(), as_actor<A>::convert(_0), _1);
+        }
+    };
+
+    //////////////////////////////////  Both LHS and RHS are actors
+    template <typename OperationT, typename BaseA, typename BaseB>
+    struct make_binary3 {
+
+        typedef typename make_composite
+            <OperationT, actor<BaseA>, actor<BaseB> >::type type;
+
+        static type
+        construct(actor<BaseA> const& _0, actor<BaseB> const& _1)
+        {
+            typedef typename make_composite
+                    <OperationT, actor<BaseA>, actor<BaseB> >::composite_type
+                ret_t;
+
+            return ret_t(OperationT(), _0, _1);
+        }
+    };
+
+}   // namespace impl
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/functions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/functions.hpp
new file mode 100644 (file)
index 0000000..7e40ce9
--- /dev/null
@@ -0,0 +1,760 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_FUNCTIONS_HPP
+#define PHOENIX_FUNCTIONS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  function class
+//
+//      Lazy functions
+//
+//      This class provides a mechanism for lazily evaluating functions.
+//      Syntactically, a lazy function looks like an ordinary C/C++
+//      function. The function call looks the same. However, unlike
+//      ordinary functions, the actual function execution is deferred.
+//      (see actor.hpp, primitives.hpp and composite.hpp for an
+//      overview). For example here are sample factorial function calls:
+//
+//          factorial(4)
+//          factorial(arg1)
+//          factorial(arg1 * 6)
+//
+//      These functions are automatically lazily bound unlike ordinary
+//      function pointers or functor objects that need to be explicitly
+//      bound through the bind function (see binders.hpp).
+//
+//      A lazy function works in conjunction with a user defined functor
+//      (as usual with a member operator()). Only special forms of
+//      functor objects are allowed. This is required to enable true
+//      polymorphism (STL style monomorphic functors and function
+//      pointers can still be used through the bind facility in
+//      binders.hpp).
+//
+//      This special functor is expected to have a nested template class
+//      result<A...TN> (where N is the number of arguments of its
+//      member operator()). The nested template class result should have
+//      a typedef 'type' that reflects the return type of its member
+//      operator(). This is essentially a type computer that answers the
+//      metaprogramming question "Given arguments of type A...TN, what
+//      will be the operator()'s return type?".
+//
+//      There is a special case for functors that accept no arguments.
+//      Such nullary functors are only required to define a typedef
+//      result_type that reflects the return type of its operator().
+//
+//      Here's an example of a simple functor that computes the
+//      factorial of a number:
+//
+//          struct factorial_impl {
+//
+//              template <typename Arg>
+//              struct result { typedef Arg type; };
+//
+//              template <typename Arg>
+//              Arg operator()(Arg n) const
+//              { return (n <= 0) ? 1 : n * this->operator()(n-1); }
+//          };
+//
+//      As can be seen, the functor can be polymorphic. Its arguments
+//      and return type are not fixed to a particular type. The example
+//      above for example, can handle any type as long as it can carry
+//      out the required operations (i.e. <=, * and -).
+//
+//      We can now declare and instantiate a lazy 'factorial' function:
+//
+//          function<factorial_impl> factorial;
+//
+//      Invoking a lazy function 'factorial' does not immediately
+//      execute the functor factorial_impl. Instead, a composite (see
+//      composite.hpp) object is created and returned to the caller.
+//      Example:
+//
+//          factorial(arg1)
+//
+//      does nothing more than return a composite. A second function
+//      call will invoke the actual factorial function. Example:
+//
+//          int i = 4;
+//          cout << factorial(arg1)(i);
+//
+//      will print out "24".
+//
+//      Take note that in certain cases (e.g. for functors with state),
+//      an instance may be passed on to the constructor. Example:
+//
+//          function<factorial_impl> factorial(ftor);
+//
+//      where ftor is an instance of factorial_impl (this is not
+//      necessary in this case since factorial is a simple stateless
+//      functor). Take care though when using functors with state
+//      because the functors are taken in by value. It is best to keep
+//      the data manipulated by a functor outside the functor itself and
+//      keep a reference to this data inside the functor. Also, it is
+//      best to keep functors as small as possible.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT>
+struct function {
+
+    function() : op() {}
+    function(OperationT const& op_) : op(op_) {}
+
+    actor<composite<OperationT> >
+    operator()() const;
+
+    template <typename A>
+    typename impl::make_composite<OperationT, A>::type
+    operator()(A const& a) const;
+
+    template <typename A, typename B>
+    typename impl::make_composite<OperationT, A, B>::type
+    operator()(A const& a, B const& b) const;
+
+    template <typename A, typename B, typename C>
+    typename impl::make_composite<OperationT, A, B, C>::type
+    operator()(A const& a, B const& b, C const& c) const;
+
+#if PHOENIX_LIMIT > 3
+
+    template <typename A, typename B, typename C, typename D>
+    typename impl::make_composite<OperationT, A, B, C, D>::type
+    operator()(A const& a, B const& b, C const& c, D const& d) const;
+
+    template <typename A, typename B, typename C, typename D, typename E>
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f
+    ) const;
+
+#if PHOENIX_LIMIT > 6
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i
+    ) const;
+
+#if PHOENIX_LIMIT > 9
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J, K
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l
+    ) const;
+
+#if PHOENIX_LIMIT > 12
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n
+    ) const;
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O
+    >
+    typename impl::make_composite<
+        OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+    >::type
+    operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n, O const& o
+    ) const;
+
+#endif
+#endif
+#endif
+#endif
+
+    OperationT op;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  function class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT>
+inline actor<composite<OperationT> >
+function<OperationT>::operator()() const
+{
+    return actor<composite<OperationT> >(op);
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A>
+inline typename impl::make_composite<OperationT, A>::type
+function<OperationT>::operator()(A const& a) const
+{
+    typedef typename impl::make_composite<OperationT, A>::composite_type ret_t;
+    return ret_t
+    (
+        op,
+        as_actor<A>::convert(a)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A, typename B>
+inline typename impl::make_composite<OperationT, A, B>::type
+function<OperationT>::operator()(A const& a, B const& b) const
+{
+    typedef 
+        typename impl::make_composite<OperationT, A, B>::composite_type 
+        ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A, typename B, typename C>
+inline typename impl::make_composite<OperationT, A, B, C>::type
+function<OperationT>::operator()(A const& a, B const& b, C const& c) const
+{
+    typedef 
+        typename impl::make_composite<OperationT, A, B, C>::composite_type
+        ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c)
+    );
+}
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E
+        >::composite_type ret_t;
+
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F
+        >::composite_type ret_t;
+
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f)
+    );
+}
+
+#if PHOENIX_LIMIT > 6
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G
+        >::composite_type ret_t;
+
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i)
+    );
+}
+
+#if PHOENIX_LIMIT > 9
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J, K
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J, K
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l)
+    );
+}
+
+#if PHOENIX_LIMIT > 12
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+        >::composite_type ret_t;
+
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n)
+    );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+    OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+>::type
+function<OperationT>::operator()(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n, O const& o
+) const
+{
+    typedef typename impl::make_composite<
+            OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+        >::composite_type ret_t;
+        
+    return ret_t(
+        op,
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n),
+        as_actor<O>::convert(o)
+    );
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/new.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/new.hpp
new file mode 100644 (file)
index 0000000..f1a4636
--- /dev/null
@@ -0,0 +1,1315 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    Copyright (c) 2003 Vaclav Vesely
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef PHOENIX_NEW_HPP
+#define PHOENIX_NEW_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Phoenix predefined maximum new_ limit. This limit defines the maximum
+//  number of parameters supported for calles to the set of new_ template
+//  functions (lazy object construction, see below). This number defaults to 3.
+//  The actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//  PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
+
+#if !defined(PHOENIX_CONSTRUCT_LIMIT)
+#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
+#endif
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  new_
+//
+//      Lazy object construction
+//
+//      The set of new_<> template classes and functions provide a way
+//      of lazily constructing certain object from a arbitrary set of
+//      actors during parsing.
+//      The new_ templates are (syntactically) used very much like
+//      the well known C++ casts:
+//
+//          A *a = new_<A>(...arbitrary list of actors...);
+//
+//      where the given parameters are submitted as parameters to the
+//      contructor of the object of type A. (This certainly implies, that
+//      type A has a constructor with a fitting set of parameter types
+//      defined.)
+//
+//      The maximum number of needed parameters is controlled through the
+//      preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
+//      limit should not be greater than PHOENIX_LIMIT.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename T>
+struct new_l_0
+{
+    typedef T* result_type;
+
+    T* operator()() const
+    {
+        return new T();
+    }
+};
+
+template <typename T>
+struct new_l {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+        ,   typename D
+        ,   typename E
+        ,   typename F
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+        ,   typename G
+        ,   typename H
+        ,   typename I
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+        ,   typename J
+        ,   typename K
+        ,   typename L
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+        ,   typename M
+        ,   typename N
+        ,   typename O
+#endif
+#endif
+#endif
+#endif
+    >
+    struct result { typedef T* type; };
+
+    T* operator()() const {
+        return new T();
+    }
+
+    template <typename A>
+    T* operator()(A const& a) const {
+        return new T(a);
+    }
+
+    template <typename A, typename B>
+    T* operator()(A const& a, B const& b) const {
+        return new T(a, b);
+    }
+
+    template <typename A, typename B, typename C>
+    T* operator()(A const& a, B const& b, C const& c) const {
+        return new T(a, b, c);
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+    template <
+        typename A, typename B, typename C, typename D
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d) const
+    {
+        return new T(a, b, c, d);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e) const
+    {
+        return new T(a, b, c, d, e);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f) const
+    {
+        return new T(a, b, c, d, e, f);
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g) const
+    {
+        return new T(a, b, c, d, e, f, g);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h) const
+    {
+        return new T(a, b, c, d, e, f, g, h);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i);
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l);
+    }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+    }
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n, O const& o) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+    }
+
+#endif
+#endif
+#endif
+#endif
+};
+
+template <typename T>
+struct new_1 {
+
+    template <
+            typename A
+    >
+    struct result { typedef T* type; };
+
+    template <typename A>
+    T* operator()(A const& a) const {
+        return new T(a);
+    }
+
+};
+
+template <typename T>
+struct new_2 {
+
+    template <
+            typename A
+        ,   typename B
+    >
+    struct result { typedef T* type; };
+
+    template <typename A, typename B>
+    T* operator()(A const& a, B const& b) const {
+        return new T(a, b);
+    }
+
+};
+
+template <typename T>
+struct new_3 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+    >
+    struct result { typedef T* type; };
+
+    template <typename A, typename B, typename C>
+    T* operator()(A const& a, B const& b, C const& c) const {
+        return new T(a, b, c);
+    }
+};
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+template <typename T>
+struct new_4 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d) const
+    {
+        return new T(a, b, c, d);
+    }
+};
+
+
+template <typename T>
+struct new_5 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+    >
+    struct result { typedef T* type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e) const
+    {
+        return new T(a, b, c, d, e);
+    }
+};
+
+
+template <typename T>
+struct new_6 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+    >
+    struct result { typedef T* type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f) const
+    {
+        return new T(a, b, c, d, e, f);
+    }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+template <typename T>
+struct new_7 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+    >
+    struct result { typedef T* type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g) const
+    {
+        return new T(a, b, c, d, e, f, g);
+    }
+};
+
+template <typename T>
+struct new_8 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+    >
+    struct result { typedef T* type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h) const
+    {
+        return new T(a, b, c, d, e, f, g, h);
+    }
+};
+
+template <typename T>
+struct new_9 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+    >
+    struct result { typedef T* type; };
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i);
+    }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+template <typename T>
+struct new_10 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j);
+    }
+};
+
+template <typename T>
+struct new_11 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k);
+    }
+
+};
+
+template <typename T>
+struct new_12 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l) const
+    {
+        return new T(a, b, c, d, f, e, g, h, i, j, k, l);
+    }
+};
+#endif
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+template <typename T>
+struct new_13 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
+    }
+};
+
+template <typename T>
+struct new_14 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+        ,   typename N
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n) const
+    {
+        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+    }
+
+};
+
+template <typename T>
+struct new_15 {
+
+    template <
+            typename A
+        ,   typename B
+        ,   typename C
+        ,   typename D
+        ,   typename E
+        ,   typename F
+        ,   typename G
+        ,   typename H
+        ,   typename I
+        ,   typename J
+        ,   typename K
+        ,   typename L
+        ,   typename M
+        ,   typename N
+        ,   typename O
+    >
+    struct result { typedef T* type; };
+
+
+    template <
+        typename A, typename B, typename C, typename D, typename E,
+        typename F, typename G, typename H, typename I, typename J,
+        typename K, typename L, typename M, typename N, typename O
+    >
+    T* operator()(
+        A const& a, B const& b, C const& c, D const& d, E const& e,
+        F const& f, G const& g, H const& h, I const& i, J const& j,
+        K const& k, L const& l, M const& m, N const& n, O const& o) const
+    {
+        return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
+    }
+
+};
+#endif
+
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The following specializations are needed because Borland and CodeWarrior
+//  does not accept default template arguments in nested template classes in
+//  classes (i.e new_l::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename TupleT>
+struct composite0_result<new_l_0<T>, TupleT> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A>
+struct composite1_result<new_l<T>, TupleT, A> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B>
+struct composite2_result<new_l<T>, TupleT, A, B> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C>
+struct composite3_result<new_l<T>, TupleT, A, B, C> {
+
+    typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D>
+struct composite4_result<new_l<T>, TupleT,
+    A, B, C, D> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<new_l<T>, TupleT,
+    A, B, C, D, E> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct composite6_result<new_l<T>, TupleT,
+    A, B, C, D, E, F> {
+
+    typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct composite7_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct composite8_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct composite9_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I> {
+
+    typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct composite11_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct composite12_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L> {
+
+    typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct composite13_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct composite14_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+    typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<new_l<T>, TupleT,
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+    typedef T* type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename T>
+inline typename impl::make_composite<new_l_0<T> >::type
+new_()
+{
+    typedef impl::make_composite<new_l_0<T> > make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_l_0<T>()));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+inline typename impl::make_composite<new_1<T>, A>::type
+new_(A const& a)
+{
+    typedef impl::make_composite<new_1<T>, A> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_1<T>(),
+        as_actor<A>::convert(a)
+    ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B>
+inline typename impl::make_composite<new_2<T>, A, B>::type
+new_(A const& a, B const& b)
+{
+    typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_2<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b)
+    ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B, typename C>
+inline typename impl::make_composite<new_3<T>, A, B, C>::type
+new_(A const& a, B const& b, C const& c)
+{
+    typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_3<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d)
+{
+    typedef
+        impl::make_composite<new_4<T>, A, B, C, D>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_4<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e)
+{
+    typedef
+        impl::make_composite<new_5<T>, A, B, C, D, E>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_5<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F
+>
+inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f)
+{
+    typedef
+        impl::make_composite<new_6<T>, A, B, C, D, E, F>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_6<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G
+>
+inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g)
+{
+    typedef
+        impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_7<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H
+>
+inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h)
+{
+    typedef
+        impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_8<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i)
+{
+    typedef
+        impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_9<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+    new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j)
+{
+    typedef
+        impl::make_composite<
+            new_10<T>, A, B, C, D, E, F, G, H, I, J
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_10<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K
+>
+inline typename impl::make_composite<
+    new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k)
+{
+    typedef
+        impl::make_composite<
+            new_11<T>, A, B, C, D, E, F, G, H, I, J, K
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_11<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L
+>
+inline typename impl::make_composite<
+    new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l)
+{
+    typedef
+        impl::make_composite<
+            new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_12<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l)
+    ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M
+>
+inline typename impl::make_composite<
+    new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m)
+{
+    typedef
+        impl::make_composite<
+            new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_13<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+    new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n)
+{
+    typedef
+        impl::make_composite<
+            new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_14<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n)
+    ));
+}
+
+//////////////////////////////////
+template <
+    typename T, typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J, typename K,
+    typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+    new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
+new_(
+    A const& a, B const& b, C const& c, D const& d, E const& e,
+    F const& f, G const& g, H const& h, I const& i, J const& j,
+    K const& k, L const& l, M const& m, N const& n, O const& o)
+{
+    typedef
+        impl::make_composite<
+            new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+        >
+        make_composite_t;
+    typedef typename make_composite_t::type type_t;
+    typedef typename make_composite_t::composite_type composite_type_t;
+
+    return type_t(composite_type_t(new_15<T>(),
+        as_actor<A>::convert(a),
+        as_actor<B>::convert(b),
+        as_actor<C>::convert(c),
+        as_actor<D>::convert(d),
+        as_actor<E>::convert(e),
+        as_actor<F>::convert(f),
+        as_actor<G>::convert(g),
+        as_actor<H>::convert(h),
+        as_actor<I>::convert(i),
+        as_actor<J>::convert(j),
+        as_actor<K>::convert(k),
+        as_actor<L>::convert(l),
+        as_actor<M>::convert(m),
+        as_actor<N>::convert(n),
+        as_actor<O>::convert(o)
+    ));
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif // PHOENIX_NEW_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/operators.hpp
new file mode 100644 (file)
index 0000000..fa4676c
--- /dev/null
@@ -0,0 +1,2203 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_OPERATORS_HPP
+#define PHOENIX_OPERATORS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_NO_CWCTYPE)
+    #include <cwctype>
+#endif
+
+#if defined(__BORLANDC__) || (defined(__ICL) && __ICL >= 700)
+#define CREF const&
+#else
+#define CREF
+#endif
+
+#include <climits>
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Operators
+//
+//      Lazy operators
+//
+//      This class provides a mechanism for lazily evaluating operators.
+//      Syntactically, a lazy operator looks like an ordinary C/C++
+//      infix, prefix or postfix operator. The operator application
+//      looks the same. However, unlike ordinary operators, the actual
+//      operator execution is deferred. (see actor.hpp, primitives.hpp
+//      and composite.hpp for an overview). Samples:
+//
+//          arg1 + arg2
+//          1 + arg1 * arg2
+//          1 / -arg1
+//          arg1 < 150
+//
+//      T1 set of classes implement all the C++ free operators. Like
+//      lazy functions (see functions.hpp), lazy operators are not
+//      immediately executed when invoked. Instead, a composite (see
+//      composite.hpp) object is created and returned to the caller.
+//      Example:
+//
+//          (arg1 + arg2) * arg3
+//
+//      does nothing more than return a composite. T1 second function
+//      call will evaluate the actual operators. Example:
+//
+//          int i = 4, j = 5, k = 6;
+//          cout << ((arg1 + arg2) * arg3)(i, j, k);
+//
+//      will print out "54".
+//
+//      Arbitrarily complex expressions can be lazily evaluated
+//      following three simple rules:
+//
+//          1) Lazy evaluated binary operators apply when at least one
+//          of the operands is an actor object (see actor.hpp and
+//          primitives.hpp). Consequently, if an operand is not an actor
+//          object, it is implicitly converted to an object of type
+//          actor<value<T> > (where T is the original type of the
+//          operand).
+//
+//          2) Lazy evaluated unary operators apply only to operands
+//          which are actor objects.
+//
+//          3) The result of a lazy operator is a composite actor object
+//          that can in turn apply to rule 1.
+//
+//      Example:
+//
+//          arg1 + 3
+//
+//      is a lazy expression involving the operator+. Following rule 1,
+//      lazy evaluation is triggered since arg1 is an instance of an
+//      actor<argument<N> > class (see primitives.hpp). The right
+//      operand <3> is implicitly converted to an actor<value<int> >.
+//      The result of this binary + expression is a composite object,
+//      following rule 3.
+//
+//      Take note that although at least one of the operands must be a
+//      valid actor class in order for lazy evaluation to take effect,
+//      if this is not the case and we still want to lazily evaluate an
+//      expression, we can use var(x), val(x) or cref(x) to transform
+//      the operand into a valid action object (see primitives.hpp).
+//      Example:
+//
+//          val(1) << 3;
+//
+//      Supported operators:
+//
+//          Unary operators:
+//
+//              prefix:   ~, !, -, +, ++, --, & (reference), * (dereference)
+//              postfix:  ++, --
+//
+//          Binary operators:
+//
+//              =, [], +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
+//              +, -, *, /, %, &, |, ^, <<, >>
+//              ==, !=, <, >, <=, >=
+//              &&, ||
+//
+//      Each operator has a special tag type associated with it. For
+//      example the binary + operator has a plus_op tag type associated
+//      with it. This is used to specialize either the unary_operator or
+//      binary_operator template classes (see unary_operator and
+//      binary_operator below). Specializations of these unary_operator
+//      and binary_operator are the actual workhorses that implement the
+//      operations. The behavior of each lazy operator depends on these
+//      unary_operator and binary_operator specializations. 'preset'
+//      specializations conform to the canonical operator rules modeled
+//      by the behavior of integers and pointers:
+//
+//          Prefix -, + and ~ accept constant arguments and return an
+//          object by value.
+//
+//          The ! accept constant arguments and returns a boolean
+//          result.
+//
+//          The & (address-of), * (dereference) both return a reference
+//          to an object.
+//
+//          Prefix ++ returns a reference to its mutable argument after
+//          it is incremented.
+//
+//          Postfix ++ returns the mutable argument by value before it
+//          is incremented.
+//
+//          The += and its family accept mutable right hand side (rhs)
+//          operand and return a reference to the rhs operand.
+//
+//          Infix + and its family accept constant arguments and return
+//          an object by value.
+//
+//          The == and its family accept constant arguments and return a
+//          boolean result.
+//
+//          Operators && and || accept constant arguments and return a
+//          boolean result and are short circuit evaluated as expected.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Operator tags
+//
+//      Each C++ operator has a corresponding tag type. This is
+//      used as a means for specializing the unary_operator and
+//      binary_operator (see below). The tag also serves as the
+//      lazy operator type compatible as a composite operation
+//      see (composite.hpp).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+//  Unary operator tags
+
+struct negative_op;         struct positive_op;
+struct logical_not_op;      struct invert_op;
+struct reference_op;        struct dereference_op;
+struct pre_incr_op;         struct pre_decr_op;
+struct post_incr_op;        struct post_decr_op;
+
+//  Binary operator tags
+
+struct assign_op;           struct index_op;
+struct plus_assign_op;      struct minus_assign_op;
+struct times_assign_op;     struct divide_assign_op;    struct mod_assign_op;
+struct and_assign_op;       struct or_assign_op;        struct xor_assign_op;
+struct shift_l_assign_op;   struct shift_r_assign_op;
+
+struct plus_op;             struct minus_op;
+struct times_op;            struct divide_op;           struct mod_op;
+struct and_op;              struct or_op;               struct xor_op;
+struct shift_l_op;          struct shift_r_op;
+
+struct eq_op;               struct not_eq_op;
+struct lt_op;               struct lt_eq_op;
+struct gt_op;               struct gt_eq_op;
+struct logical_and_op;      struct logical_or_op;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  unary_operator<TagT, T>
+//
+//      The unary_operator class implements most of the C++ unary
+//      operators. Each specialization is basically a simple static eval
+//      function plus a result_type typedef that determines the return
+//      type of the eval function.
+//
+//      TagT is one of the unary operator tags above and T is the data
+//      type (argument) involved in the operation.
+//
+//      Only the behavior of C/C++ built-in types are taken into account
+//      in the specializations provided below. For user-defined types,
+//      these specializations may still be used provided that the
+//      operator overloads of such types adhere to the standard behavior
+//      of built-in types.
+//
+//      T1 separate special_ops.hpp file implements more stl savvy
+//      specializations. Other more specialized unary_operator
+//      implementations may be defined by the client for specific
+//      unary operator tags/data types.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TagT, typename T>
+struct unary_operator;
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<negative_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T const& v)
+    { return -v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<positive_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T const& v)
+    { return +v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<logical_not_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T const& v)
+    { return !v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<invert_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T const& v)
+    { return ~v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<reference_op, T> {
+
+    typedef T* result_type;
+    static result_type eval(T& v)
+    { return &v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T*> {
+
+    typedef T& result_type;
+    static result_type eval(T* v)
+    { return *v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T* const> {
+
+    typedef T& result_type;
+    static result_type eval(T* const v)
+    { return *v; }
+};
+
+//////////////////////////////////
+template <>
+struct unary_operator<dereference_op, nil_t> {
+
+    //  G++ eager template instantiation
+    //  somehow requires this.
+    typedef nil_t result_type;
+};
+
+//////////////////////////////////
+#ifndef __BORLANDC__
+template <>
+struct unary_operator<dereference_op, nil_t const> {
+
+    //  G++ eager template instantiation
+    //  somehow requires this.
+    typedef nil_t result_type;
+};
+#endif
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<pre_incr_op, T> {
+
+    typedef T& result_type;
+    static result_type eval(T& v)
+    { return ++v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<pre_decr_op, T> {
+
+    typedef T& result_type;
+    static result_type eval(T& v)
+    { return --v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<post_incr_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T& v)
+    { T t(v); ++v; return t; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<post_decr_op, T> {
+
+    typedef T const result_type;
+    static result_type eval(T& v)
+    { T t(v); --v; return t; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  rank<T>
+//
+//      rank<T> class has a static int constant 'value' that defines the
+//      absolute rank of a type. rank<T> is used to choose the result
+//      type of binary operators such as +. The type with the higher
+//      rank wins and is used as the operator's return type. T1 generic
+//      user defined type has a very high rank and always wins when
+//      compared against a user defined type. If this is not desireable,
+//      one can write a rank specialization for the type.
+//
+//      Take note that ranks 0..9999 are reserved for the framework.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct rank { static int const value = INT_MAX; };
+
+template <> struct rank<void>               { static int const value = 0; };
+template <> struct rank<bool>               { static int const value = 10; };
+
+template <> struct rank<char>               { static int const value = 20; };
+template <> struct rank<signed char>        { static int const value = 20; };
+template <> struct rank<unsigned char>      { static int const value = 30; };
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+template <> struct rank<wchar_t>            { static int const value = 40; };
+#endif // !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+
+template <> struct rank<short>              { static int const value = 50; };
+template <> struct rank<unsigned short>     { static int const value = 60; };
+
+template <> struct rank<int>                { static int const value = 70; };
+template <> struct rank<unsigned int>       { static int const value = 80; };
+
+template <> struct rank<long>               { static int const value = 90; };
+template <> struct rank<unsigned long>      { static int const value = 100; };
+
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct rank< ::boost::long_long_type>          { static int const value = 110; };
+template <> struct rank< ::boost::ulong_long_type> { static int const value = 120; };
+#endif
+
+template <> struct rank<float>              { static int const value = 130; };
+template <> struct rank<double>             { static int const value = 140; };
+template <> struct rank<long double>        { static int const value = 150; };
+
+template <typename T> struct rank<T*>
+{ static int const value = 160; };
+
+template <typename T> struct rank<T* const>
+{ static int const value = 160; };
+
+template <typename T, int N> struct rank<T[N]>
+{ static int const value = 160; };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  higher_rank<T0, T1>
+//
+//      Chooses the type (T0 or T1) with the higher rank.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T0, typename T1>
+struct higher_rank {
+    typedef typename boost::mpl::if_c<
+        rank<T0>::value < rank<T1>::value,
+        T1, T0>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  binary_operator<TagT, T0, T1>
+//
+//      The binary_operator class implements most of the C++ binary
+//      operators. Each specialization is basically a simple static eval
+//      function plus a result_type typedef that determines the return
+//      type of the eval function.
+//
+//      TagT is one of the binary operator tags above T0 and T1 are the
+//      (arguments') data types involved in the operation.
+//
+//      Only the behavior of C/C++ built-in types are taken into account
+//      in the specializations provided below. For user-defined types,
+//      these specializations may still be used provided that the
+//      operator overloads of such types adhere to the standard behavior
+//      of built-in types.
+//
+//      T1 separate special_ops.hpp file implements more stl savvy
+//      specializations. Other more specialized unary_operator
+//      implementations may be defined by the client for specific
+//      unary operator tags/data types.
+//
+//      All binary_operator except the logical_and_op and logical_or_op
+//      have an eval static function that carries out the actual operation.
+//      The logical_and_op and logical_or_op d are special because these
+//      two operators are short-circuit evaluated.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TagT, typename T0, typename T1>
+struct binary_operator;
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs = rhs; }
+};
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<index_op, nil_t, T1> {
+
+    //  G++ eager template instantiation
+    //  somehow requires this.
+    typedef nil_t result_type;
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0*, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0* ptr, T1 const& index)
+    { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0* const, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0* const ptr, T1 const& index)
+    { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, int N, typename T1>
+struct binary_operator<index_op, T0[N], T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0* ptr, T1 const& index)
+    { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<plus_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs += rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<minus_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs -= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<times_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs *= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<divide_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs /= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<mod_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs %= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<and_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs &= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<or_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs |= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<xor_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs ^= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_l_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs <<= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_r_assign_op, T0, T1> {
+
+    typedef T0& result_type;
+    static result_type eval(T0& lhs, T1 const& rhs)
+    { return lhs >>= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<plus_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs + rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<minus_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs - rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<times_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs * rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<divide_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs / rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<mod_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs % rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<and_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs & rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<or_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs | rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<xor_op, T0, T1> {
+
+    typedef typename higher_rank<T0, T1>::type const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs ^ rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_l_op, T0, T1> {
+
+    typedef T0 const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs << rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_r_op, T0, T1> {
+
+    typedef T0 const result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs >> rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<eq_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs == rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<not_eq_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs != rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<lt_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs < rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<lt_eq_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs <= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<gt_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs > rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<gt_eq_op, T0, T1> {
+
+    typedef bool result_type;
+    static result_type eval(T0 const& lhs, T1 const& rhs)
+    { return lhs >= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<logical_and_op, T0, T1> {
+
+    typedef bool result_type;
+    //  no eval function, see comment above.
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<logical_or_op, T0, T1> {
+
+    typedef bool result_type;
+    //  no eval function, see comment above.
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  negative lazy operator (prefix -)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct negative_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<negative_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<negative_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<negative_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<negative_op, BaseT>::type
+operator-(actor<BaseT> const& _0)
+{
+    return impl::make_unary<negative_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  positive lazy operator (prefix +)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct positive_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<positive_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<positive_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<positive_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<positive_op, BaseT>::type
+operator+(actor<BaseT> const& _0)
+{
+    return impl::make_unary<positive_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  logical not lazy operator (prefix !)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct logical_not_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<logical_not_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<logical_not_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<logical_not_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<logical_not_op, BaseT>::type
+operator!(actor<BaseT> const& _0)
+{
+    return impl::make_unary<logical_not_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  invert lazy operator (prefix ~)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct invert_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<invert_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<invert_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<invert_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<invert_op, BaseT>::type
+operator~(actor<BaseT> const& _0)
+{
+    return impl::make_unary<invert_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  reference lazy operator (prefix &)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct reference_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<reference_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<reference_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<reference_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<reference_op, BaseT>::type
+operator&(actor<BaseT> const& _0)
+{
+    return impl::make_unary<reference_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  dereference lazy operator (prefix *)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct dereference_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<dereference_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<dereference_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<dereference_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<dereference_op, BaseT>::type
+operator*(actor<BaseT> const& _0)
+{
+    return impl::make_unary<dereference_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  pre increment lazy operator (prefix ++)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct pre_incr_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<pre_incr_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<pre_incr_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<pre_incr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<pre_incr_op, BaseT>::type
+operator++(actor<BaseT> const& _0)
+{
+    return impl::make_unary<pre_incr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  pre decrement lazy operator (prefix --)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct pre_decr_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<pre_decr_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<pre_decr_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<pre_decr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<pre_decr_op, BaseT>::type
+operator--(actor<BaseT> const& _0)
+{
+    return impl::make_unary<pre_decr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  post increment lazy operator (postfix ++)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct post_incr_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<post_incr_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<post_incr_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<post_incr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<post_incr_op, BaseT>::type
+operator++(actor<BaseT> const& _0, int)
+{
+    return impl::make_unary<post_incr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  post decrement lazy operator (postfix --)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct post_decr_op {
+
+    template <typename T0>
+    struct result {
+
+        typedef typename unary_operator<post_decr_op, T0>::result_type type;
+    };
+
+    template <typename T0>
+    typename unary_operator<post_decr_op, T0>::result_type
+    operator()(T0& _0) const
+    { return unary_operator<post_decr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<post_decr_op, BaseT>::type
+operator--(actor<BaseT> const& _0, int)
+{
+    return impl::make_unary<post_decr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  assignment lazy operator (infix =)
+//  The acual lazy operator is a member of the actor class.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename B>
+inline typename impl::make_binary1<assign_op, BaseT, B>::type
+actor<BaseT>::operator=(B const& _1) const
+{
+    return impl::make_binary1<assign_op, BaseT, B>::construct(*this, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  index lazy operator (array index [])
+//  The acual lazy operator is a member of the actor class.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct index_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<index_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<index_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<index_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename B>
+inline typename impl::make_binary1<index_op, BaseT, B>::type
+actor<BaseT>::operator[](B const& _1) const
+{
+    return impl::make_binary1<index_op, BaseT, B>::construct(*this, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  plus assign lazy operator (infix +=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct plus_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<plus_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<plus_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<plus_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<plus_assign_op, BaseT, T1>::type
+operator+=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<plus_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  minus assign lazy operator (infix -=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct minus_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<minus_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<minus_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<minus_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<minus_assign_op, BaseT, T1>::type
+operator-=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<minus_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  times assign lazy operator (infix *=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct times_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<times_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<times_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<times_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<times_assign_op, BaseT, T1>::type
+operator*=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<times_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  divide assign lazy operator (infix /=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct divide_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<divide_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<divide_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<divide_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<divide_assign_op, BaseT, T1>::type
+operator/=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<divide_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  mod assign lazy operator (infix %=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct mod_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<mod_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<mod_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<mod_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<mod_assign_op, BaseT, T1>::type
+operator%=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<mod_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  and assign lazy operator (infix &=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct and_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<and_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<and_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<and_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<and_assign_op, BaseT, T1>::type
+operator&=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<and_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  or assign lazy operator (infix |=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct or_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<or_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<or_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<or_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<or_assign_op, BaseT, T1>::type
+operator|=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<or_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  xor assign lazy operator (infix ^=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct xor_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<xor_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<xor_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<xor_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<xor_assign_op, BaseT, T1>::type
+operator^=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<xor_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  shift left assign lazy operator (infix <<=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_l_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<shift_l_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<shift_l_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<shift_l_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_l_assign_op, BaseT, T1>::type
+operator<<=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<shift_l_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  shift right assign lazy operator (infix >>=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_r_assign_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<shift_r_assign_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<shift_r_assign_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<shift_r_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_r_assign_op, BaseT, T1>::type
+operator>>=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<shift_r_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  plus lazy operator (infix +)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct plus_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<plus_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<plus_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<plus_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<plus_op, BaseT, T1>::type
+operator+(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<plus_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<plus_op, T0, BaseT>::type
+operator+(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<plus_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<plus_op, BaseT0, BaseT1>::type
+operator+(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<plus_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  minus lazy operator (infix -)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct minus_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<minus_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<minus_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<minus_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<minus_op, BaseT, T1>::type
+operator-(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<minus_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<minus_op, T0, BaseT>::type
+operator-(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<minus_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<minus_op, BaseT0, BaseT1>::type
+operator-(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<minus_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  times lazy operator (infix *)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct times_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<times_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<times_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<times_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<times_op, BaseT, T1>::type
+operator*(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<times_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<times_op, T0, BaseT>::type
+operator*(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<times_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<times_op, BaseT0, BaseT1>::type
+operator*(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<times_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  divide lazy operator (infix /)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct divide_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<divide_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<divide_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<divide_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<divide_op, BaseT, T1>::type
+operator/(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<divide_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<divide_op, T0, BaseT>::type
+operator/(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<divide_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<divide_op, BaseT0, BaseT1>::type
+operator/(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<divide_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  mod lazy operator (infix %)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct mod_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<mod_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<mod_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<mod_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<mod_op, BaseT, T1>::type
+operator%(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<mod_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<mod_op, T0, BaseT>::type
+operator%(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<mod_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<mod_op, BaseT0, BaseT1>::type
+operator%(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<mod_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  and lazy operator (infix &)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct and_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<and_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<and_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<and_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<and_op, BaseT, T1>::type
+operator&(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<and_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<and_op, T0, BaseT>::type
+operator&(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<and_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<and_op, BaseT0, BaseT1>::type
+operator&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<and_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  or lazy operator (infix |)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct or_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<or_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<or_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<or_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<or_op, BaseT, T1>::type
+operator|(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<or_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<or_op, T0, BaseT>::type
+operator|(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<or_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<or_op, BaseT0, BaseT1>::type
+operator|(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<or_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  xor lazy operator (infix ^)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct xor_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<xor_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<xor_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<xor_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<xor_op, BaseT, T1>::type
+operator^(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<xor_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<xor_op, T0, BaseT>::type
+operator^(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<xor_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<xor_op, BaseT0, BaseT1>::type
+operator^(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<xor_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  shift left lazy operator (infix <<)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_l_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<shift_l_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<shift_l_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<shift_l_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_l_op, BaseT, T1>::type
+operator<<(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<shift_l_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<shift_l_op, T0, BaseT>::type
+operator<<(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<shift_l_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<shift_l_op, BaseT0, BaseT1>::type
+operator<<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<shift_l_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  shift right lazy operator (infix >>)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_r_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<shift_r_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<shift_r_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<shift_r_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_r_op, BaseT, T1>::type
+operator>>(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<shift_r_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<shift_r_op, T0, BaseT>::type
+operator>>(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<shift_r_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<shift_r_op, BaseT0, BaseT1>::type
+operator>>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<shift_r_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  equal lazy operator (infix ==)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct eq_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<eq_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<eq_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<eq_op, BaseT, T1>::type
+operator==(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<eq_op, T0, BaseT>::type
+operator==(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<eq_op, BaseT0, BaseT1>::type
+operator==(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  not equal lazy operator (infix !=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct not_eq_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<not_eq_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<not_eq_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<not_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<not_eq_op, BaseT, T1>::type
+operator!=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<not_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<not_eq_op, T0, BaseT>::type
+operator!=(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<not_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<not_eq_op, BaseT0, BaseT1>::type
+operator!=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<not_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  less than lazy operator (infix <)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct lt_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<lt_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<lt_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<lt_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<lt_op, BaseT, T1>::type
+operator<(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<lt_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<lt_op, T0, BaseT>::type
+operator<(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<lt_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<lt_op, BaseT0, BaseT1>::type
+operator<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<lt_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  less than equal lazy operator (infix <=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct lt_eq_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<lt_eq_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<lt_eq_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<lt_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<lt_eq_op, BaseT, T1>::type
+operator<=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<lt_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<lt_eq_op, T0, BaseT>::type
+operator<=(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<lt_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::type
+operator<=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  greater than lazy operator (infix >)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct gt_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<gt_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<gt_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<gt_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<gt_op, BaseT, T1>::type
+operator>(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<gt_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<gt_op, T0, BaseT>::type
+operator>(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<gt_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<gt_op, BaseT0, BaseT1>::type
+operator>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<gt_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  greater than equal lazy operator (infix >=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct gt_eq_op {
+
+    template <typename T0, typename T1>
+    struct result {
+
+        typedef typename binary_operator<gt_eq_op, T0, T1>
+            ::result_type type;
+    };
+
+    template <typename T0, typename T1>
+    typename binary_operator<gt_eq_op, T0, T1>::result_type
+    operator()(T0& _0, T1& _1) const
+    { return binary_operator<gt_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<gt_eq_op, BaseT, T1>::type
+operator>=(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return impl::make_binary1<gt_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<gt_eq_op, T0, BaseT>::type
+operator>=(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary2<gt_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::type
+operator>=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  logical and lazy operator (infix &&)
+//
+//  The logical_and_composite class and its corresponding generators are
+//  provided to allow short-circuit evaluation of the operator's
+//  operands.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct logical_and_composite {
+
+    typedef logical_and_composite<A0, A1> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename binary_operator<logical_and_op,
+            typename actor_result<A0, TupleT>::plain_type,
+            typename actor_result<A1, TupleT>::plain_type
+        >::result_type type;
+    };
+
+    logical_and_composite(A0 const& _0, A1 const& _1)
+    :   a0(_0), a1(_1) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        return a0.eval(args) && a1.eval(args);
+    }
+
+    A0 a0; A1 a1; //  actors
+};
+
+#if !(defined(__ICL) && __ICL <= 500)
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline actor<logical_and_composite
+<actor<BaseT>, typename as_actor<T1>::type> >
+operator&&(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return logical_and_composite
+        <actor<BaseT>, typename as_actor<T1>::type>
+        (_0, as_actor<T1>::convert(_1));
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline actor<logical_and_composite
+<typename as_actor<T0>::type, actor<BaseT> > >
+operator&&(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return logical_and_composite
+        <typename as_actor<T0>::type, actor<BaseT> >
+        (as_actor<T0>::convert(_0), _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<logical_and_composite
+<actor<BaseT0>, actor<BaseT1> > >
+operator&&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return logical_and_composite
+        <actor<BaseT0>, actor<BaseT1> >
+        (_0, _1);
+}
+#else
+//////////////////////////////////
+template <typename T0, typename T1>
+inline actor<logical_and_composite
+<typename as_actor<T0>::type, typename as_actor<T1>::type> >
+operator&&(T0 CREF _0, T1 CREF _1)
+{
+    return logical_and_composite
+        <typename as_actor<T0>::type, typename as_actor<T1>::type>
+        (as_actor<T0>::convert(_0), as_actor<T1>::convert(_1));
+}
+#endif // !(__ICL && __ICL <= 500)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  logical or lazy operator (infix ||)
+//
+//  The logical_or_composite class and its corresponding generators are
+//  provided to allow short-circuit evaluation of the operator's
+//  operands.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct logical_or_composite {
+
+    typedef logical_or_composite<A0, A1> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef typename binary_operator<logical_or_op,
+            typename actor_result<A0, TupleT>::plain_type,
+            typename actor_result<A1, TupleT>::plain_type
+        >::result_type type;
+    };
+
+    logical_or_composite(A0 const& _0, A1 const& _1)
+    :   a0(_0), a1(_1) {}
+
+    template <typename TupleT>
+    typename actor_result<self_t, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        return a0.eval(args) || a1.eval(args);
+    }
+
+    A0 a0; A1 a1; //  actors
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline actor<logical_or_composite
+<actor<BaseT>, typename as_actor<T1>::type> >
+operator||(actor<BaseT> const& _0, T1 CREF _1)
+{
+    return logical_or_composite
+        <actor<BaseT>, typename as_actor<T1>::type>
+        (_0, as_actor<T1>::convert(_1));
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline actor<logical_or_composite
+<typename as_actor<T0>::type, actor<BaseT> > >
+operator||(T0 CREF _0, actor<BaseT> const& _1)
+{
+    return logical_or_composite
+        <typename as_actor<T0>::type, actor<BaseT> >
+        (as_actor<T0>::convert(_0), _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<logical_or_composite
+<actor<BaseT0>, actor<BaseT1> > >
+operator||(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return logical_or_composite
+        <actor<BaseT0>, actor<BaseT1> >
+        (_0, _1);
+}
+
+}   //  namespace phoenix
+
+#undef CREF
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/primitives.hpp
new file mode 100644 (file)
index 0000000..32dd5b9
--- /dev/null
@@ -0,0 +1,256 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_PRIMITIVES_HPP
+#define PHOENIX_PRIMITIVES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  argument class
+//
+//      Lazy arguments
+//
+//      An actor base class that extracts and returns the Nth argument
+//      from the argument list passed in the 'args' tuple in the eval
+//      member function (see actor.hpp). There are some predefined
+//      argument constants that can be used as actors (arg1..argN).
+//
+//      The argument actor is a place-holder for the actual arguments
+//      passed by the client. For example, wherever arg1 is seen placed
+//      in a lazy function (see functions.hpp) or lazy operator (see
+//      operators.hpp), this will be replaced by the actual first
+//      argument in the actual function evaluation. Argument actors are
+//      essentially lazy arguments. A lazy argument is a full actor in
+//      its own right and can be evaluated through the actor's operator().
+//
+//      Example:
+//
+//          char        c = 'A';
+//          int         i = 123;
+//          const char* s = "Hello World";
+//
+//          cout << arg1(c) << ' ';
+//          cout << arg1(i, s) << ' ';
+//          cout << arg2(i, s) << ' ';
+//
+//       will print out "A 123 Hello World"
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N>
+struct argument {
+
+    template <typename TupleT>
+    struct result { typedef typename tuple_element<N, TupleT>::type type; };
+
+    template <typename TupleT>
+    typename tuple_element<N, TupleT>::type
+    eval(TupleT const& args) const
+    {
+        return args[tuple_index<N>()];
+    }
+};
+
+//////////////////////////////////
+actor<argument<0> > const arg1 = argument<0>();
+actor<argument<1> > const arg2 = argument<1>();
+actor<argument<2> > const arg3 = argument<2>();
+
+#if PHOENIX_LIMIT > 3
+actor<argument<3> > const arg4 = argument<3>();
+actor<argument<4> > const arg5 = argument<4>();
+actor<argument<5> > const arg6 = argument<5>();
+
+#if PHOENIX_LIMIT > 6
+actor<argument<6> > const arg7 = argument<6>();
+actor<argument<7> > const arg8 = argument<7>();
+actor<argument<8> > const arg9 = argument<8>();
+
+#if PHOENIX_LIMIT > 9
+actor<argument<9> > const arg10 = argument<9>();
+actor<argument<10> > const arg11 = argument<10>();
+actor<argument<11> > const arg12 = argument<11>();
+
+#if PHOENIX_LIMIT > 12
+actor<argument<12> > const arg13 = argument<12>();
+actor<argument<13> > const arg14 = argument<13>();
+actor<argument<14> > const arg15 = argument<14>();
+
+#endif
+#endif
+#endif
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+//  value class
+//
+//      Lazy values
+//
+//      A bound actual parameter is kept in a value class for deferred
+//      access later when needed. A value object is immutable. Value
+//      objects are typically created through the val(x) free function
+//      which returns a value<T> with T deduced from the type of x. x is
+//      held in the value<T> object by value.
+//
+//      Lazy values are actors. As such, lazy values can be evaluated
+//      through the actor's operator(). Such invocation gives the value's
+//      identity. Example:
+//
+//          cout << val(3)() << val("Hello World")();
+//
+//      prints out "3 Hello World"
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct value {
+
+    typedef typename boost::remove_reference<T>::type plain_t;
+
+    template <typename TupleT>
+    struct result { typedef plain_t const type; };
+
+    value(plain_t val_)
+    :   val(val_) {}
+
+    template <typename TupleT>
+    plain_t const
+    eval(TupleT const& /*args*/) const
+    {
+        return val;
+    }
+
+    plain_t val;
+};
+
+//////////////////////////////////
+template <typename T>
+inline actor<value<T> > const
+val(T v)
+{
+    return value<T>(v);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+void
+val(actor<BaseT> const& v);     //  This is undefined and not allowed.
+
+///////////////////////////////////////////////////////////////////////////
+//
+//  Arbitrary types T are typically converted to a actor<value<T> >
+//  (see as_actor<T> in actor.hpp). A specialization is also provided
+//  for arrays. T[N] arrays are converted to actor<value<T const*> >.
+//
+///////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct as_actor {
+
+    typedef actor<value<T> > type;
+    static type convert(T const& x)
+    { return value<T>(x); }
+};
+
+//////////////////////////////////
+template <typename T, int N>
+struct as_actor<T[N]> {
+
+    typedef actor<value<T const*> > type;
+    static type convert(T const x[N])
+    { return value<T const*>(x); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  variable class
+//
+//      Lazy variables
+//
+//      A bound actual parameter may also be held by non-const reference
+//      in a variable class for deferred access later when needed. A
+//      variable object is mutable, i.e. its referenced variable can be
+//      modified. Variable objects are typically created through the
+//      var(x) free function which returns a variable<T> with T deduced
+//      from the type of x. x is held in the value<T> object by
+//      reference.
+//
+//      Lazy variables are actors. As such, lazy variables can be
+//      evaluated through the actor's operator(). Such invocation gives
+//      the variables's identity. Example:
+//
+//          int i = 3;
+//          char const* s = "Hello World";
+//          cout << var(i)() << var(s)();
+//
+//      prints out "3 Hello World"
+//
+//      Another free function const_(x) may also be used. const_(x) creates
+//      a variable<T const&> object using a constant reference.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+template <typename T>
+struct variable {
+
+    template <typename TupleT>
+    struct result { typedef T& type; };
+
+    variable(T& var_)
+    :   var(var_) {}
+
+    template <typename TupleT>
+    T&
+    eval(TupleT const& /*args*/) const
+    {
+        return var;
+    }
+
+    T& var;
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+//////////////////////////////////
+template <typename T>
+inline actor<variable<T> > const
+var(T& v)
+{
+    return variable<T>(v);
+}
+
+//////////////////////////////////
+template <typename T>
+inline actor<variable<T const> > const
+const_(T const& v)
+{
+    return variable<T const>(v);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+void
+var(actor<BaseT> const& v);     //  This is undefined and not allowed.
+
+//////////////////////////////////
+template <typename BaseT>
+void
+const_(actor<BaseT> const& v);  //  This is undefined and not allowed.
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/special_ops.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/special_ops.hpp
new file mode 100644 (file)
index 0000000..4a007b2
--- /dev/null
@@ -0,0 +1,285 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_SPECIAL_OPS_HPP
+#define PHOENIX_SPECIAL_OPS_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define PHOENIX_SSTREAM strstream
+#else
+#include <sstream>
+#define PHOENIX_SSTREAM stringstream
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/operators.hpp>
+#include <iosfwd>
+
+///////////////////////////////////////////////////////////////////////////////
+#if defined(_STLPORT_VERSION) && defined(__STL_USE_OWN_NAMESPACE)
+#define PHOENIX_STD _STLP_STD
+#define PHOENIX_NO_STD_NAMESPACE
+#else
+#define PHOENIX_STD std
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//#if !defined(PHOENIX_NO_STD_NAMESPACE)
+namespace PHOENIX_STD
+{
+//#endif
+
+    template<typename T> class complex;
+
+//#if !defined(PHOENIX_NO_STD_NAMESPACE)
+}
+//#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The following specializations take into account the C++ standard
+//  library components. There are a couple of issues that have to be
+//  dealt with to enable lazy operator overloads for the standard
+//  library classes.
+//
+//      *iostream (e.g. cout, cin, strstream/ stringstream) uses non-
+//      canonical shift operator overloads where the lhs is taken in
+//      by reference.
+//
+//      *I/O manipulators overloads for the RHS of the << and >>
+//      operators.
+//
+//      *STL iterators can be objects that conform to pointer semantics.
+//      Some operators need to be specialized for these.
+//
+//      *std::complex is given a rank (see rank class in operators.hpp)
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  specialization for rank<std::complex>
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T> struct rank<PHOENIX_STD::complex<T> >
+{ static int const value = 170 + rank<T>::value; };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  specializations for std::istream
+//
+///////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_r_op, PHOENIX_STD::istream, T1>
+{
+    typedef PHOENIX_STD::istream& result_type;
+    static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
+    { return out >> rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+    <shift_r_op, variable<PHOENIX_STD::istream>, BaseT>::type
+operator>>(PHOENIX_STD::istream& _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary3
+    <shift_r_op, variable<PHOENIX_STD::istream>, BaseT>
+    ::construct(var(_0), _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  specializations for std::ostream
+//
+///////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_l_op, PHOENIX_STD::ostream, T1>
+{
+    typedef PHOENIX_STD::ostream& result_type;
+    static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
+    { return out << rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+    <shift_l_op, variable<PHOENIX_STD::ostream>, BaseT>::type
+operator<<(PHOENIX_STD::ostream& _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary3
+    <shift_l_op, variable<PHOENIX_STD::ostream>, BaseT>
+    ::construct(var(_0), _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  specializations for std::strstream / stringstream
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_r_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
+{
+    typedef PHOENIX_STD::istream& result_type;
+    static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
+    { return out >> rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+    <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
+operator>>(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary3
+    <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
+    ::construct(var(_0), _1);
+}
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_l_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
+{
+    typedef PHOENIX_STD::ostream& result_type;
+    static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
+    { return out << rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+    <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
+operator<<(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
+{
+    return impl::make_binary3
+    <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
+    ::construct(var(_0), _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//      I/O manipulator specializations
+//
+///////////////////////////////////////////////////////////////////////////////
+
+typedef PHOENIX_STD::ios_base&  (*iomanip_t)(PHOENIX_STD::ios_base&);
+typedef PHOENIX_STD::istream&   (*imanip_t)(PHOENIX_STD::istream&);
+typedef PHOENIX_STD::ostream&   (*omanip_t)(PHOENIX_STD::ostream&);
+
+#if defined(__BORLANDC__)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//      Borland does not like i/o manipulators functions such as endl to
+//      be the rhs of a lazy << operator (Borland incorrectly reports
+//      ambiguity). To get around the problem, we provide function
+//      pointer versions of the same name with a single trailing
+//      underscore.
+//
+//      You can use the same trick for other i/o manipulators.
+//      Alternatively, you can prefix the manipulator with a '&'
+//      operator. Example:
+//
+//          cout << arg1 << &endl
+//
+///////////////////////////////////////////////////////////////////////////////
+
+imanip_t    ws_     = &PHOENIX_STD::ws;
+iomanip_t   dec_    = &PHOENIX_STD::dec;
+iomanip_t   hex_    = &PHOENIX_STD::hex;
+iomanip_t   oct_    = &PHOENIX_STD::oct;
+omanip_t    endl_   = &PHOENIX_STD::endl;
+omanip_t    ends_   = &PHOENIX_STD::ends;
+omanip_t    flush_  = &PHOENIX_STD::flush;
+
+#else // __BORLANDC__
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//      The following are overloads for I/O manipulators.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, imanip_t>::type
+operator>>(actor<BaseT> const& _0, imanip_t _1)
+{
+    return impl::make_binary1<shift_l_op, BaseT, imanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
+operator>>(actor<BaseT> const& _0, iomanip_t _1)
+{
+    return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, omanip_t>::type
+operator<<(actor<BaseT> const& _0, omanip_t _1)
+{
+    return impl::make_binary1<shift_l_op, BaseT, omanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
+operator<<(actor<BaseT> const& _0, iomanip_t _1)
+{
+    return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
+}
+
+#endif // __BORLANDC__
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  specializations for stl iterators and containers
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T>
+{
+    typedef typename T::reference result_type;
+    static result_type eval(T const& iter)
+    { return *iter; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0, T1>
+{
+    typedef typename T0::reference result_type;
+    static result_type eval(T0& container, T1 const& index)
+    { return container[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0 const, T1>
+{
+    typedef typename T0::const_reference result_type;
+    static result_type eval(T0 const& container, T1 const& index)
+    { return container[index]; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#undef PHOENIX_SSTREAM
+#undef PHOENIX_STD
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/statements.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/statements.hpp
new file mode 100644 (file)
index 0000000..7726a99
--- /dev/null
@@ -0,0 +1,443 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_STATEMENTS_HPP
+#define PHOENIX_STATEMENTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  sequential_composite
+//
+//      Two or more actors separated by the comma generates a
+//      sequential_composite which is a composite actor. Example:
+//
+//          actor,
+//          actor,
+//          actor
+//
+//      The actors are evaluated sequentially. The result type of this
+//      is void. Note that the last actor should not have a trailing
+//      comma.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct sequential_composite {
+
+    typedef sequential_composite<A0, A1> self_t;
+
+    template <typename TupleT>
+    struct result { typedef void type; };
+
+    sequential_composite(A0 const& _0, A1 const& _1)
+    :   a0(_0), a1(_1) {}
+
+    template <typename TupleT>
+    void
+    eval(TupleT const& args) const
+    {
+        a0.eval(args);
+        a1.eval(args);
+    }
+
+    A0 a0; A1 a1; //  actors
+};
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<sequential_composite<actor<BaseT0>, actor<BaseT1> > >
+operator,(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+    return sequential_composite<actor<BaseT0>, actor<BaseT1> >(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  if_then_else_composite
+//
+//      This composite has two (2) forms:
+//
+//          if_(condition)
+//          [
+//              statement
+//          ]
+//
+//      and
+//
+//          if_(condition)
+//          [
+//              true_statement
+//          ]
+//          .else_
+//          [
+//              false_statement
+//          ]
+//
+//      where condition is an actor that evaluates to bool. If condition
+//      is true, the true_statement (again an actor) is executed
+//      otherwise, the false_statement (another actor) is executed. The
+//      result type of this is void. Note the trailing underscore after
+//      if_ and the leading dot and the trailing underscore before
+//      and after .else_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename ThenT, typename ElseT>
+struct if_then_else_composite {
+
+    typedef if_then_else_composite<CondT, ThenT, ElseT> self_t;
+
+    template <typename TupleT>
+    struct result {
+
+        typedef void type;
+    };
+
+    if_then_else_composite(
+        CondT const& cond_,
+        ThenT const& then_,
+        ElseT const& else__)
+    :   cond(cond_), then(then_), else_(else__) {}
+
+    template <typename TupleT>
+    void eval(TupleT const& args) const
+    {
+        if (cond.eval(args))
+            then.eval(args);
+        else
+            else_.eval(args);
+    }
+
+    CondT cond; ThenT then; ElseT else_; //  actors
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct else_gen {
+
+    else_gen(CondT const& cond_, ThenT const& then_)
+    :   cond(cond_), then(then_) {}
+
+    template <typename ElseT>
+    actor<if_then_else_composite<CondT, ThenT,
+        typename as_actor<ElseT>::type> >
+    operator[](ElseT const& else_)
+    {
+        typedef if_then_else_composite<CondT, ThenT,
+            typename as_actor<ElseT>::type>
+        result;
+
+        return result(cond, then, as_actor<ElseT>::convert(else_));
+    }
+
+    CondT cond; ThenT then;
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct if_then_composite {
+
+    typedef if_then_composite<CondT, ThenT> self_t;
+
+    template <typename TupleT>
+    struct result { typedef void type; };
+
+    if_then_composite(CondT const& cond_, ThenT const& then_)
+    :   cond(cond_), then(then_), else_(cond, then) {}
+
+    template <typename TupleT>
+    void eval(TupleT const& args) const
+    {
+        if (cond.eval(args))
+            then.eval(args);
+    }
+
+    CondT cond; ThenT then; //  actors
+    else_gen<CondT, ThenT> else_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct if_gen {
+
+    if_gen(CondT const& cond_)
+    :   cond(cond_) {}
+
+    template <typename ThenT>
+    actor<if_then_composite<
+        typename as_actor<CondT>::type,
+        typename as_actor<ThenT>::type> >
+    operator[](ThenT const& then) const
+    {
+        typedef if_then_composite<
+            typename as_actor<CondT>::type,
+            typename as_actor<ThenT>::type>
+        result;
+
+        return result(
+            as_actor<CondT>::convert(cond),
+            as_actor<ThenT>::convert(then));
+    }
+
+    CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline if_gen<CondT>
+if_(CondT const& cond)
+{
+    return if_gen<CondT>(cond);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  while_composite
+//
+//      This composite has the form:
+//
+//          while_(condition)
+//          [
+//              statement
+//          ]
+//
+//      While the condition (an actor) evaluates to true, statement
+//      (another actor) is executed. The result type of this is void.
+//      Note the trailing underscore after while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename DoT>
+struct while_composite {
+
+    typedef while_composite<CondT, DoT> self_t;
+
+    template <typename TupleT>
+    struct result { typedef void type; };
+
+    while_composite(CondT const& cond_, DoT const& do__)
+    :   cond(cond_), do_(do__) {}
+
+    template <typename TupleT>
+    void eval(TupleT const& args) const
+    {
+        while (cond.eval(args))
+            do_.eval(args);
+    }
+
+    CondT cond;
+    DoT do_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct while_gen {
+
+    while_gen(CondT const& cond_)
+    :   cond(cond_) {}
+
+    template <typename DoT>
+    actor<while_composite<
+        typename as_actor<CondT>::type,
+        typename as_actor<DoT>::type> >
+    operator[](DoT const& do_) const
+    {
+        typedef while_composite<
+            typename as_actor<CondT>::type,
+            typename as_actor<DoT>::type>
+        result;
+
+        return result(
+            as_actor<CondT>::convert(cond),
+            as_actor<DoT>::convert(do_));
+    }
+
+    CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline while_gen<CondT>
+while_(CondT const& cond)
+{
+    return while_gen<CondT>(cond);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  do_composite
+//
+//      This composite has the form:
+//
+//          do_
+//          [
+//              statement
+//          ]
+//          .while_(condition)
+//
+//      While the condition (an actor) evaluates to true, statement
+//      (another actor) is executed. The statement is executed at least
+//      once. The result type of this is void. Note the trailing
+//      underscore after do_ and the the leading dot and the trailing
+//      underscore before and after .while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DoT, typename CondT>
+struct do_composite {
+
+    typedef do_composite<DoT, CondT> self_t;
+
+    template <typename TupleT>
+    struct result { typedef void type; };
+
+    do_composite(DoT const& do__, CondT const& cond_)
+    :   do_(do__), cond(cond_) {}
+
+    template <typename TupleT>
+    void eval(TupleT const& args) const
+    {
+        do
+            do_.eval(args);
+        while (cond.eval(args));
+    }
+
+    DoT do_;
+    CondT cond;
+};
+
+////////////////////////////////////
+template <typename DoT>
+struct do_gen2 {
+
+    do_gen2(DoT const& do__)
+    :   do_(do__) {}
+
+    template <typename CondT>
+    actor<do_composite<
+        typename as_actor<DoT>::type,
+        typename as_actor<CondT>::type> >
+    while_(CondT const& cond) const
+    {
+        typedef do_composite<
+            typename as_actor<DoT>::type,
+            typename as_actor<CondT>::type>
+        result;
+
+        return result(
+            as_actor<DoT>::convert(do_),
+            as_actor<CondT>::convert(cond));
+    }
+
+    DoT do_;
+};
+
+////////////////////////////////////
+struct do_gen {
+
+    template <typename DoT>
+    do_gen2<DoT>
+    operator[](DoT const& do_) const
+    {
+        return do_gen2<DoT>(do_);
+    }
+};
+
+do_gen const do_ = do_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  for_composite
+//
+//      This statement has the form:
+//
+//          for_(init, condition, step)
+//          [
+//              statement
+//          ]
+//
+//      Where init, condition, step and statement are all actors. init
+//      is executed once before entering the for-loop. The for-loop
+//      exits once condition evaluates to false. At each loop iteration,
+//      step and statement is called. The result of this statement is
+//      void. Note the trailing underscore after for_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename InitT, typename CondT, typename StepT, typename DoT>
+struct for_composite {
+
+    typedef composite<InitT, CondT, StepT, DoT> self_t;
+
+    template <typename TupleT>
+    struct result { typedef void type; };
+
+    for_composite(
+        InitT const& init_,
+        CondT const& cond_,
+        StepT const& step_,
+        DoT const& do__)
+    :   init(init_), cond(cond_), step(step_), do_(do__) {}
+
+    template <typename TupleT>
+    void
+    eval(TupleT const& args) const
+    {
+        for (init.eval(args); cond.eval(args); step.eval(args))
+            do_.eval(args);
+    }
+
+    InitT init; CondT cond; StepT step; DoT do_; //  actors
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+struct for_gen {
+
+    for_gen(
+        InitT const& init_,
+        CondT const& cond_,
+        StepT const& step_)
+    :   init(init_), cond(cond_), step(step_) {}
+
+    template <typename DoT>
+    actor<for_composite<
+        typename as_actor<InitT>::type,
+        typename as_actor<CondT>::type,
+        typename as_actor<StepT>::type,
+        typename as_actor<DoT>::type> >
+    operator[](DoT const& do_) const
+    {
+        typedef for_composite<
+            typename as_actor<InitT>::type,
+            typename as_actor<CondT>::type,
+            typename as_actor<StepT>::type,
+            typename as_actor<DoT>::type>
+        result;
+
+        return result(
+            as_actor<InitT>::convert(init),
+            as_actor<CondT>::convert(cond),
+            as_actor<StepT>::convert(step),
+            as_actor<DoT>::convert(do_));
+    }
+
+    InitT init; CondT cond; StepT step;
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+inline for_gen<InitT, CondT, StepT>
+for_(InitT const& init, CondT const& cond, StepT const& step)
+{
+    return for_gen<InitT, CondT, StepT>(init, cond, step);
+}
+
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuple_helpers.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuple_helpers.hpp
new file mode 100644 (file)
index 0000000..003d018
--- /dev/null
@@ -0,0 +1,1075 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2002 Joel de Guzman
+    Copyright (c) 2002-2003 Hartmut Kaiser
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_TUPLEHELPERS_HPP
+#define PHOENIX_TUPLEHELPERS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <cassert>
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  make_tuple template class
+//
+//      This template class is used to calculate a tuple type required to hold
+//      the given template parameter type
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//  normal (non-tuple types are wrapped into a tuple)
+template <typename ResultT>
+struct make_tuple {
+
+    typedef tuple<ResultT> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  nil_t is converted to an empty tuple type
+template <>
+struct make_tuple<nil_t> {
+
+    typedef tuple<> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//  tuple types are left alone without any refactoring
+template <
+      typename A, typename B, typename C
+#if PHOENIX_LIMIT > 3
+    , typename D, typename E, typename F
+#if PHOENIX_LIMIT > 6
+    , typename G, typename H, typename I
+#if PHOENIX_LIMIT > 9
+    , typename J, typename K, typename L
+#if PHOENIX_LIMIT > 12
+    , typename M, typename N, typename O
+#endif
+#endif
+#endif
+#endif
+>
+struct make_tuple<tuple<A, B, C
+#if PHOENIX_LIMIT > 3
+    , D, E, F
+#if PHOENIX_LIMIT > 6
+    , G, H, I
+#if PHOENIX_LIMIT > 9
+    , J, K, L
+#if PHOENIX_LIMIT > 12
+    , M, N, O
+#endif
+#endif
+#endif
+#endif
+    > > {
+
+// the tuple parameter itself is the required tuple type
+    typedef tuple<A, B, C
+#if PHOENIX_LIMIT > 3
+        , D, E, F
+#if PHOENIX_LIMIT > 6
+        , G, H, I
+#if PHOENIX_LIMIT > 9
+        , J, K, L
+#if PHOENIX_LIMIT > 12
+        , M, N, O
+#endif
+#endif
+#endif
+#endif
+        > type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat_tuple type computer
+//
+//      This class returns the type of a tuple, which is constructed by
+//      concatenating a tuple with a given type
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT, typename AppendT>
+struct concat_tuple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <0 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename AppendT>
+struct concat_tuple<tuple<>, AppendT> {
+
+    typedef tuple<AppendT> type;
+};
+
+template <>
+struct concat_tuple<tuple<>, nil_t> {
+
+    typedef tuple<> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <1 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename AppendT>
+struct concat_tuple<tuple<A>, AppendT> {
+
+    typedef tuple<A, AppendT> type;
+};
+
+template <typename A>
+struct concat_tuple<tuple<A>, nil_t> {
+
+    typedef tuple<A> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <2 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename AppendT>
+struct concat_tuple<tuple<A, B>, AppendT> {
+
+    typedef tuple<A, B, AppendT> type;
+};
+
+template <typename A, typename B>
+struct concat_tuple<tuple<A, B>, nil_t> {
+
+    typedef tuple<A, B> type;
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <3 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C>, AppendT> {
+
+    typedef tuple<A, B, C, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C
+>
+struct concat_tuple<tuple<A, B, C>, nil_t> {
+
+    typedef tuple<A, B, C> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <4 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D>, AppendT> {
+
+    typedef tuple<A, B, C, D, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D
+>
+struct concat_tuple<tuple<A, B, C, D>, nil_t> {
+
+    typedef tuple<A, B, C, D> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <5 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E
+>
+struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
+
+    typedef tuple<A, B, C, D, E> type;
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <6 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F
+>
+struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <7 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <8 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H> type;
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <9 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <10 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <11 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <12 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <13 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L,
+    typename M,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L,
+    typename M
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat tuple <14 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L,
+    typename M, typename N,
+    typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
+};
+
+template <
+    typename A, typename B, typename C, typename D, typename E, typename F,
+    typename G, typename H, typename I, typename J, typename K, typename L,
+    typename M, typename N
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
+
+    typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
+};
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  concat_tuples type computer
+//
+//      This template class returns the type of a tuple built from the
+//      concatenation of two given tuples.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT1, typename TupleT2, int N, typename AppendT>
+struct concat_tuple_element {
+
+    typedef
+        typename concat_tuple_element<
+                typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
+                typename tuple_element<N+1, TupleT2>::type
+            >::type
+        type;
+};
+
+template <typename TupleT1, typename TupleT2, int N>
+struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
+
+    typedef TupleT1 type;
+};
+
+template <typename TupleT1, typename TupleT2>
+struct concat_tuples {
+
+    typedef
+        typename concat_tuple_element<
+                TupleT1, TupleT2, 0,
+                typename tuple_element<0, TupleT2>::type
+            >::type
+        type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  convert_actors template function
+//
+//      The convert_actors template functions constructs a new tuple object
+//      composed of the elements returned by the actors contained in the
+//      input tuple. (i.e. the given tuple type 'actor_tuple' contains a set
+//      of actors to evaluate and the resulting tuple contains the results of
+//      evaluating the actors.)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActorT, typename TupleT>
+struct actor_result; // forward declaration
+
+namespace impl
+{
+    template <unsigned N>
+    struct convert_actors_ {};
+}
+
+template <typename TupleResultT, typename ActorTupleT>
+TupleResultT
+convert_actors(ActorTupleT const& actor_tuple)
+{
+    BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
+    BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
+    return impl::convert_actors_<length>
+        ::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
+}
+
+namespace impl
+{
+    template <int N, typename TupleResultT, typename ActorTupleT>
+    struct convert_actor
+    {
+        typedef typename tuple_element<N, TupleResultT>::type type;
+
+        template <bool C>
+        struct is_default_t {};
+        typedef is_default_t<true>  is_default;
+        typedef is_default_t<false> is_not_default;
+
+        static type
+        actor_element(ActorTupleT const& /*actor_tuple*/, is_default)
+        {
+            return type(); // default construct
+        }
+
+        static type
+        actor_element(ActorTupleT const& actor_tuple, is_not_default)
+        {
+            BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
+            return actor_tuple[tuple_index<N>()](); // apply the actor
+        }
+
+        static type
+        do_(ActorTupleT const& actor_tuple)
+        {
+            return actor_element(
+                actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
+        }
+    };
+
+    ///////////////////////////////////////
+    template <>
+    struct convert_actors_<1>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+
+                return TupleResultT(
+                    converter0::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    ///////////////////////////////////////
+    template <>
+    struct convert_actors_<2>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    ///////////////////////////////////////
+    template <>
+    struct convert_actors_<3>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    #if PHOENIX_LIMIT > 3
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<4>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<5>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<6>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    #if PHOENIX_LIMIT > 6
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<7>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<8>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<9>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    #if PHOENIX_LIMIT > 9
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<10>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<11>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+                typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                    ,   converter10::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<12>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+                typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+                typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                    ,   converter10::do_(actor_tuple)
+                    ,   converter11::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    #if PHOENIX_LIMIT > 12
+
+    /////////////////////////////////////
+    template <>
+    struct convert_actors_<13>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+                typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+                typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+                typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                    ,   converter10::do_(actor_tuple)
+                    ,   converter11::do_(actor_tuple)
+                    ,   converter12::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    ///////////////////////////////////////
+    template <>
+    struct convert_actors_<14>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+                typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+                typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+                typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+                typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                    ,   converter10::do_(actor_tuple)
+                    ,   converter11::do_(actor_tuple)
+                    ,   converter12::do_(actor_tuple)
+                    ,   converter13::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    ///////////////////////////////////////
+    template <>
+    struct convert_actors_<15>
+    {
+        template <typename TupleResultT, typename ActorTupleT>
+        struct apply
+        {
+            static TupleResultT
+            do_(ActorTupleT const& actor_tuple)
+            {
+                typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+                typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+                typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+                typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+                typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+                typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+                typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+                typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+                typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+                typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+                typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+                typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+                typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+                typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
+                typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
+
+                using namespace tuple_index_names;
+                return TupleResultT(
+                        converter0::do_(actor_tuple)
+                    ,   converter1::do_(actor_tuple)
+                    ,   converter2::do_(actor_tuple)
+                    ,   converter3::do_(actor_tuple)
+                    ,   converter4::do_(actor_tuple)
+                    ,   converter5::do_(actor_tuple)
+                    ,   converter6::do_(actor_tuple)
+                    ,   converter7::do_(actor_tuple)
+                    ,   converter8::do_(actor_tuple)
+                    ,   converter9::do_(actor_tuple)
+                    ,   converter10::do_(actor_tuple)
+                    ,   converter11::do_(actor_tuple)
+                    ,   converter12::do_(actor_tuple)
+                    ,   converter13::do_(actor_tuple)
+                    ,   converter14::do_(actor_tuple)
+                );
+            }
+        };
+    };
+
+    #endif
+    #endif
+    #endif
+    #endif
+}   //  namespace impl
+
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif // PHOENIX_TUPLEHELPERS_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuples.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/phoenix/tuples.hpp
new file mode 100644 (file)
index 0000000..a52b4e1
--- /dev/null
@@ -0,0 +1,1334 @@
+/*=============================================================================
+    Phoenix V1.2.1
+    Copyright (c) 2001-2002 Joel de Guzman
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef PHOENIX_TUPLES_HPP
+#define PHOENIX_TUPLES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Phoenix predefined maximum limit. This limit defines the maximum
+//  number of elements a tuple can hold. This number defaults to 3. The
+//  actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//
+///////////////////////////////////////////////////////////////////////////////
+#ifndef PHOENIX_LIMIT
+#define PHOENIX_LIMIT 3
+#endif
+
+#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x561)
+namespace phoenix { namespace borland_only
+{
+    namespace ftors
+    {
+        //  We define these dummy template functions. Borland complains when
+        //  a template class has the same name as a template function,
+        //  regardless if they are in different namespaces.
+
+        template <typename T> void if_(T) {}
+        template <typename T> void for_(T) {}
+        template <typename T> void while_(T) {}
+        template <typename T> void do_(T) {}
+    }
+
+    namespace tmpls
+    {
+        //  We define these dummy template functions. Borland complains when
+        //  a template class has the same name as a template function,
+        //  regardless if they are in different namespaces.
+
+        template <typename T> struct if_ {};
+        template <typename T> struct for_ {};
+        template <typename T> struct while_ {};
+        template <typename T> struct do_ {};
+    }
+
+}} // namespace phoenix::borland_only
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple
+//
+//      Tuples hold heterogeneous types up to a predefined maximum. Only
+//      the most basic functionality needed is provided. Unlike other
+//      recursive list-like tuple implementations, this tuple
+//      implementation uses simple structs similar to std::pair with
+//      specialization for 0 to N tuple elements.
+//
+//          1)  Construction
+//              Here are examples on how to construct tuples:
+//
+//                  typedef tuple<int, char> t1_t;
+//                  typedef tuple<int, std::string, double> t2_t;
+//
+//                  // this tuple has an int and char members
+//                  t1_t t1(3, 'c');
+//
+//                  // this tuple has an int, std::string and double members
+//                  t2_t t2(3, "hello", 3.14);
+//
+//              Tuples can also be constructed from other tuples. The
+//              source and destination tuples need not have exactly the
+//              same element types. The only requirement is that the
+//              source tuple have the same number of elements as the
+//              destination and that each element slot in the
+//              destination can be copy constructed from the source
+//              element. For example:
+//
+//                  tuple<double, double> t3(t1); // OK. Compatible tuples
+//                  tuple<double, double> t4(t2); // Error! Incompatible tuples
+//
+//          2)  Member access
+//                  A member in a tuple can be accessed using the
+//                  tuple's [] operator by specifying the Nth
+//                  tuple_index. Here are some examples:
+//
+//                      tuple_index<0> ix0; // 0th index == 1st item
+//                      tuple_index<1> ix1; // 1st index == 2nd item
+//                      tuple_index<2> ix2; // 2nd index == 3rd item
+//
+//                      t1[ix0] = 33;  // sets the int member of the tuple t1
+//                      t2[ix2] = 6e6; // sets the double member of the tuple t2
+//                      t1[ix1] = 'a'; // sets the char member of the tuple t1
+//
+//                  There are some predefined names are provided in sub-
+//                  namespace tuple_index_names:
+//
+//                      tuple_index<0> _1;
+//                      tuple_index<1> _2;
+//                      ...
+//                      tuple_index<N> _N;
+//
+//                  These indexes may be used by 'using' namespace
+//                  phoenix::tuple_index_names.
+//
+//                  Access to out of bound indexes returns a nil_t value.
+//
+//          3)  Member type inquiry
+//                  The type of an individual member can be queried.
+//                  Example:
+//
+//                      tuple_element<1, t2_t>::type
+//
+//                  Refers to the type of the second member (note zero based,
+//                  thus 0 = 1st item, 1 = 2nd item) of the tuple.
+//
+//                  Aside from tuple_element<N, T>::type, there are two
+//                  more types that tuple_element provides: rtype and
+//                  crtype. While 'type' is the plain underlying type,
+//                  'rtype' is the reference type, or type& and 'crtype'
+//                  is the constant reference type or type const&. The
+//                  latter two are provided to make it easy for the
+//                  client in dealing with the possibility of reference
+//                  to reference when type is already a reference, which
+//                  is illegal in C++.
+//
+//                  Access to out of bound indexes returns a nil_t type.
+//
+//          4)  Tuple length
+//                  The number of elements in a tuple can be queried.
+//                  Example:
+//
+//                      int n = t1.length;
+//
+//                  gets the number of elements in tuple t1.
+//
+//                  length is a static constant. Thus, TupleT::length
+//                  also works. Example:
+//
+//                      int n = t1_t::length;
+//
+///////////////////////////////////////////////////////////////////////////////
+struct nil_t {};
+using boost::remove_reference;
+using boost::call_traits;
+
+//////////////////////////////////
+namespace impl {
+
+    template <typename T>
+    struct access {
+
+        typedef const T& ctype;
+        typedef T& type;
+    };
+
+    template <typename T>
+    struct access<T&> {
+
+        typedef T& ctype;
+        typedef T& type;
+    };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple_element
+//
+//      A query class that gets the Nth element inside a tuple.
+//      Examples:
+//
+//          tuple_element<1, tuple<int, char, void*> >::type    //  plain
+//          tuple_element<1, tuple<int, char, void*> >::rtype   //  ref
+//          tuple_element<1, tuple<int, char, void*> >::crtype  //  const ref
+//
+//      Has type char which is the 2nd type in the tuple
+//      (note zero based, thus 0 = 1st item, 1 = 2nd item).
+//
+//          Given a tuple object, the static function tuple_element<N,
+//          TupleT>::get(tuple) gets the Nth element in the tuple. The
+//          tuple class' tuple::operator[] uses this to get its Nth
+//          element.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename TupleT>
+struct tuple_element
+{
+    typedef nil_t type;
+    typedef nil_t& rtype;
+    typedef nil_t const& crtype;
+
+    static nil_t    get(TupleT const& t)    { return nil_t(); }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<0, TupleT>
+{
+    typedef typename TupleT::a_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.a; }
+    static crtype   get(TupleT const& t)    { return t.a; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<1, TupleT>
+{
+    typedef typename TupleT::b_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.b; }
+    static crtype   get(TupleT const& t)    { return t.b; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<2, TupleT>
+{
+    typedef typename TupleT::c_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.c; }
+    static crtype   get(TupleT const& t)    { return t.c; }
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<3, TupleT>
+{
+    typedef typename TupleT::d_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.d; }
+    static crtype   get(TupleT const& t)    { return t.d; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<4, TupleT>
+{
+    typedef typename TupleT::e_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.e; }
+    static crtype   get(TupleT const& t)    { return t.e; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<5, TupleT>
+{
+    typedef typename TupleT::f_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.f; }
+    static crtype   get(TupleT const& t)    { return t.f; }
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<6, TupleT>
+{
+    typedef typename TupleT::g_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.g; }
+    static crtype   get(TupleT const& t)    { return t.g; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<7, TupleT>
+{
+    typedef typename TupleT::h_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.h; }
+    static crtype   get(TupleT const& t)    { return t.h; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<8, TupleT>
+{
+    typedef typename TupleT::i_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.i; }
+    static crtype   get(TupleT const& t)    { return t.i; }
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<9, TupleT>
+{
+    typedef typename TupleT::j_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.j; }
+    static crtype   get(TupleT const& t)    { return t.j; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<10, TupleT>
+{
+    typedef typename TupleT::k_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.k; }
+    static crtype   get(TupleT const& t)    { return t.k; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<11, TupleT>
+{
+    typedef typename TupleT::l_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.l; }
+    static crtype   get(TupleT const& t)    { return t.l; }
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<12, TupleT>
+{
+    typedef typename TupleT::m_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.m; }
+    static crtype   get(TupleT const& t)    { return t.m; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<13, TupleT>
+{
+    typedef typename TupleT::n_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.n; }
+    static crtype   get(TupleT const& t)    { return t.n; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<14, TupleT>
+{
+    typedef typename TupleT::o_type type;
+    typedef typename impl::access<type>::type rtype;
+    typedef typename impl::access<type>::ctype crtype;
+
+    static rtype    get(TupleT& t)          { return t.o; }
+    static crtype   get(TupleT const& t)    { return t.o; }
+};
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple forward declaration.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+        typename A = nil_t
+    ,   typename B = nil_t
+    ,   typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+    ,   typename D = nil_t
+    ,   typename E = nil_t
+    ,   typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+    ,   typename G = nil_t
+    ,   typename H = nil_t
+    ,   typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+    ,   typename J = nil_t
+    ,   typename K = nil_t
+    ,   typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+    ,   typename M = nil_t
+    ,   typename N = nil_t
+    ,   typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+    ,   typename NU = nil_t  // Not used
+>
+struct tuple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple_index
+//
+//      This class wraps an integer in a type to be used for indexing
+//      the Nth element in a tuple. See tuple operator[]. Some
+//      predefined names are provided in sub-namespace
+//      tuple_index_names.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N>
+struct tuple_index {};
+
+//////////////////////////////////
+namespace tuple_index_names {
+
+    tuple_index<0> const _1 = tuple_index<0>();
+    tuple_index<1> const _2 = tuple_index<1>();
+    tuple_index<2> const _3 = tuple_index<2>();
+
+#if PHOENIX_LIMIT > 3
+    tuple_index<3> const _4 = tuple_index<3>();
+    tuple_index<4> const _5 = tuple_index<4>();
+    tuple_index<5> const _6 = tuple_index<5>();
+
+#if PHOENIX_LIMIT > 6
+    tuple_index<6> const _7 = tuple_index<6>();
+    tuple_index<7> const _8 = tuple_index<7>();
+    tuple_index<8> const _9 = tuple_index<8>();
+
+#if PHOENIX_LIMIT > 9
+    tuple_index<9> const _10 = tuple_index<9>();
+    tuple_index<10> const _11 = tuple_index<10>();
+    tuple_index<11> const _12 = tuple_index<11>();
+
+#if PHOENIX_LIMIT > 12
+    tuple_index<12> const _13 = tuple_index<12>();
+    tuple_index<13> const _14 = tuple_index<13>();
+    tuple_index<14> const _15 = tuple_index<14>();
+
+#endif
+#endif
+#endif
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple_common class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DerivedT>
+struct tuple_base {
+
+    typedef nil_t   a_type;
+    typedef nil_t   b_type;
+    typedef nil_t   c_type;
+
+#if PHOENIX_LIMIT > 3
+    typedef nil_t   d_type;
+    typedef nil_t   e_type;
+    typedef nil_t   f_type;
+
+#if PHOENIX_LIMIT > 6
+    typedef nil_t   g_type;
+    typedef nil_t   h_type;
+    typedef nil_t   i_type;
+
+#if PHOENIX_LIMIT > 9
+    typedef nil_t   j_type;
+    typedef nil_t   k_type;
+    typedef nil_t   l_type;
+
+#if PHOENIX_LIMIT > 12
+    typedef nil_t   m_type;
+    typedef nil_t   n_type;
+    typedef nil_t   o_type;
+
+#endif
+#endif
+#endif
+#endif
+
+    template <int N>
+    typename tuple_element<N, DerivedT>::crtype
+    operator[](tuple_index<N>) const
+    {
+        return tuple_element<N, DerivedT>
+            ::get(*static_cast<DerivedT const*>(this));
+    }
+
+    template <int N>
+    typename tuple_element<N, DerivedT>::rtype
+    operator[](tuple_index<N>)
+    {
+        return tuple_element<N, DerivedT>
+            ::get(*static_cast<DerivedT*>(this));
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <0 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <>
+struct tuple<>
+:   public tuple_base<tuple<> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 0);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <1 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A>
+struct tuple<A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 1);
+    typedef A a_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_
+    ):  a(a_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <2 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B>
+struct tuple<A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 2);
+    typedef A a_type; typedef B b_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_
+    ):  a(a_), b(b_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <3 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C>
+struct tuple<A, B, C,
+#if PHOENIX_LIMIT > 3
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 3);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_
+    ):  a(a_), b(b_), c(c_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c;
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <4 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C, typename D>
+struct tuple<A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 4);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_
+    ):  a(a_), b(b_), c(c_), d(d_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <5 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C, typename D, typename E>
+struct tuple<A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 5);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <6 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F>
+struct tuple<A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 6);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f;
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <7 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G>
+struct tuple<A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 7);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <8 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H>
+struct tuple<A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G, H> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 8);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <9 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I>
+struct tuple<A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+    nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G, H, I> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 9);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i;
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <10 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J>
+struct tuple<A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 10);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <11 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 11);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+    typedef K k_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_,
+        typename call_traits<K>::param_type k_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+        k(init[tuple_index<10>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+    K k;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <12 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+    nil_t, nil_t, nil_t,
+#endif
+    nil_t   //  Unused
+>
+:   public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K, L> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 12);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+    typedef K k_type; typedef L l_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_,
+        typename call_traits<K>::param_type k_,
+        typename call_traits<L>::param_type l_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+        k(init[tuple_index<10>()]), l(init[tuple_index<11>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+    K k; L l;
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <13 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t>
+:   public tuple_base<
+        tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 13);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+    typedef K k_type; typedef L l_type;
+    typedef M m_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_,
+        typename call_traits<K>::param_type k_,
+        typename call_traits<L>::param_type l_,
+        typename call_traits<M>::param_type m_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+        k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+        m(init[tuple_index<12>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+    K k; L l; M m;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <14 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t>
+:   public tuple_base<
+        tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 14);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+    typedef K k_type; typedef L l_type;
+    typedef M m_type; typedef N n_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_,
+        typename call_traits<K>::param_type k_,
+        typename call_traits<L>::param_type l_,
+        typename call_traits<M>::param_type m_,
+        typename call_traits<N>::param_type n_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_), n(n_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+        k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+        m(init[tuple_index<12>()]), n(init[tuple_index<13>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+    K k; L l; M m; N n;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tuple <15 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename A, typename B, typename C, typename D, typename E,
+    typename F, typename G, typename H, typename I, typename J,
+    typename K, typename L, typename M, typename N, typename O>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t>
+:   public tuple_base<
+        tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> > {
+
+    BOOST_STATIC_CONSTANT(int, length = 15);
+    typedef A a_type; typedef B b_type;
+    typedef C c_type; typedef D d_type;
+    typedef E e_type; typedef F f_type;
+    typedef G g_type; typedef H h_type;
+    typedef I i_type; typedef J j_type;
+    typedef K k_type; typedef L l_type;
+    typedef M m_type; typedef N n_type;
+    typedef O o_type;
+
+    tuple() {}
+
+    tuple(
+        typename call_traits<A>::param_type a_,
+        typename call_traits<B>::param_type b_,
+        typename call_traits<C>::param_type c_,
+        typename call_traits<D>::param_type d_,
+        typename call_traits<E>::param_type e_,
+        typename call_traits<F>::param_type f_,
+        typename call_traits<G>::param_type g_,
+        typename call_traits<H>::param_type h_,
+        typename call_traits<I>::param_type i_,
+        typename call_traits<J>::param_type j_,
+        typename call_traits<K>::param_type k_,
+        typename call_traits<L>::param_type l_,
+        typename call_traits<M>::param_type m_,
+        typename call_traits<N>::param_type n_,
+        typename call_traits<O>::param_type o_
+    ):  a(a_), b(b_), c(c_), d(d_), e(e_),
+        f(f_), g(g_), h(h_), i(i_), j(j_),
+        k(k_), l(l_), m(m_), n(n_), o(o_) {}
+
+    template <typename TupleT>
+    tuple(TupleT const& init)
+    :   a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+        c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+        e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+        g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+        i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+        k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+        m(init[tuple_index<12>()]), n(init[tuple_index<13>()]),
+        o(init[tuple_index<14>()])
+    { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+    A a; B b; C c; D d; E e;
+    F f; G g; H h; I i; J j;
+    K k; L l; M m; N n; O o;
+};
+
+#endif
+#endif
+#endif
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}   //  namespace phoenix
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols.hpp
new file mode 100644 (file)
index 0000000..d65d70b
--- /dev/null
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
+#define BOOST_SPIRIT_SYMBOLS_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Symbols
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/home/classic/symbols/symbols.hpp>
+
+#endif // !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/symbols.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/symbols.ipp
new file mode 100644 (file)
index 0000000..561341a
--- /dev/null
@@ -0,0 +1,118 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SYMBOLS_IPP
+#define BOOST_SPIRIT_SYMBOLS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/symbols/impl/tst.ipp>
+#include <boost/detail/workaround.hpp>
+
+// MSVC: void warning about the use of 'this' pointer in constructors
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable : 4355)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  symbols class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>::symbols()
+: SetT()
+, add(*this)
+{
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+symbols<T, CharT, SetT>::symbols(symbols const& other)
+: SetT(other)
+// Tru64 CXX seems to be confused by the explicit call of the default
+// constructor and generates wrong code which invalidates the just contructed
+// first base class in the line above.
+#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))
+, parser<symbols<T, CharT, SetT> >()
+#endif
+, add(*this)
+{
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>::~symbols()
+{}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>&
+symbols<T, CharT, SetT>::operator=(symbols const& other)
+{
+    SetT::operator=(other);
+    return *this;
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbol_inserter<T, SetT> const&
+symbols<T, CharT, SetT>::operator=(CharT const* str)
+{
+    return add, str;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Symbol table utilities
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline T*
+find(symbols<T, CharT, SetT> const& table, CharT const* sym)
+{
+    CharT const* last = sym;
+    while (*last)
+        last++;
+    scanner<CharT const *> scan(sym, last);
+    T* result = table.find(scan);
+    return scan.at_end()? result: 0;
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline T*
+add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data)
+{
+    CharT const* first = sym;
+    CharT const* last = sym;
+    while (*last)
+        last++;
+    scanner<CharT const *> scan(first, last);
+    if (table.find(scan) && scan.at_end())
+        return 0;               // symbol already contained in symbol table
+    table.add(sym, last, data);
+    first = sym;
+    return table.find(scan);    // refind the inserted symbol
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/tst.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/impl/tst.ipp
new file mode 100644 (file)
index 0000000..1a4a0c1
--- /dev/null
@@ -0,0 +1,281 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TST_IPP
+#define BOOST_SPIRIT_TST_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <memory> // for std::auto_ptr
+#include <boost/spirit/home/classic/core/assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl
+    {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tst class
+//
+//      Ternary Search Tree implementation. The data structure is faster than
+//      hashing for many typical search problems especially when the search
+//      interface is iterator based. Searching for a string of length k in a
+//      ternary search tree with n strings will require at most O(log n+k)
+//      character comparisons. TSTs are many times faster than hash tables
+//      for unsuccessful searches since mismatches are discovered earlier
+//      after examining only a few characters. Hash tables always examine an
+//      entire key when searching.
+//
+//      For details see http://www.cs.princeton.edu/~rs/strings/.
+//
+//      *** This is a low level class and is
+//          not meant for public consumption ***
+//
+///////////////////////////////////////////////////////////////////////////////
+    template <typename T, typename CharT>
+    struct tst_node
+    {
+        tst_node(CharT value_)
+        : value(value_)
+        , left(0)
+        , right(0)
+        { middle.link = 0; }
+
+        ~tst_node()
+        {
+            delete left;
+            delete right;
+            if (value)
+                delete middle.link;
+            else
+                delete middle.data;
+        }
+
+        tst_node*
+        clone() const
+        {
+            std::auto_ptr<tst_node> copy(new tst_node(value));
+
+            if (left)
+                copy->left = left->clone();
+            if (right)
+                copy->right = right->clone();
+
+            if (value && middle.link)
+            {
+                copy->middle.link = middle.link->clone();
+            }
+            else
+            {
+                std::auto_ptr<T> mid_data(new T(*middle.data));
+                copy->middle.data = mid_data.release();
+            }
+
+            return copy.release();
+        }
+
+        union center {
+
+            tst_node*   link;
+            T*          data;
+        };
+
+        CharT       value;
+        tst_node*   left;
+        center      middle;
+        tst_node*   right;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename CharT>
+    class tst
+    {
+    public:
+
+        struct search_info
+        {
+            T*          data;
+            std::size_t length;
+        };
+
+        tst()
+        : root(0) {}
+
+        tst(tst const& other)
+        : root(other.root ? other.root->clone() : 0) {}
+
+        ~tst()
+        { delete root; }
+
+        tst&
+        operator=(tst const& other)
+        {
+            if (this != &other)
+            {
+                node_t* new_root = other.root ? other.root->clone() : 0;
+                delete root;
+                root = new_root;
+            }
+            return *this;
+        }
+
+        template <typename IteratorT>
+        T* add(IteratorT first, IteratorT const& last, T const& data)
+        {
+            if (first == last)
+                return 0;
+
+            node_t**  np = &root;
+            CharT   ch = *first;
+
+            BOOST_SPIRIT_ASSERT((first == last || ch != 0)
+                && "Won't add string containing null character");
+
+            for (;;)
+            {
+                if (*np == 0 || ch == 0)
+                {
+                    node_t* right = 0;
+                    if (np != 0)
+                        right = *np;
+                    *np = new node_t(ch);
+                    if (right)
+                        (**np).right = right;
+                }
+
+                if (ch < (**np).value)
+                {
+                    np = &(**np).left;
+                }
+                else
+                {
+                    if (ch == (**np).value)
+                    {
+                        if (ch == 0)
+                        {
+                            if ((**np).middle.data == 0)
+                            {
+                                (**np).middle.data = new T(data);
+                                return (**np).middle.data;
+                            }
+                            else
+                            {
+                                //  re-addition is disallowed
+                                return 0;
+                            }
+                       }
+                        ++first;
+                        ch = (first == last) ? CharT(0) : *first;
+                        BOOST_SPIRIT_ASSERT((first == last || ch != 0)
+                            && "Won't add string containing null character");
+                        np = &(**np).middle.link;
+                    }
+                    else
+                    {
+                        np = &(**np).right;
+                    }
+                }
+            }
+        }
+
+        template <typename ScannerT>
+        search_info find(ScannerT const& scan) const
+        {
+            search_info result = { 0, 0 };
+            if (scan.at_end()) {
+                return result;
+            }
+
+            typedef typename ScannerT::iterator_t iterator_t;
+            node_t*     np = root;
+            CharT       ch = *scan;
+            iterator_t  save = scan.first;
+            iterator_t  latest = scan.first;
+            std::size_t latest_len = 0;
+
+            while (np)
+            {
+
+                if (ch < np->value) // => go left!
+                {
+                    if (np->value == 0)
+                    {
+                        result.data = np->middle.data;
+                        if (result.data)
+                        {
+                            latest = scan.first;
+                            latest_len = result.length;
+                        }
+                    }
+
+                    np = np->left;
+                }
+                else if (ch == np->value) // => go middle!
+                {
+                    // Matching the null character is not allowed.
+                    if (np->value == 0)
+                    {
+                        result.data = np->middle.data;
+                        if (result.data)
+                        {
+                            latest = scan.first;
+                            latest_len = result.length;
+                        }
+                        break;
+                    }
+
+                    ++scan;
+                    ch = scan.at_end() ? CharT(0) : *scan;
+                    np = np->middle.link;
+                    ++result.length;
+                }
+                else // (ch > np->value) => go right!
+                {
+                    if (np->value == 0)
+                    {
+                        result.data = np->middle.data;
+                        if (result.data)
+                        {
+                            latest = scan.first;
+                            latest_len = result.length;
+                        }
+                    }
+
+                    np = np->right;
+                }
+            }
+
+            if (result.data == 0)
+            {
+                scan.first = save;
+            }
+            else
+            {
+                scan.first = latest;
+                result.length = latest_len;
+            }
+            return result;
+        }
+
+    private:
+
+        typedef tst_node<T, CharT> node_t;
+        node_t* root;
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+    } // namespace impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols.hpp
new file mode 100644 (file)
index 0000000..8605585
--- /dev/null
@@ -0,0 +1,229 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SYMBOLS_HPP
+#define BOOST_SPIRIT_SYMBOLS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <string>
+
+#include <boost/ref.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+
+#include <boost/spirit/home/classic/symbols/symbols_fwd.hpp>
+
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  symbols class
+//
+//      This class implements a symbol table. The symbol table holds a
+//      dictionary of symbols where each symbol is a sequence of CharTs.
+//      The template class can work efficiently with 8, 16 and 32 bit
+//      characters. Mutable data of type T is associated with each
+//      symbol.
+//
+//      The class is a parser. The parse member function returns
+//      additional information in the symbol_match class (see below).
+//      The additional data is a pointer to some data associated with
+//      the matching symbol.
+//
+//      The actual set implementation is supplied by the SetT template
+//      parameter. By default, this uses the tst class (see tst.ipp).
+//
+//      Symbols are added into the symbol table statically using the
+//      construct:
+//
+//          sym = a, b, c, d ...;
+//
+//      where sym is a symbol table and a..d are strings. Example:
+//
+//          sym = "pineapple", "orange", "banana", "apple";
+//
+//      Alternatively, symbols may be added dynamically through the
+//      member functor 'add' (see symbol_inserter below). The member
+//      functor 'add' may be attached to a parser as a semantic action
+//      taking in a begin/end pair:
+//
+//          p[sym.add]
+//
+//      where p is a parser (and sym is a symbol table). On success,
+//      the matching portion of the input is added to the symbol table.
+//
+//      'add' may also be used to directly initialize data. Examples:
+//
+//          sym.add("hello", 1)("crazy", 2)("world", 3);
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+class symbols
+:   private SetT
+,   public parser<symbols<T, CharT, SetT> >
+{
+public:
+
+    typedef parser<symbols<T, CharT, SetT> > parser_base_t;
+    typedef symbols<T, CharT, SetT> self_t;
+    typedef self_t const& embed_t;
+    typedef T symbol_data_t;
+    typedef boost::reference_wrapper<T> symbol_ref_t;
+
+    symbols();
+    symbols(symbols const& other);
+    ~symbols();
+
+    symbols&
+    operator=(symbols const& other);
+
+    symbol_inserter<T, SetT> const&
+    operator=(CharT const* str);
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, symbol_ref_t>::type type;
+    };
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse_main(ScannerT const& scan) const
+    {
+        typedef typename ScannerT::iterator_t iterator_t;
+        iterator_t first = scan.first;
+        typename SetT::search_info result = SetT::find(scan);
+
+        if (result.data)
+            return scan.
+                create_match(
+                    result.length,
+                    symbol_ref_t(*result.data),
+                    first,
+                    scan.first);
+        else
+            return scan.no_match();
+    }
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename parser_result<self_t, ScannerT>::type result_t;
+        return impl::implicit_lexeme_parse<result_t>
+            (*this, scan, scan);
+    }
+
+    template < typename ScannerT >
+    T* find(ScannerT const& scan) const
+    { return SetT::find(scan).data; }
+
+    symbol_inserter<T, SetT> const add;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Symbol table utilities
+//
+//  add
+//
+//      adds a symbol 'sym' (string) to a symbol table 'table' plus an
+//      optional data 'data' associated with the symbol. Returns a pointer to
+//      the data associated with the symbol or NULL if add failed (e.g. when
+//      the symbol is already added before).
+//
+//  find
+//
+//      finds a symbol 'sym' (string) from a symbol table 'table'. Returns a
+//      pointer to the data associated with the symbol or NULL if not found
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+T*  add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data = T());
+
+template <typename T, typename CharT, typename SetT>
+T*  find(symbols<T, CharT, SetT> const& table, CharT const* sym);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  symbol_inserter class
+//
+//      The symbols class holds an instance of this class named 'add'.
+//      This can be called directly just like a member function,
+//      passing in a first/last iterator and optional data:
+//
+//          sym.add(first, last, data);
+//
+//      Or, passing in a C string and optional data:
+//
+//          sym.add(c_string, data);
+//
+//      where sym is a symbol table. The 'data' argument is optional.
+//      This may also be used as a semantic action since it conforms
+//      to the action interface (see action.hpp):
+//
+//          p[sym.add]
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename SetT>
+class symbol_inserter
+{
+public:
+
+    symbol_inserter(SetT& set_)
+    : set(set_) {}
+
+    typedef symbol_inserter const & result_type;
+
+    template <typename IteratorT>
+    symbol_inserter const&
+    operator()(IteratorT first, IteratorT const& last, T const& data = T()) const
+    {
+        set.add(first, last, data);
+        return *this;
+    }
+
+    template <typename CharT>
+    symbol_inserter const&
+    operator()(CharT const* str, T const& data = T()) const
+    {
+        CharT const* last = str;
+        while (*last)
+            last++;
+        set.add(str, last, data);
+        return *this;
+    }
+
+    template <typename CharT>
+    symbol_inserter const&
+    operator,(CharT const* str) const
+    {
+        CharT const* last = str;
+        while (*last)
+            last++;
+        set.add(str, last, T());
+        return *this;
+    }
+
+private:
+
+    SetT& set;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include <boost/spirit/home/classic/symbols/impl/symbols.ipp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/symbols_fwd.hpp
new file mode 100644 (file)
index 0000000..402c319
--- /dev/null
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_FWD_HPP)
+#define BOOST_SPIRIT_SYMBOLS_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl
+    {
+        template <typename CharT, typename T>
+        class tst;
+    }
+
+    template
+    <
+        typename T = int,
+        typename CharT = char,
+        typename SetT = impl::tst<T, CharT>
+    >
+    class symbols;
+
+    template <typename T, typename SetT>
+    class symbol_inserter;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/symbols/typeof.hpp
new file mode 100644 (file)
index 0000000..c163110
--- /dev/null
@@ -0,0 +1,25 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP)
+#define BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/symbols/symbols_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::symbols,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::symbol_inserter,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::impl::tst,2)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::symbols,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::symbols,1)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast.hpp
new file mode 100644 (file)
index 0000000..0aa59f6
--- /dev/null
@@ -0,0 +1,387 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_AST_HPP
+#define BOOST_SPIRIT_TREE_AST_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/tree/common.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+
+#include <boost/spirit/home/classic/tree/ast_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+//////////////////////////////////
+//  ast_match_policy is simply an id so the correct specialization of
+//  tree_policy can be found.
+template <
+    typename IteratorT,
+    typename NodeFactoryT,
+    typename T
+>
+struct ast_match_policy :
+    public common_tree_match_policy<
+        ast_match_policy<IteratorT, NodeFactoryT, T>,
+        IteratorT,
+        NodeFactoryT,
+        ast_tree_policy<
+            ast_match_policy<IteratorT, NodeFactoryT, T>,
+            NodeFactoryT,
+            T
+        >,
+        T
+    >
+{
+    typedef
+        common_tree_match_policy<
+            ast_match_policy<IteratorT, NodeFactoryT, T>,
+            IteratorT,
+            NodeFactoryT,
+            ast_tree_policy<
+                ast_match_policy<IteratorT, NodeFactoryT, T>,
+                NodeFactoryT,
+                T
+            >,
+            T
+        >
+    common_tree_match_policy_;
+    
+    ast_match_policy()
+    {
+    }
+
+    template <typename PolicyT>
+    ast_match_policy(PolicyT const & policies)
+        : common_tree_match_policy_(policies)
+    {
+    }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT, typename T>
+struct ast_tree_policy :
+    public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
+{
+    typedef typename MatchPolicyT::match_t match_t;
+    typedef typename MatchPolicyT::iterator_t iterator_t;
+
+    template<typename MatchAT, typename MatchBT>
+    static void concat(MatchAT& a, MatchBT const& b)
+    {
+        BOOST_SPIRIT_ASSERT(a && b);
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+        BOOST_SPIRIT_DEBUG_OUT << "\n>>>AST concat. a = " << a <<
+            "\n\tb = " << b << "<<<\n";
+#endif
+        typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
+            container_t;
+
+        // test for size() is nessecary, because no_tree_gen_node leaves a.trees
+        // and/or b.trees empty
+        if (0 != b.trees.size() && b.trees.begin()->value.is_root())
+        {
+            BOOST_SPIRIT_ASSERT(b.trees.size() == 1);
+
+            container_t tmp;
+            std::swap(a.trees, tmp); // save a into tmp
+            std::swap(b.trees, a.trees); // make b.trees[0] be new root (a.trees[0])
+            container_t* pnon_root_trees = &a.trees;
+            while (pnon_root_trees->size() > 0 &&
+                    pnon_root_trees->begin()->value.is_root())
+            {
+                pnon_root_trees = & pnon_root_trees->begin()->children;
+            }
+            pnon_root_trees->insert(pnon_root_trees->begin(),
+                    tmp.begin(), tmp.end());
+        }
+        else if (0 != a.trees.size() && a.trees.begin()->value.is_root())
+        {
+            BOOST_SPIRIT_ASSERT(a.trees.size() == 1);
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+            a.trees.begin()->children.reserve(a.trees.begin()->children.size() + b.trees.size());
+#endif
+            std::copy(b.trees.begin(),
+                 b.trees.end(),
+                 std::back_insert_iterator<container_t>(
+                     a.trees.begin()->children));
+        }
+        else
+        {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+            a.trees.reserve(a.trees.size() + b.trees.size());
+#endif
+            std::copy(b.trees.begin(),
+                 b.trees.end(),
+                 std::back_insert_iterator<container_t>(a.trees));
+        }
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+        BOOST_SPIRIT_DEBUG_OUT << ">>>after AST concat. a = " << a << "<<<\n\n";
+#endif
+
+        return;
+    }
+
+    template <typename MatchT, typename Iterator1T, typename Iterator2T>
+    static void group_match(MatchT& m, parser_id const& id,
+            Iterator1T const& first, Iterator2T const& last)
+    {
+        if (!m)
+            return;
+
+        typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
+            container_t;
+        typedef typename container_t::iterator cont_iterator_t;
+        typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+
+        if (m.trees.size() == 1
+#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
+            && !(id.to_long() && m.trees.begin()->value.id().to_long())
+#endif
+            )
+        {
+            // set rule_id's.  There may have been multiple nodes created.
+            // Because of root_node[] they may be left-most children of the top
+            // node.
+            container_t* punset_id = &m.trees;
+            while (punset_id->size() > 0 &&
+                    punset_id->begin()->value.id() == 0)
+            {
+                punset_id->begin()->value.id(id);
+                punset_id = &punset_id->begin()->children;
+            }
+
+            m.trees.begin()->value.is_root(false);
+        }
+        else
+        {
+            match_t newmatch(m.length(),
+                m.trees.empty() ? 
+                    factory_t::empty_node() : 
+                    factory_t::create_node(first, last, false));
+
+            std::swap(newmatch.trees.begin()->children, m.trees);
+            // set this node and all it's unset children's rule_id
+            newmatch.trees.begin()->value.id(id);
+            for (cont_iterator_t i = newmatch.trees.begin();
+                 i != newmatch.trees.end();
+                 ++i)
+            {
+                if (i->value.id() == 0)
+                    i->value.id(id);
+            }
+            m = newmatch;
+        }
+    }
+
+    template <typename FunctorT, typename MatchT>
+    static void apply_op_to_match(FunctorT const& op, MatchT& m)
+    {
+        op(m);
+    }
+};
+
+namespace impl {
+
+    template <typename IteratorT, typename NodeFactoryT, typename T>
+    struct tree_policy_selector<ast_match_policy<IteratorT, NodeFactoryT, T> >
+    {
+        typedef ast_tree_policy<
+            ast_match_policy<IteratorT, NodeFactoryT, T>, 
+            NodeFactoryT, 
+            T
+        > type;
+    };
+
+} // namespace impl
+
+
+//////////////////////////////////
+struct gen_ast_node_parser_gen;
+
+template <typename T>
+struct gen_ast_node_parser
+:   public unary<T, parser<gen_ast_node_parser<T> > >
+{
+    typedef gen_ast_node_parser<T> self_t;
+    typedef gen_ast_node_parser_gen parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    gen_ast_node_parser(T const& a)
+    : unary<T, parser<gen_ast_node_parser<T> > >(a) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+        typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
+        typedef typename ScannerT::match_policy_t::factory_t factory_t;
+        typedef ast_match_policy<iterator_t, factory_t> match_policy_t;
+        typedef typename ScannerT::action_policy_t action_policy_t;
+        typedef scanner_policies<
+            iteration_policy_t,
+            match_policy_t,
+            action_policy_t
+        > policies_t;
+
+        return this->subject().parse(scan.change_policies(policies_t(scan)));
+    }
+};
+
+//////////////////////////////////
+struct gen_ast_node_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef gen_ast_node_parser<T> type;
+    };
+
+    template <typename T>
+    static gen_ast_node_parser<T>
+    generate(parser<T> const& s)
+    {
+        return gen_ast_node_parser<T>(s.derived());
+    }
+
+    template <typename T>
+    gen_ast_node_parser<T>
+    operator[](parser<T> const& s) const
+    {
+        return gen_ast_node_parser<T>(s.derived());
+    }
+};
+
+//////////////////////////////////
+const gen_ast_node_parser_gen gen_ast_node_d = gen_ast_node_parser_gen();
+
+
+//////////////////////////////////
+struct root_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        BOOST_SPIRIT_ASSERT(m.trees.size() > 0);
+        m.trees.begin()->value.is_root(true);
+    }
+};
+
+const node_parser_gen<root_node_op> root_node_d =
+    node_parser_gen<root_node_op>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Parse functions for ASTs
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename AstFactoryT, typename IteratorT, typename ParserT, 
+    typename SkipT
+>
+inline tree_parse_info<IteratorT, AstFactoryT>
+ast_parse(
+    IteratorT const&        first_,
+    IteratorT const&        last_,
+    parser<ParserT> const&  parser,
+    SkipT const&            skip_,
+    AstFactoryT const &   /*dummy_*/ = AstFactoryT())
+{
+    typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+    typedef ast_match_policy<IteratorT, AstFactoryT> ast_match_policy_t;
+    typedef
+        scanner_policies<iter_policy_t, ast_match_policy_t>
+        scanner_policies_t;
+    typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+    iter_policy_t iter_policy(skip_);
+    scanner_policies_t policies(iter_policy);
+    IteratorT first = first_;
+    scanner_t scan(first, last_, policies);
+    tree_match<IteratorT, AstFactoryT> hit = parser.derived().parse(scan);
+    return tree_parse_info<IteratorT, AstFactoryT>(
+        first, hit, hit && (first == last_), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename ParserT, typename SkipT>
+inline tree_parse_info<IteratorT>
+ast_parse(
+    IteratorT const&        first_,
+    IteratorT const&        last_,
+    parser<ParserT> const&  parser,
+    SkipT const&            skip_)
+{
+    typedef node_val_data_factory<nil_t> default_factory_t;
+    return ast_parse(first_, last_, parser, skip_, default_factory_t());
+}
+  
+//////////////////////////////////
+template <typename IteratorT, typename ParserT>
+inline tree_parse_info<IteratorT>
+ast_parse(
+    IteratorT const&        first_,
+    IteratorT const&        last,
+    parser<ParserT> const&  parser)
+{
+    typedef ast_match_policy<IteratorT> ast_match_policy_t;
+    IteratorT first = first_;
+    scanner<
+        IteratorT,
+        scanner_policies<iteration_policy, ast_match_policy_t>
+    > scan(first, last);
+    tree_match<IteratorT> hit = parser.derived().parse(scan);
+    return tree_parse_info<IteratorT>(
+        first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT, typename SkipT>
+inline tree_parse_info<CharT const*>
+ast_parse(
+    CharT const*            str,
+    parser<ParserT> const&  parser,
+    SkipT const&            skip)
+{
+    CharT const* last = str;
+    while (*last)
+        last++;
+    return ast_parse(str, last, parser, skip);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline tree_parse_info<CharT const*>
+ast_parse(
+    CharT const*            str,
+    parser<ParserT> const&  parser)
+{
+    CharT const* last = str;
+    while (*last)
+    {
+        last++;
+    }
+    return ast_parse(str, last, parser);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/ast_fwd.hpp
new file mode 100644 (file)
index 0000000..71ef91b
--- /dev/null
@@ -0,0 +1,42 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_AST_FWD_HPP)
+#define BOOST_SPIRIT_TREE_AST_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <
+        typename MatchPolicyT, 
+        typename NodeFactoryT, 
+        typename T = nil_t
+    >
+    struct ast_tree_policy;
+
+    template <
+        typename IteratorT,
+        typename NodeFactoryT = node_val_data_factory<nil_t>,
+        typename T = nil_t
+    >
+    struct ast_match_policy;
+
+    template <typename T>
+    struct gen_ast_node_parser;
+
+    struct root_node_op;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common.hpp
new file mode 100644 (file)
index 0000000..c086ff4
--- /dev/null
@@ -0,0 +1,1585 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    Revised 2007, Copyright (c) Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_COMMON_HPP
+#define BOOST_SPIRIT_TREE_COMMON_HPP
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+#include <vector>
+#else
+#include <list>
+#endif
+
+#if defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+#include <boost/pool/pool_alloc.hpp>
+#endif
+
+#include <algorithm>
+
+#include <boost/ref.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/assert.hpp>
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+#include <iostream>
+#include <boost/spirit/home/classic/debug/debug_node.hpp>
+#endif
+
+#include <boost/spirit/home/classic/tree/common_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+template <typename T>
+void swap(tree_node<T>& a, tree_node<T>& b);
+
+template <typename T, typename V>
+void swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b);
+
+namespace impl {
+    template <typename T>
+    inline void cp_swap(T& t1, T& t2);
+}
+
+template <typename T>
+struct tree_node
+{
+    typedef T parse_node_t;
+    
+#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+    typedef std::allocator<tree_node<T> > allocator_type;
+#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+    typedef boost::pool_allocator<tree_node<T> > allocator_type;
+#else
+    typedef boost::fast_pool_allocator<tree_node<T> > allocator_type;
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+    typedef std::vector<tree_node<T>, allocator_type> children_t;
+#else
+    typedef std::list<tree_node<T>, allocator_type> children_t;
+#endif  // BOOST_SPIRIT_USE_LIST_FOR_TREES
+
+    typedef typename children_t::iterator tree_iterator;
+    typedef typename children_t::const_iterator const_tree_iterator;
+
+    T value;
+    children_t children;
+
+    tree_node()
+        : value()
+        , children()
+    {}
+
+    explicit tree_node(T const& v)
+        : value(v)
+        , children()
+    {}
+
+    tree_node(T const& v, children_t const& c)
+        : value(v)
+        , children(c)
+    {}
+
+    void swap(tree_node<T>& x)
+    {
+        impl::cp_swap(value, x.value);
+        impl::cp_swap(children, x.children);
+    }
+
+// Intel V5.0.1 has a problem without this explicit operator=
+    tree_node &operator= (tree_node const &rhs)
+    {
+        tree_node(rhs).swap(*this);
+        return *this;
+    }
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename T>
+inline std::ostream&
+operator<<(std::ostream& o, tree_node<T> const& n)
+{
+    static int depth = 0;
+    o << "\n";
+    for (int i = 0; i <= depth; ++i)
+    {
+        o << "\t";
+    }
+    o << "(depth = " << depth++ << " value = " << n.value;
+    int c = 0;
+    for (typename tree_node<T>::children_t::const_iterator it = n.children.begin();
+         it != n.children.end(); ++it)
+    {
+        o << " children[" << c++ << "] = " << *it;
+    }
+    o << ")";
+    --depth;
+    return o;
+}
+#endif
+
+//////////////////////////////////
+template <typename IteratorT, typename ValueT>
+struct node_iter_data
+{
+    typedef IteratorT iterator_t;
+    typedef IteratorT /*const*/ const_iterator_t;
+
+    node_iter_data()
+        : first(), last(), is_root_(false), parser_id_(), value_()
+        {}
+
+    node_iter_data(IteratorT const& _first, IteratorT const& _last)
+        : first(_first), last(_last), is_root_(false), parser_id_(), value_()
+        {}
+
+    void swap(node_iter_data& x)
+    {
+        impl::cp_swap(first, x.first);
+        impl::cp_swap(last, x.last);
+        impl::cp_swap(parser_id_, x.parser_id_);
+        impl::cp_swap(is_root_, x.is_root_);
+        impl::cp_swap(value_, x.value_);
+    }
+
+    IteratorT begin()
+    {
+        return first;
+    }
+
+    IteratorT const& begin() const
+    {
+        return first;
+    }
+
+    IteratorT end()
+    {
+        return last;
+    }
+
+    IteratorT const& end() const
+    {
+        return last;
+    }
+
+    bool is_root() const
+    {
+        return is_root_;
+    }
+
+    void is_root(bool b)
+    {
+        is_root_ = b;
+    }
+
+    parser_id id() const
+    {
+        return parser_id_;
+    }
+
+    void id(parser_id r)
+    {
+        parser_id_ = r;
+    }
+
+    ValueT const& value() const
+    {
+        return value_;
+    }
+
+    void value(ValueT const& v)
+    {
+        value_ = v;
+    }
+private:
+    IteratorT first, last;
+    bool is_root_;
+    parser_id parser_id_;
+    ValueT value_;
+
+public:
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+// value is default nil_t, so provide an operator<< for nil_t
+inline std::ostream&
+operator<<(std::ostream& o, nil_t const&)
+{
+    return o;
+}
+
+template <typename IteratorT, typename ValueT>
+inline std::ostream&
+operator<<(std::ostream& o, node_iter_data<IteratorT, ValueT> const& n)
+{
+    o << "(id = " << n.id() << " text = \"";
+    typedef typename node_iter_data<IteratorT, ValueT>::const_iterator_t
+        iterator_t;
+    for (iterator_t it = n.begin(); it != n.end(); ++it)
+        impl::token_printer(o, *it);
+    o << "\" is_root = " << n.is_root()
+        << /*" value = " << n.value() << */")";
+    return o;
+}
+#endif
+
+//////////////////////////////////
+template <typename IteratorT = char const*, typename ValueT = nil_t>
+struct node_val_data
+{
+    typedef
+        typename boost::detail::iterator_traits<IteratorT>::value_type
+        value_type;
+
+#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+    typedef std::allocator<value_type> allocator_type;
+#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+    typedef boost::pool_allocator<value_type> allocator_type;
+#else
+    typedef boost::fast_pool_allocator<value_type> allocator_type;
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+    typedef std::vector<value_type, allocator_type> container_t;
+#else
+    typedef std::list<value_type, allocator_type> container_t;
+#endif
+
+    typedef typename container_t::iterator iterator_t;
+    typedef typename container_t::const_iterator const_iterator_t;
+
+    node_val_data()
+        : text(), is_root_(false), parser_id_(), value_()
+        {}
+
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+    node_val_data(IteratorT const& _first, IteratorT const& _last)
+        : text(), is_root_(false), parser_id_(), value_()
+        {
+            std::copy(_first, _last, std::inserter(text, text.end()));
+        }
+
+    // This constructor is for building text out of iterators
+    template <typename IteratorT2>
+    node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
+        : text(), is_root_(false), parser_id_(), value_()
+        {
+            std::copy(_first, _last, std::inserter(text, text.end()));
+        }
+#else
+    node_val_data(IteratorT const& _first, IteratorT const& _last)
+        : text(_first, _last), is_root_(false), parser_id_(), value_()
+        {}
+
+    // This constructor is for building text out of iterators
+    template <typename IteratorT2>
+    node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
+        : text(_first, _last), is_root_(false), parser_id_(), value_()
+        {}
+#endif
+
+    void swap(node_val_data& x)
+    {
+        impl::cp_swap(text, x.text);
+        impl::cp_swap(is_root_, x.is_root_);
+        impl::cp_swap(parser_id_, x.parser_id_);
+        impl::cp_swap(value_, x.value_);
+    }
+
+    typename container_t::iterator begin()
+    {
+        return text.begin();
+    }
+
+    typename container_t::const_iterator begin() const
+    {
+        return text.begin();
+    }
+
+    typename container_t::iterator end()
+    {
+        return text.end();
+    }
+
+    typename container_t::const_iterator end() const
+    {
+        return text.end();
+    }
+
+    bool is_root() const
+    {
+        return is_root_;
+    }
+
+    void is_root(bool b)
+    {
+        is_root_ = b;
+    }
+
+    parser_id id() const
+    {
+        return parser_id_;
+    }
+
+    void id(parser_id r)
+    {
+        parser_id_ = r;
+    }
+
+    ValueT const& value() const
+    {
+        return value_;
+    }
+
+    void value(ValueT const& v)
+    {
+        value_ = v;
+    }
+
+private:
+    container_t text;
+    bool is_root_;
+    parser_id parser_id_;
+    ValueT value_;
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename IteratorT, typename ValueT>
+inline std::ostream&
+operator<<(std::ostream& o, node_val_data<IteratorT, ValueT> const& n)
+{
+    o << "(id = " << n.id() << " text = \"";
+    typedef typename node_val_data<IteratorT, ValueT>::const_iterator_t
+        iterator_t;
+    for (iterator_t it = n.begin(); it != n.end(); ++it)
+        impl::token_printer(o, *it);
+    o << "\" is_root = " << n.is_root()
+        << " value = " << n.value() << ")";
+    return o;
+}
+#endif
+
+template <typename T>
+inline void
+swap(tree_node<T>& a, tree_node<T>& b)
+{
+    a.swap(b);
+}
+
+template <typename T, typename V>
+inline void
+swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b)
+{
+    a.swap(b);
+}
+
+//////////////////////////////////
+template <typename ValueT>
+class node_iter_data_factory
+{
+public:
+    // This inner class is so that node_iter_data_factory can simulate
+    // a template template parameter
+    template <typename IteratorT>
+    class factory
+    {
+    public:
+        typedef IteratorT iterator_t;
+        typedef node_iter_data<iterator_t, ValueT> node_t;
+
+        static node_t create_node(iterator_t const& first, iterator_t const& last,
+                bool /*is_leaf_node*/)
+        {
+            return node_t(first, last);
+        }
+
+        static node_t empty_node()
+        {
+            return node_t();
+        }
+
+        // precondition: ContainerT contains a tree_node<node_t>.  And all
+        // iterators in the container point to the same sequence.
+        template <typename ContainerT>
+        static node_t group_nodes(ContainerT const& nodes)
+        {
+            return node_t(nodes.begin()->value.begin(),
+                    nodes.back().value.end());
+        }
+    };
+};
+
+//////////////////////////////////
+template <typename ValueT>
+class node_val_data_factory 
+{
+public:
+    // This inner class is so that node_val_data_factory can simulate
+    // a template template parameter
+    template <typename IteratorT>
+    class factory
+    {
+    public:
+        typedef IteratorT iterator_t;
+        typedef node_val_data<iterator_t, ValueT> node_t;
+
+        static node_t create_node(iterator_t const& first, iterator_t const& last,
+                bool is_leaf_node)
+        {
+            if (is_leaf_node)
+                return node_t(first, last);
+            else
+                return node_t();
+        }
+
+        static node_t empty_node()
+        {
+            return node_t();
+        }
+
+        template <typename ContainerT>
+        static node_t group_nodes(ContainerT const& nodes)
+        {
+            typename node_t::container_t c;
+            typename ContainerT::const_iterator i_end = nodes.end();
+            // copy all the nodes text into a new one
+            for (typename ContainerT::const_iterator i = nodes.begin();
+                 i != i_end; ++i)
+            {
+                // See docs: reduced_node_d cannot be used with a
+                // rule inside the [].
+                BOOST_ASSERT(i->children.size() == 0);
+                c.insert(c.end(), i->value.begin(), i->value.end());
+            }
+            return node_t(c.begin(), c.end());
+        }
+    };
+};
+
+//////////////////////////////////
+template <typename ValueT>
+class node_all_val_data_factory
+{
+public:
+    // This inner class is so that node_all_val_data_factory can simulate
+    // a template template parameter
+    template <typename IteratorT>
+    class factory
+    {
+    public:
+        typedef IteratorT iterator_t;
+        typedef node_val_data<iterator_t, ValueT> node_t;
+
+        static node_t create_node(iterator_t const& first, iterator_t const& last,
+                bool /*is_leaf_node*/)
+        {
+            return node_t(first, last);
+        }
+
+        static node_t empty_node()
+        {
+            return node_t();
+        }
+
+        template <typename ContainerT>
+        static node_t group_nodes(ContainerT const& nodes)
+        {
+            typename node_t::container_t c;
+            typename ContainerT::const_iterator i_end = nodes.end();
+            // copy all the nodes text into a new one
+            for (typename ContainerT::const_iterator i = nodes.begin();
+                    i != i_end; ++i)
+            {
+                BOOST_ASSERT(i->children.size() == 0);
+                c.insert(c.end(), i->value.begin(), i->value.end());
+            }
+            return node_t(c.begin(), c.end());
+        }
+    };
+};
+
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    // can't call unqualified swap from within classname::swap
+    // as Koenig lookup rules will find only the classname::swap
+    // member function not the global declaration, so use cp_swap
+    // as a forwarding function (JM):
+    template <typename T>
+    inline void cp_swap(T& t1, T& t2)
+    {
+        using std::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+        using boost::swap;
+        swap(t1, t2);
+    }
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename NodeFactoryT, typename T>
+class tree_match : public match<T>
+{
+public:
+
+    typedef typename NodeFactoryT::template factory<IteratorT> node_factory_t;
+    typedef typename node_factory_t::node_t parse_node_t;
+    typedef tree_node<parse_node_t> node_t;
+    typedef typename node_t::children_t container_t;
+    typedef typename container_t::iterator tree_iterator;
+    typedef typename container_t::const_iterator const_tree_iterator;
+
+    typedef T attr_t;
+    typedef typename boost::call_traits<T>::param_type      param_type;
+    typedef typename boost::call_traits<T>::reference       reference;
+    typedef typename boost::call_traits<T>::const_reference const_reference;
+
+    tree_match()
+    : match<T>(), trees()
+    {}
+
+    explicit
+    tree_match(std::size_t length_)
+    : match<T>(length_), trees()
+    {}
+
+    tree_match(std::size_t length_, parse_node_t const& n)
+    : match<T>(length_), trees()
+    { 
+        trees.push_back(node_t(n)); 
+    }
+
+    tree_match(std::size_t length_, param_type val, parse_node_t const& n)
+    : match<T>(length_, val), trees()
+    {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+        trees.reserve(10); // this is more or less an arbitrary number...
+#endif
+        trees.push_back(node_t(n));
+    }
+
+    // attention, these constructors will change the second parameter!
+    tree_match(std::size_t length_, container_t& c)
+    : match<T>(length_), trees()
+    { 
+        impl::cp_swap(trees, c);
+    }
+
+    tree_match(std::size_t length_, param_type val, container_t& c)
+    : match<T>(length_, val), trees()
+    {
+        impl::cp_swap(trees, c);
+    }
+
+    template <typename T2>
+    tree_match(match<T2> const& other)
+    : match<T>(other), trees()
+    {}
+
+    template <typename T2, typename T3, typename T4>
+    tree_match(tree_match<T2, T3, T4> const& other)
+    : match<T>(other), trees()
+    { impl::cp_swap(trees, other.trees); }
+
+    template <typename T2>
+    tree_match&
+    operator=(match<T2> const& other)
+    {
+        match<T>::operator=(other);
+        return *this;
+    }
+
+    template <typename T2, typename T3, typename T4>
+    tree_match&
+    operator=(tree_match<T2, T3, T4> const& other)
+    {
+        match<T>::operator=(other);
+        impl::cp_swap(trees, other.trees);
+        return *this;
+    }
+
+    tree_match(tree_match const& x)
+    : match<T>(x), trees()
+    {
+        // use auto_ptr like ownership for the trees data member
+        impl::cp_swap(trees, x.trees);
+    }
+
+    tree_match& operator=(tree_match const& x)
+    {
+        tree_match tmp(x);
+        this->swap(tmp);
+        return *this;
+    }
+
+    void swap(tree_match& x)
+    {
+        match<T>::swap(x);
+        impl::cp_swap(trees, x.trees);
+    }
+
+    mutable container_t trees;
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename IteratorT, typename NodeFactoryT, typename T>
+inline std::ostream&
+operator<<(std::ostream& o, tree_match<IteratorT, NodeFactoryT, T> const& m)
+{
+    typedef
+        typename tree_match<IteratorT, NodeFactoryT, T>::container_t::iterator
+        iterator;
+
+    o << "(length = " << (int)m.length();
+    int c = 0;
+    for (iterator i = m.trees.begin(); i != m.trees.end(); ++i)
+    {
+        o << " trees[" << c++ << "] = " << *i;
+    }
+    o << "\n)";
+    return o;
+}
+#endif
+
+//////////////////////////////////
+struct tree_policy
+{
+    template <typename FunctorT, typename MatchT>
+    static void apply_op_to_match(FunctorT const& /*op*/, MatchT& /*m*/)
+    {}
+
+    template <typename MatchT, typename Iterator1T, typename Iterator2T>
+    static void group_match(MatchT& /*m*/, parser_id const& /*id*/,
+            Iterator1T const& /*first*/, Iterator2T const& /*last*/)
+    {}
+
+    template <typename MatchT>
+    static void concat(MatchT& /*a*/, MatchT const& /*b*/)
+    {}
+};
+
+//////////////////////////////////
+template <
+    typename MatchPolicyT,
+    typename IteratorT,
+    typename NodeFactoryT,
+    typename TreePolicyT, 
+    typename T
+>
+struct common_tree_match_policy : public match_policy
+{
+    common_tree_match_policy()
+    {
+    }
+
+    template <typename PolicyT>
+    common_tree_match_policy(PolicyT const & policies)
+        : match_policy((match_policy const &)policies)
+    {
+    }
+
+    template <typename U>
+    struct result { typedef tree_match<IteratorT, NodeFactoryT, U> type; };
+
+    typedef tree_match<IteratorT, NodeFactoryT, T> match_t;
+    typedef IteratorT iterator_t;
+    typedef TreePolicyT tree_policy_t;
+    typedef NodeFactoryT factory_t;
+
+    static const match_t no_match() { return match_t(); }
+    static const match_t empty_match()
+    { return match_t(0, tree_policy_t::empty_node()); }
+
+    template <typename AttrT, typename Iterator1T, typename Iterator2T>
+    static tree_match<IteratorT, NodeFactoryT, AttrT> create_match(
+        std::size_t length,
+        AttrT const& val,
+        Iterator1T const& first,
+        Iterator2T const& last)
+    {
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+
+        BOOST_SPIRIT_DEBUG_OUT << "\n>>> create_node(begin) <<<\n" 
+            "creating node text: \"";
+        for (Iterator1T it = first; it != last; ++it)
+            impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
+        BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+        BOOST_SPIRIT_DEBUG_OUT << ">>> create_node(end) <<<\n\n"; 
+#endif
+        return tree_match<IteratorT, NodeFactoryT, AttrT>(length, val,
+            tree_policy_t::create_node(length, first, last, true));
+    }
+
+    template <typename Match1T, typename Match2T>
+    static void concat_match(Match1T& a, Match2T const& b)
+    {
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+
+        BOOST_SPIRIT_DEBUG_OUT << "\n>>> concat_match(begin) <<<\n";
+        BOOST_SPIRIT_DEBUG_OUT << "tree a:\n" << a << "\n";
+        BOOST_SPIRIT_DEBUG_OUT << "tree b:\n" << b << "\n";
+        BOOST_SPIRIT_DEBUG_OUT << ">>> concat_match(end) <<<\n\n";
+#endif
+        BOOST_SPIRIT_ASSERT(a && b);
+        if (a.length() == 0)
+        {
+            a = b;
+            return;
+        }
+        else if (b.length() == 0
+#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
+            && !b.trees.begin()->value.id().to_long()
+#endif
+            )
+        {
+            return;
+        }
+        a.concat(b);
+        tree_policy_t::concat(a, b);
+    }
+
+    template <typename MatchT, typename IteratorT2>
+    void
+    group_match(
+        MatchT&             m,
+        parser_id const&    id,
+        IteratorT2 const&   first,
+        IteratorT2 const&   last) const
+    {
+        if (!m) return;
+        
+#if defined(BOOST_SPIRIT_DEBUG) && \
+    (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_TREES)
+
+        BOOST_SPIRIT_DEBUG_OUT << "\n>>> group_match(begin) <<<\n"
+            "new node(" << id << ") \"";
+        for (IteratorT2 it = first; it != last; ++it)
+            impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
+        BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+        BOOST_SPIRIT_DEBUG_OUT << "new child tree (before grouping):\n" << m << "\n";
+
+        tree_policy_t::group_match(m, id, first, last);
+
+        BOOST_SPIRIT_DEBUG_OUT << "new child tree (after grouping):\n" << m << "\n";
+        BOOST_SPIRIT_DEBUG_OUT << ">>> group_match(end) <<<\n\n";
+#else
+        tree_policy_t::group_match(m, id, first, last);
+#endif
+    }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT>
+struct common_tree_tree_policy
+{
+    typedef typename MatchPolicyT::iterator_t iterator_t;
+    typedef typename MatchPolicyT::match_t match_t;
+    typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+    typedef typename factory_t::node_t node_t;
+
+    template <typename Iterator1T, typename Iterator2T>
+        static node_t
+        create_node(std::size_t /*length*/, Iterator1T const& first,
+            Iterator2T const& last, bool leaf_node)
+    {
+        return factory_t::create_node(first, last, leaf_node);
+    }
+
+    static node_t
+        empty_node()
+    {
+        return factory_t::empty_node();
+    }
+
+    template <typename FunctorT>
+        static void apply_op_to_match(FunctorT const& op, match_t& m)
+    {
+        op(m);
+    }
+};
+
+//////////////////////////////////
+// directives to modify how the parse tree is generated
+
+struct no_tree_gen_node_parser_gen;
+
+template <typename T>
+struct no_tree_gen_node_parser
+:   public unary<T, parser<no_tree_gen_node_parser<T> > >
+{
+    typedef no_tree_gen_node_parser<T> self_t;
+    typedef no_tree_gen_node_parser_gen parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    no_tree_gen_node_parser(T const& a)
+    : unary<T, parser<no_tree_gen_node_parser<T> > >(a) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const
+    {
+        typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+        typedef match_policy match_policy_t;
+        typedef typename ScannerT::action_policy_t action_policy_t;
+        typedef scanner_policies<
+            iteration_policy_t,
+            match_policy_t,
+            action_policy_t
+        > policies_t;
+
+        return this->subject().parse(scanner.change_policies(policies_t(scanner)));
+    }
+};
+
+struct no_tree_gen_node_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef no_tree_gen_node_parser<T> type;
+    };
+
+    template <typename T>
+    static no_tree_gen_node_parser<T>
+    generate(parser<T> const& s)
+    {
+        return no_tree_gen_node_parser<T>(s.derived());
+    }
+
+    template <typename T>
+    no_tree_gen_node_parser<T>
+    operator[](parser<T> const& s) const
+    {
+        return no_tree_gen_node_parser<T>(s.derived());
+    }
+};
+
+const no_tree_gen_node_parser_gen no_node_d = no_tree_gen_node_parser_gen();
+
+//////////////////////////////////
+
+struct leaf_node_parser_gen;
+
+template<typename T>
+struct leaf_node_parser
+:   public unary<T, parser<leaf_node_parser<T> > >
+{
+    typedef leaf_node_parser<T> self_t;
+    typedef leaf_node_parser_gen parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    leaf_node_parser(T const& a)
+    : unary<T, parser<leaf_node_parser<T> > >(a) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const
+    {
+        typedef scanner_policies< typename ScannerT::iteration_policy_t,
+            match_policy, typename ScannerT::action_policy_t > policies_t;
+
+        typedef typename ScannerT::iterator_t iterator_t;
+        typedef typename parser_result<self_t, ScannerT>::type result_t;
+        typedef typename result_t::node_factory_t factory_t;
+
+        iterator_t from = scanner.first;
+        result_t hit = impl::contiguous_parser_parse<result_t>(this->subject(),
+            scanner.change_policies(policies_t(scanner,match_policy(),scanner)),
+            scanner);
+
+        if (hit)
+            return result_t(hit.length(), 
+                factory_t::create_node(from, scanner.first, true));
+        else
+            return result_t(hit.length());
+    }
+};
+
+struct leaf_node_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef leaf_node_parser<T> type;
+    };
+
+    template <typename T>
+    static leaf_node_parser<T>
+    generate(parser<T> const& s)
+    {
+        return leaf_node_parser<T>(s.derived());
+    }
+
+    template <typename T>
+    leaf_node_parser<T>
+    operator[](parser<T> const& s) const
+    {
+        return leaf_node_parser<T>(s.derived());
+    }
+};
+
+const leaf_node_parser_gen leaf_node_d = leaf_node_parser_gen();
+const leaf_node_parser_gen token_node_d = leaf_node_parser_gen();
+
+//////////////////////////////////
+namespace impl {
+
+    template <typename MatchPolicyT>
+    struct tree_policy_selector
+    {
+        typedef tree_policy type;
+    };
+
+} // namespace impl
+
+//////////////////////////////////
+template <typename NodeParserT>
+struct node_parser_gen;
+
+template <typename T, typename NodeParserT>
+struct node_parser
+:   public unary<T, parser<node_parser<T, NodeParserT> > >
+{
+    typedef node_parser<T, NodeParserT> self_t;
+    typedef node_parser_gen<NodeParserT> parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    node_parser(T const& a)
+    : unary<T, parser<node_parser<T, NodeParserT> > >(a) {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<T, ScannerT>::type type;
+    };
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const
+    {
+        typename parser_result<self_t, ScannerT>::type hit = this->subject().parse(scanner);
+        if (hit)
+        {
+            impl::tree_policy_selector<typename ScannerT::match_policy_t>::type::apply_op_to_match(NodeParserT(), hit);
+        }
+        return hit;
+    }
+};
+
+template <typename NodeParserT>
+struct node_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef node_parser<T, NodeParserT> type;
+    };
+
+    template <typename T>
+    static node_parser<T, NodeParserT>
+    generate(parser<T> const& s)
+    {
+        return node_parser<T, NodeParserT>(s.derived());
+    }
+
+    template <typename T>
+    node_parser<T, NodeParserT>
+    operator[](parser<T> const& s) const
+    {
+        return node_parser<T, NodeParserT>(s.derived());
+    }
+};
+//////////////////////////////////
+struct reduced_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        if (m.trees.size() == 1)
+        {
+            m.trees.begin()->children.clear();
+        }
+        else if (m.trees.size() > 1)
+        {
+            typedef typename MatchT::node_factory_t node_factory_t;
+            m = MatchT(m.length(), node_factory_t::group_nodes(m.trees));
+        }
+    }
+};
+
+const node_parser_gen<reduced_node_op> reduced_node_d =
+    node_parser_gen<reduced_node_op>();
+
+
+struct discard_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        m.trees.clear();
+    }
+};
+
+const node_parser_gen<discard_node_op> discard_node_d =
+    node_parser_gen<discard_node_op>();
+
+struct infix_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        typedef typename MatchT::container_t container_t;
+        typedef typename MatchT::container_t::iterator iter_t;
+        typedef typename MatchT::container_t::value_type value_t;
+
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // copying the tree nodes is expensive, since it may copy a whole
+        // tree.  swapping them is cheap, so swap the nodes we want into
+        // a new container of children.
+        container_t new_children;
+        std::size_t length = 0;
+        std::size_t tree_size = m.trees.size();
+
+        // the infix_node_d[] make no sense for nodes with no subnodes
+        BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+        bool keep = true;
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+        new_children.reserve((tree_size+1)/2);
+#endif
+        iter_t i_end = m.trees.end();
+        for (iter_t i = m.trees.begin(); i != i_end; ++i)
+        {
+            if (keep) {
+                // adjust the length
+                length += std::distance((*i).value.begin(), (*i).value.end());
+
+                // move the child node
+                new_children.push_back(value_t());
+                swap(new_children.back(), *i);
+                keep = false;
+            }
+            else {
+                // ignore this child node
+                keep = true;
+            }
+        }
+
+        m = MatchT(length, new_children);
+    }
+};
+
+const node_parser_gen<infix_node_op> infix_node_d =
+    node_parser_gen<infix_node_op>();
+
+struct discard_first_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        typedef typename MatchT::container_t container_t;
+        typedef typename MatchT::container_t::iterator iter_t;
+        typedef typename MatchT::container_t::value_type value_t;
+
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // copying the tree nodes is expensive, since it may copy a whole
+        // tree.  swapping them is cheap, so swap the nodes we want into
+        // a new container of children, instead of saying
+        // m.trees.erase(m.trees.begin()) because, on a container_t that will 
+        // cause all the nodes afterwards to be copied into the previous 
+        // position.
+        container_t new_children;
+        std::size_t length = 0;
+        std::size_t tree_size = m.trees.size();
+
+        // the discard_first_node_d[] make no sense for nodes with no subnodes
+        BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+        if (tree_size > 1) {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+            new_children.reserve(tree_size - 1);
+#endif
+            iter_t i = m.trees.begin(), i_end = m.trees.end();
+            for (++i; i != i_end; ++i)
+            {
+                // adjust the length
+                length += std::distance((*i).value.begin(), (*i).value.end());
+
+                // move the child node
+                new_children.push_back(value_t());
+                swap(new_children.back(), *i);
+            }
+        }
+        else {
+        // if there was a tree and now there isn't any, insert an empty node
+            iter_t i = m.trees.begin(); 
+
+        // This isn't entirely correct, since the empty node will reference
+        // the end of the discarded node, but I currently don't see any way to 
+        // get at the begin of the node following this subnode.
+        // This should be safe anyway because the it shouldn't get dereferenced
+        // under any circumstances.
+            typedef typename value_t::parse_node_t::iterator_t iterator_type;
+            iterator_type it = (*i).value.end();
+            
+            new_children.push_back(
+                value_t(typename value_t::parse_node_t(it, it)));
+        }
+        
+        m = MatchT(length, new_children);
+    }
+};
+
+const node_parser_gen<discard_first_node_op> discard_first_node_d =
+    node_parser_gen<discard_first_node_op>();
+
+struct discard_last_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        typedef typename MatchT::container_t container_t;
+        typedef typename MatchT::container_t::iterator iter_t;
+        typedef typename MatchT::container_t::value_type value_t;
+
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // copying the tree nodes is expensive, since it may copy a whole
+        // tree.  swapping them is cheap, so swap the nodes we want into
+        // a new container of children, instead of saying
+        // m.trees.erase(m.trees.begin()) because, on a container_t that will 
+        // cause all the nodes afterwards to be copied into the previous 
+        // position.
+        container_t new_children;
+        std::size_t length = 0;
+        std::size_t tree_size = m.trees.size();
+
+        // the discard_last_node_d[] make no sense for nodes with no subnodes
+        BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+        if (tree_size > 1) {
+            m.trees.pop_back();
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+            new_children.reserve(tree_size - 1);
+#endif            
+            iter_t i_end = m.trees.end();
+            for (iter_t i = m.trees.begin(); i != i_end; ++i)
+            {
+                // adjust the length
+                length += std::distance((*i).value.begin(), (*i).value.end());
+
+                // move the child node
+                new_children.push_back(value_t());
+                swap(new_children.back(), *i);
+            }
+        }
+        else {
+        // if there was a tree and now there isn't any, insert an empty node
+            iter_t i = m.trees.begin(); 
+
+            typedef typename value_t::parse_node_t::iterator_t iterator_type;
+            iterator_type it = (*i).value.begin();
+            
+            new_children.push_back(
+                value_t(typename value_t::parse_node_t(it, it)));
+        }
+        
+        m = MatchT(length, new_children);
+    }
+};
+
+const node_parser_gen<discard_last_node_op> discard_last_node_d =
+    node_parser_gen<discard_last_node_op>();
+
+struct inner_node_op
+{
+    template <typename MatchT>
+    void operator()(MatchT& m) const
+    {
+        typedef typename MatchT::container_t container_t;
+        typedef typename MatchT::container_t::iterator iter_t;
+        typedef typename MatchT::container_t::value_type value_t;
+
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // copying the tree nodes is expensive, since it may copy a whole
+        // tree.  swapping them is cheap, so swap the nodes we want into
+        // a new container of children, instead of saying
+        // m.trees.erase(m.trees.begin()) because, on a container_t that will 
+        // cause all the nodes afterwards to be copied into the previous 
+        // position.
+        container_t new_children;
+        std::size_t length = 0;
+        std::size_t tree_size = m.trees.size();
+        
+        // the inner_node_d[] make no sense for nodes with less then 2 subnodes
+        BOOST_SPIRIT_ASSERT(tree_size >= 2);
+
+        if (tree_size > 2) {
+            m.trees.pop_back(); // erase the last element
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+            new_children.reserve(tree_size - 1);
+#endif
+            iter_t i = m.trees.begin(); // skip over the first element
+            iter_t i_end = m.trees.end();
+            for (++i; i != i_end; ++i)
+            {
+                // adjust the length
+                length += std::distance((*i).value.begin(), (*i).value.end());
+                
+                // move the child node
+                new_children.push_back(value_t());
+                swap(new_children.back(), *i);
+            }
+        }
+        else {
+        // if there was a tree and now there isn't any, insert an empty node
+            iter_t i = m.trees.begin(); // skip over the first element
+
+            typedef typename value_t::parse_node_t::iterator_t iterator_type;
+            iterator_type it = (*++i).value.begin();
+            
+            new_children.push_back(
+                value_t(typename value_t::parse_node_t(it, it)));
+        }
+        
+        m = MatchT(length, new_children);
+    }
+};
+
+const node_parser_gen<inner_node_op> inner_node_d =
+    node_parser_gen<inner_node_op>();
+
+
+//////////////////////////////////
+// action_directive_parser and action_directive_parser_gen
+// are meant to be used as a template to create directives that
+// generate action classes.  For example access_match and
+// access_node.  The ActionParserT template parameter must be
+// a class that has an innter class called action that is templated
+// on the parser type and the action type.
+template <typename ActionParserT>
+struct action_directive_parser_gen;
+
+template <typename T, typename ActionParserT>
+struct action_directive_parser
+:   public unary<T, parser<action_directive_parser<T, ActionParserT> > >
+{
+    typedef action_directive_parser<T, ActionParserT> self_t;
+    typedef action_directive_parser_gen<ActionParserT> parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    action_directive_parser(T const& a)
+        : unary<T, parser<action_directive_parser<T, ActionParserT> > >(a) {}
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<T, ScannerT>::type type;
+    };
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const
+    {
+        return this->subject().parse(scanner);
+    }
+
+    template <typename ActionT>
+    typename ActionParserT::template action<action_directive_parser<T, ActionParserT>, ActionT>
+    operator[](ActionT const& actor) const
+    {
+        typedef typename
+            ActionParserT::template action<action_directive_parser, ActionT>
+            action_t;
+        return action_t(*this, actor);
+    }
+};
+
+//////////////////////////////////
+template <typename ActionParserT>
+struct action_directive_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef action_directive_parser<T, ActionParserT> type;
+    };
+
+    template <typename T>
+    static action_directive_parser<T, ActionParserT>
+    generate(parser<T> const& s)
+    {
+        return action_directive_parser<T, ActionParserT>(s.derived());
+    }
+
+    template <typename T>
+    action_directive_parser<T, ActionParserT>
+    operator[](parser<T> const& s) const
+    {
+        return action_directive_parser<T, ActionParserT>(s.derived());
+    }
+};
+
+//////////////////////////////////
+// Calls the attached action passing it the match from the parser
+// and the first and last iterators.
+// The inner template class is used to simulate template-template parameters
+// (declared in common_fwd.hpp).
+template <typename ParserT, typename ActionT>
+struct access_match_action::action
+:   public unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >
+{
+    typedef action_parser_category parser_category;
+    typedef action<ParserT, ActionT> self_t;
+    
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<ParserT, ScannerT>::type type;
+    };
+
+    action( ParserT const& subject,
+            ActionT const& actor_);
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const;
+
+    ActionT const &predicate() const;
+
+    private:
+    ActionT actor;
+};
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+access_match_action::action<ParserT, ActionT>::action(
+    ParserT const& subject,
+    ActionT const& actor_)
+: unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >(subject)
+, actor(actor_)
+{}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+template <typename ScannerT>
+typename parser_result<access_match_action::action<ParserT, ActionT>, ScannerT>::type
+access_match_action::action<ParserT, ActionT>::
+parse(ScannerT const& scan) const
+{
+    typedef typename ScannerT::iterator_t iterator_t;
+    typedef typename parser_result<self_t, ScannerT>::type result_t;
+    if (!scan.at_end())
+    {
+        iterator_t save = scan.first;
+        result_t hit = this->subject().parse(scan);
+        actor(hit, save, scan.first);
+        return hit;
+    }
+    return scan.no_match();
+}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+ActionT const &access_match_action::action<ParserT, ActionT>::predicate() const
+{
+    return actor;
+}
+
+//////////////////////////////////
+const action_directive_parser_gen<access_match_action> access_match_d
+    = action_directive_parser_gen<access_match_action>();
+
+
+
+//////////////////////////////////
+// Calls the attached action passing it the node from the parser
+// and the first and last iterators
+// The inner template class is used to simulate template-template parameters
+// (declared in common_fwd.hpp).
+template <typename ParserT, typename ActionT>
+struct access_node_action::action
+:   public unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >
+{
+    typedef action_parser_category parser_category;
+    typedef action<ParserT, ActionT> self_t;
+    
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename parser_result<ParserT, ScannerT>::type type;
+    };
+
+    action( ParserT const& subject,
+            ActionT const& actor_);
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scanner) const;
+
+    ActionT const &predicate() const;
+
+    private:
+    ActionT actor;
+};
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+access_node_action::action<ParserT, ActionT>::action(
+    ParserT const& subject,
+    ActionT const& actor_)
+: unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >(subject)
+, actor(actor_)
+{}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+template <typename ScannerT>
+typename parser_result<access_node_action::action<ParserT, ActionT>, ScannerT>::type
+access_node_action::action<ParserT, ActionT>::
+parse(ScannerT const& scan) const
+{
+    typedef typename ScannerT::iterator_t iterator_t;
+    typedef typename parser_result<self_t, ScannerT>::type result_t;
+    if (!scan.at_end())
+    {
+        iterator_t save = scan.first;
+        result_t hit = this->subject().parse(scan);
+        if (hit && hit.trees.size() > 0)
+            actor(*hit.trees.begin(), save, scan.first);
+        return hit;
+    }
+    return scan.no_match();
+}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+ActionT const &access_node_action::action<ParserT, ActionT>::predicate() const
+{
+    return actor;
+}
+
+//////////////////////////////////
+const action_directive_parser_gen<access_node_action> access_node_d
+    = action_directive_parser_gen<access_node_action>();
+
+
+
+//////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  tree_parse_info
+//
+//      Results returned by the tree parse functions:
+//
+//      stop:   points to the final parse position (i.e parsing
+//              processed the input up to this point).
+//
+//      match:  true if parsing is successful. This may be full:
+//              the parser consumed all the input, or partial:
+//              the parser consumed only a portion of the input.
+//
+//      full:   true when we have a full match (i.e the parser
+//              consumed all the input.
+//
+//      length: The number of characters consumed by the parser.
+//              This is valid only if we have a successful match
+//              (either partial or full). A negative value means
+//              that the match is unsucessful.
+//
+//     trees:   Contains the root node(s) of the tree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename IteratorT,
+    typename NodeFactoryT,
+    typename T
+>
+struct tree_parse_info 
+{
+    IteratorT   stop;
+    bool        match;
+    bool        full;
+    std::size_t length;
+    typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees;
+
+    tree_parse_info()
+        : stop()
+        , match(false)
+        , full(false)
+        , length(0)
+        , trees()
+    {}
+
+    template <typename IteratorT2>
+    tree_parse_info(tree_parse_info<IteratorT2> const& pi)
+        : stop(pi.stop)
+        , match(pi.match)
+        , full(pi.full)
+        , length(pi.length)
+        , trees()
+    {
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // use auto_ptr like ownership for the trees data member
+        swap(trees, pi.trees);
+    }
+
+    tree_parse_info(
+        IteratorT   stop_,
+        bool        match_,
+        bool        full_,
+        std::size_t length_,
+        typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees_)
+    :   stop(stop_)
+        , match(match_)
+        , full(full_)
+        , length(length_)
+        , trees()
+    {
+        using std::swap;
+        using boost::swap;
+        using BOOST_SPIRIT_CLASSIC_NS::swap;
+
+        // use auto_ptr like ownership for the trees data member
+        swap(trees, trees_);
+    }
+};
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/common_fwd.hpp
new file mode 100644 (file)
index 0000000..1388e53
--- /dev/null
@@ -0,0 +1,96 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_COMMON_FWD_HPP)
+#define BOOST_SPIRIT_TREE_COMMON_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <typename T>
+    struct tree_node;
+
+    template <typename IteratorT = char const*, typename ValueT = nil_t>
+    struct node_iter_data;
+
+    template <typename ValueT = nil_t>
+    class node_iter_data_factory;
+
+    template <typename ValueT = nil_t>
+    class node_val_data_factory;
+
+    template <typename ValueT = nil_t>
+    class node_all_val_data_factory;
+
+    template <
+        typename IteratorT,
+        typename NodeFactoryT = node_val_data_factory<nil_t>,
+        typename T = nil_t
+    >
+    class tree_match;
+
+    struct tree_policy;
+
+    template <
+        typename MatchPolicyT,
+        typename IteratorT,
+        typename NodeFactoryT,
+        typename TreePolicyT, 
+        typename T = nil_t
+    >
+    struct common_tree_match_policy;
+
+    template <typename MatchPolicyT, typename NodeFactoryT>
+    struct common_tree_tree_policy;
+
+    template <typename T>
+    struct no_tree_gen_node_parser;
+
+    template <typename T>
+    struct leaf_node_parser;
+
+    template <typename T, typename NodeParserT>
+    struct node_parser;
+
+    struct discard_node_op;
+    struct reduced_node_op;
+    struct infix_node_op;
+    struct discard_first_node_op;
+    struct discard_last_node_op;
+    struct inner_node_op;
+
+    template <typename T, typename ActionParserT>
+    struct action_directive_parser;
+
+    struct access_match_action
+    {
+        template <typename ParserT, typename ActionT>
+        struct action;
+    };
+
+    struct access_node_action
+    {
+        template <typename ParserT, typename ActionT>
+        struct action;
+    };
+
+    template <
+        typename IteratorT = char const *,
+        typename NodeFactoryT = node_val_data_factory<nil_t>,
+        typename T = nil_t
+    >
+    struct tree_parse_info;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp
new file mode 100644 (file)
index 0000000..0272520
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(PARSE_TREE_UTILS_IPP)
+#define PARSE_TREE_UTILS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Returnes the first leaf node of the given parsetree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+inline tree_node<T> const &
+get_first_leaf (tree_node<T> const &node)
+{
+    if (node.children.size() > 0)
+        return get_first_leaf(*node.children.begin());
+    return node;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Find a specified node through recursive search.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+inline bool
+find_node (tree_node<T> const &node, parser_id node_to_search,
+    tree_node<T> const **found_node)
+{
+    if (node.value.id() == node_to_search) {
+        *found_node = &node;
+        return true;
+    }
+    if (node.children.size() > 0) {
+        typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+        const_tree_iterator end = node.children.end();
+        for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+        {
+            if (find_node (*it, node_to_search, found_node))
+                return true;
+        }
+    }
+    return false;   // not found here
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The functions 'get_node_range' return a pair of iterators pointing at the
+//  range, which containes the elements of a specified node.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+template <typename T>
+inline bool
+get_node_range (typename tree_node<T>::const_tree_iterator const &start,
+    parser_id node_to_search,
+    std::pair<typename tree_node<T>::const_tree_iterator,
+        typename tree_node<T>::const_tree_iterator> &nodes)
+{
+// look at this node first
+tree_node<T> const &node = *start;
+
+    if (node.value.id() == node_to_search) {
+        if (node.children.size() > 0) {
+        // full subrange
+            nodes.first = node.children.begin();
+            nodes.second = node.children.end();
+        }
+        else {
+        // only this node
+            nodes.first = start;
+            nodes.second = start;
+            std::advance(nodes.second, 1);
+        }
+        return true;
+    }
+
+// look at subnodes now
+    if (node.children.size() > 0) {
+        typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+        const_tree_iterator end = node.children.end();
+        for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+        {
+            if (impl::get_node_range<T>(it, node_to_search, nodes))
+                return true;
+        }
+    }
+    return false;
+}
+
+} // end of namespace impl
+
+template <typename T>
+inline bool
+get_node_range (tree_node<T> const &node, parser_id node_to_search,
+    std::pair<typename tree_node<T>::const_tree_iterator,
+        typename tree_node<T>::const_tree_iterator> &nodes)
+{
+    if (node.children.size() > 0) {
+        typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+        const_tree_iterator end = node.children.end();
+        for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+        {
+            if (impl::get_node_range<T>(it, node_to_search, nodes))
+                return true;
+        }
+    }
+    return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}   // namespace spirit
+}   // namespace boost
+
+#endif // !defined(PARSE_TREE_UTILS_IPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
new file mode 100644 (file)
index 0000000..36b7e10
--- /dev/null
@@ -0,0 +1,527 @@
+/*=============================================================================
+    Copyright (c) 2001-2008 Hartmut Kaiser
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TREE_TO_XML_IPP)
+#define TREE_TO_XML_IPP
+
+#include <cstdio>
+#include <cstdarg>
+#include <locale>
+#include <string>
+#include <cstring>
+
+#include <map>
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/scoped_array.hpp>
+
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_SPIRIT_OSSTREAM std::ostrstream
+inline
+std::string BOOST_SPIRIT_GETSTRING(std::ostrstream& ss)
+{
+    ss << std::ends;
+    std::string rval = ss.str();
+    ss.freeze(false);
+    return rval;
+}
+#else
+#include <sstream>
+#define BOOST_SPIRIT_GETSTRING(ss) ss.str()
+#define BOOST_SPIRIT_OSSTREAM std::basic_ostringstream<CharT>
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    struct string_lit;
+
+    template <>
+    struct string_lit<char>
+    {
+        static char get(char c) { return c; }
+        static std::string get(char const* str = "") { return str; }
+    };
+
+    template <>
+    struct string_lit<wchar_t>
+    {
+        static wchar_t get(char c)
+        {
+            typedef std::ctype<wchar_t> ctype_t;
+            return std::use_facet<ctype_t>(std::locale()).widen(c);
+        }
+        static std::basic_string<wchar_t> get(char const* source = "")
+        {
+            using namespace std;        // some systems have size_t in ns std
+            size_t len = strlen(source);
+            boost::scoped_array<wchar_t> result (new wchar_t[len+1]);
+            result.get()[len] = '\0';
+
+            // working with wide character streams is supported only if the
+            // platform provides the std::ctype<wchar_t> facet
+            BOOST_ASSERT(std::has_facet<std::ctype<wchar_t> >(std::locale()));
+
+            std::use_facet<std::ctype<wchar_t> >(std::locale())
+                .widen(source, source + len, result.get());
+            return result.get();
+        }
+    };
+}
+
+// xml formatting helper classes
+namespace xml {
+
+    template <typename CharT>
+    inline void
+    encode (std::basic_string<CharT> &str, char s, char const *r, int len)
+    {
+        typedef typename std::basic_string<CharT>::size_type size_type;
+
+        size_type pos = 0;
+        while ((pos = str.find_first_of (impl::string_lit<CharT>::get(s), pos)) !=
+                size_type(std::basic_string<CharT>::npos))
+        {
+            str.replace (pos, 1, impl::string_lit<CharT>::get(r));
+            pos += len;
+        }
+    }
+
+    template <typename CharT>
+    inline std::basic_string<CharT>
+    encode (std::basic_string<CharT> str)
+    {
+        encode(str, '&', "&amp;", 3);
+        encode(str, '<', "&lt;", 2);
+        encode(str, '>', "&gt;", 2);
+        encode(str, '\r', "\\r", 1);
+        encode(str, '\n', "\\n", 1);
+        return str;
+    }
+
+    template <typename CharT>
+    inline std::basic_string<CharT>
+    encode (CharT const *text)
+    {
+        return encode (std::basic_string<CharT>(text));
+    }
+
+    // format a xml attribute
+    template <typename CharT>
+    struct attribute
+    {
+        attribute()
+        {
+        }
+
+        attribute (std::basic_string<CharT> const& key_,
+                   std::basic_string<CharT> const& value_)
+          : key (key_), value(value_)
+        {
+        }
+
+        bool has_value()
+        {
+            return value.size() > 0;
+        }
+
+        std::basic_string<CharT> key;
+        std::basic_string<CharT> value;
+    };
+
+    template <typename CharT>
+    inline std::basic_ostream<CharT>&
+    operator<< (std::basic_ostream<CharT> &ostrm, attribute<CharT> const &attr)
+    {
+        if (0 == attr.key.size())
+            return ostrm;
+        ostrm << impl::string_lit<CharT>::get(" ") << encode(attr.key)
+              << impl::string_lit<CharT>::get("=\"") << encode(attr.value)
+              << impl::string_lit<CharT>::get("\"");
+        return ostrm;
+    }
+
+    // output a xml element (base class, not used directly)
+    template <typename CharT>
+    class element
+    {
+    protected:
+        element(std::basic_ostream<CharT> &ostrm_, bool incr_indent_ = true)
+        :   ostrm(ostrm_), incr_indent(incr_indent_)
+        {
+            if (incr_indent) ++get_indent();
+        }
+        ~element()
+        {
+            if (incr_indent) --get_indent();
+        }
+
+    public:
+        void output_space ()
+        {
+            for (int i = 0; i < get_indent(); i++)
+                ostrm << impl::string_lit<CharT>::get("    ");
+        }
+
+    protected:
+        int &get_indent()
+        {
+            static int indent;
+
+            return indent;
+        }
+
+        std::basic_ostream<CharT> &ostrm;
+        bool incr_indent;
+    };
+
+    // a xml node
+    template <typename CharT>
+    class node : public element<CharT>
+    {
+    public:
+        node (std::basic_ostream<CharT> &ostrm_,
+              std::basic_string<CharT> const& tag_, attribute<CharT> &attr)
+        :   element<CharT>(ostrm_), tag(tag_)
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("<") << tag_ << attr
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+        node (std::basic_ostream<CharT> &ostrm_,
+              std::basic_string<CharT> const& tag_)
+        :   element<CharT>(ostrm_), tag(tag_)
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("<") << tag_
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+        ~node()
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("</") << tag
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+
+    private:
+        std::basic_string<CharT> tag;
+    };
+
+    template <typename CharT>
+    class text : public element<CharT>
+    {
+    public:
+        text (std::basic_ostream<CharT> &ostrm_,
+              std::basic_string<CharT> const& tag,
+              std::basic_string<CharT> const& textlit)
+        :   element<CharT>(ostrm_)
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("<") << tag
+                  << impl::string_lit<CharT>::get(">") << encode(textlit)
+                  << impl::string_lit<CharT>::get("</") << tag
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+
+        text (std::basic_ostream<CharT> &ostrm_,
+              std::basic_string<CharT> const& tag,
+              std::basic_string<CharT> const& textlit,
+              attribute<CharT> &attr)
+        :   element<CharT>(ostrm_)
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("<") << tag << attr
+                  << impl::string_lit<CharT>::get(">") << encode(textlit)
+                  << impl::string_lit<CharT>::get("</") << tag
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+
+        text (std::basic_ostream<CharT> &ostrm_,
+              std::basic_string<CharT> const& tag,
+              std::basic_string<CharT> const& textlit,
+              attribute<CharT> &attr1, attribute<CharT> &attr2)
+        :   element<CharT>(ostrm_)
+        {
+            this->output_space();
+            this->ostrm
+                  << impl::string_lit<CharT>::get("<") << tag << attr1 << attr2
+                  << impl::string_lit<CharT>::get(">") << encode(textlit)
+                  << impl::string_lit<CharT>::get("</") << tag
+                  << impl::string_lit<CharT>::get(">\n");
+        }
+    };
+
+    // a xml comment
+    template <typename CharT>
+    class comment : public element<CharT>
+    {
+    public:
+        comment (std::basic_ostream<CharT> &ostrm_,
+                 std::basic_string<CharT> const& commentlit)
+        :   element<CharT>(ostrm_, false)
+        {
+            if ('\0' != commentlit[0])
+            {
+                this->output_space();
+                this->ostrm << impl::string_lit<CharT>::get("<!-- ")
+                      << encode(commentlit)
+                      << impl::string_lit<CharT>::get(" -->\n");
+            }
+        }
+    };
+
+    // a xml document
+    template <typename CharT>
+    class document : public element<CharT>
+    {
+    public:
+        document (std::basic_ostream<CharT> &ostrm_)
+        :   element<CharT>(ostrm_)
+        {
+            this->get_indent() = -1;
+            this->ostrm << impl::string_lit<CharT>::get(
+                "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
+        }
+
+        document (std::basic_ostream<CharT> &ostrm_,
+                  std::basic_string<CharT> const& mainnode,
+                  std::basic_string<CharT> const& dtd)
+        :   element<CharT>(ostrm_)
+        {
+            this->get_indent() = -1;
+            this->ostrm << impl::string_lit<CharT>::get(
+                "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
+
+            this->output_space();
+            this->ostrm << impl::string_lit<CharT>::get("<!DOCTYPE ") << mainnode
+                  << impl::string_lit<CharT>::get(" SYSTEM \"") << dtd
+                  << impl::string_lit<CharT>::get("\">\n");
+        }
+        ~document()
+        {
+            BOOST_SPIRIT_ASSERT(-1 == this->get_indent());
+        }
+    };
+
+} // end of namespace xml
+
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    // look up the rule name from the given parser_id
+    template <typename AssocContainerT>
+    inline typename AssocContainerT::value_type::second_type
+    get_rulename (AssocContainerT const &id_to_name_map,
+        BOOST_SPIRIT_CLASSIC_NS::parser_id const &id)
+    {
+        typename AssocContainerT::const_iterator it = id_to_name_map.find(id);
+        if (it != id_to_name_map.end())
+            return (*it).second;
+        typedef typename AssocContainerT::value_type::second_type second_t;
+        return second_t();
+    }
+
+    // dump a parse tree as xml
+    template <
+        typename CharT, typename IteratorT, typename GetIdT, typename GetValueT
+    >
+    inline void
+    token_to_xml (std::basic_ostream<CharT> &ostrm, IteratorT const &it,
+        bool is_root, GetIdT const &get_token_id, GetValueT const &get_token_value)
+    {
+        BOOST_SPIRIT_OSSTREAM stream;
+
+        stream << get_token_id(*it) << std::ends;
+        xml::attribute<CharT> token_id (
+                impl::string_lit<CharT>::get("id"),
+                BOOST_SPIRIT_GETSTRING(stream).c_str());
+        xml::attribute<CharT> is_root_attr (
+                impl::string_lit<CharT>::get("is_root"),
+                impl::string_lit<CharT>::get(is_root ? "1" : ""));
+        xml::attribute<CharT> nil;
+        xml::text<CharT>(ostrm,
+                impl::string_lit<CharT>::get("token"),
+                get_token_value(*it).c_str(),
+                token_id,
+                is_root_attr.has_value() ? is_root_attr : nil);
+    }
+
+    template <
+        typename CharT, typename TreeNodeT, typename AssocContainerT,
+        typename GetIdT, typename GetValueT
+    >
+    inline void
+    tree_node_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &node,
+        AssocContainerT const& id_to_name_map, GetIdT const &get_token_id,
+        GetValueT const &get_token_value)
+    {
+        typedef typename TreeNodeT::const_iterator node_iter_t;
+        typedef
+            typename TreeNodeT::value_type::parse_node_t::const_iterator_t
+            value_iter_t;
+
+        xml::attribute<CharT> nil;
+        node_iter_t end = node.end();
+        for (node_iter_t it = node.begin(); it != end; ++it)
+        {
+            // output a node
+            xml::attribute<CharT> id (
+                impl::string_lit<CharT>::get("rule"),
+                get_rulename(id_to_name_map, (*it).value.id()).c_str());
+            xml::node<CharT> currnode (ostrm,
+                impl::string_lit<CharT>::get("parsenode"),
+                (*it).value.id() != 0 && id.has_value() ? id : nil);
+
+            // first dump the value
+            std::size_t cnt = std::distance((*it).value.begin(), (*it).value.end());
+
+            if (1 == cnt)
+            {
+                token_to_xml (ostrm, (*it).value.begin(),
+                    (*it).value.is_root(), get_token_id, get_token_value);
+            }
+            else if (cnt > 1)
+            {
+                xml::node<CharT> value (ostrm,
+                        impl::string_lit<CharT>::get("value"));
+                bool is_root = (*it).value.is_root();
+
+                value_iter_t val_end = (*it).value.end();
+                for (value_iter_t val_it = (*it).value.begin();
+                val_it != val_end; ++val_it)
+                {
+                    token_to_xml (ostrm, val_it, is_root, get_token_id,
+                        get_token_value);
+                }
+            }
+            tree_node_to_xml(ostrm, (*it).children, id_to_name_map,
+                get_token_id, get_token_value);      // dump all subnodes
+        }
+    }
+
+    template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+    inline void
+    tree_node_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &node,
+            AssocContainerT const& id_to_name_map)
+    {
+        typedef typename TreeNodeT::const_iterator node_iter_t;
+
+        xml::attribute<CharT> nil;
+        node_iter_t end = node.end();
+        for (node_iter_t it = node.begin(); it != end; ++it)
+        {
+            // output a node
+            xml::attribute<CharT> id (
+                impl::string_lit<CharT>::get("rule"),
+                get_rulename(id_to_name_map, (*it).value.id()).c_str());
+            xml::node<CharT> currnode (ostrm,
+                impl::string_lit<CharT>::get("parsenode"),
+                (*it).value.id() != parser_id() && id.has_value() ? id : nil);
+
+            // first dump the value
+            if ((*it).value.begin() != (*it).value.end())
+            {
+                std::basic_string<CharT> tokens ((*it).value.begin(), (*it).value.end());
+
+                if (tokens.size() > 0)
+                {
+                    // output all subtokens as one string (for better readability)
+                    xml::attribute<CharT> is_root (
+                        impl::string_lit<CharT>::get("is_root"),
+                        impl::string_lit<CharT>::get((*it).value.is_root() ? "1" : ""));
+                    xml::text<CharT>(ostrm,
+                        impl::string_lit<CharT>::get("value"), tokens.c_str(),
+                        is_root.has_value() ? is_root : nil);
+                }
+
+            }
+            // dump all subnodes
+            tree_node_to_xml(ostrm, (*it).children, id_to_name_map);
+        }
+    }
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// dump a parse tree as a xml stream (generic variant)
+template <
+    typename CharT, typename TreeNodeT, typename AssocContainerT,
+    typename GetIdT, typename GetValueT
+>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+std::basic_string<CharT> const &input_line, AssocContainerT const& id_to_name,
+        GetIdT const &get_token_id, GetValueT const &get_token_value)
+{
+    // generate xml dump
+    xml::document<CharT> doc (ostrm,
+            impl::string_lit<CharT>::get("parsetree"),
+            impl::string_lit<CharT>::get("parsetree.dtd"));
+    xml::comment<CharT> input (ostrm, input_line.c_str());
+    xml::attribute<CharT> ver (
+            impl::string_lit<CharT>::get("version"),
+            impl::string_lit<CharT>::get("1.0"));
+    xml::node<CharT> mainnode (ostrm,
+            impl::string_lit<CharT>::get("parsetree"), ver);
+
+    impl::tree_node_to_xml (ostrm, tree, id_to_name, get_token_id,
+        get_token_value);
+}
+
+// dump a parse tree as a xml steam (for character based parsers)
+template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+        std::basic_string<CharT> const &input_line,
+        AssocContainerT const& id_to_name)
+{
+    // generate xml dump
+    xml::document<CharT> doc (ostrm,
+            impl::string_lit<CharT>::get("parsetree"),
+            impl::string_lit<CharT>::get("parsetree.dtd"));
+    xml::comment<CharT> input (ostrm, input_line.c_str());
+    xml::attribute<CharT> ver (
+            impl::string_lit<CharT>::get("version"),
+            impl::string_lit<CharT>::get("1.0"));
+    xml::node<CharT> mainnode (ostrm,
+            impl::string_lit<CharT>::get("parsetree"), ver);
+
+    impl::tree_node_to_xml(ostrm, tree, id_to_name);
+}
+
+template <typename CharT, typename TreeNodeT>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+        std::basic_string<CharT> const &input_line)
+{
+    return basic_tree_to_xml<CharT>(ostrm, tree, input_line,
+        std::map<BOOST_SPIRIT_CLASSIC_NS::parser_id, std::basic_string<CharT> >());
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_OSSTREAM
+#undef BOOST_SPIRIT_GETSTRING
+
+#endif // !defined(PARSE_TREE_XML_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree.hpp
new file mode 100644 (file)
index 0000000..dcca9b3
--- /dev/null
@@ -0,0 +1,296 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_PARSE_TREE_HPP
+#define BOOST_SPIRIT_TREE_PARSE_TREE_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/tree/common.hpp>
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+
+#include <boost/spirit/home/classic/tree/parse_tree_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+//////////////////////////////////
+// pt_match_policy is simply an id so the correct specialization of tree_policy can be found.
+template <
+    typename IteratorT,
+    typename NodeFactoryT,
+    typename T 
+>
+struct pt_match_policy :
+    public common_tree_match_policy<
+        pt_match_policy<IteratorT, NodeFactoryT, T>,
+        IteratorT,
+        NodeFactoryT,
+        pt_tree_policy<
+            pt_match_policy<IteratorT, NodeFactoryT, T>,
+            NodeFactoryT,
+            T
+        >,
+        T
+    >
+{
+    typedef
+        common_tree_match_policy<
+            pt_match_policy<IteratorT, NodeFactoryT, T>,
+            IteratorT,
+            NodeFactoryT,
+            pt_tree_policy<
+                pt_match_policy<IteratorT, NodeFactoryT, T>,
+                NodeFactoryT,
+                T
+            >,
+            T
+        >
+    common_tree_match_policy_;
+
+    pt_match_policy()
+    {
+    }
+
+    template <typename PolicyT>
+    pt_match_policy(PolicyT const & policies)
+        : common_tree_match_policy_(policies)
+    {
+    }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT, typename T>
+struct pt_tree_policy :
+    public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
+{
+    typedef typename MatchPolicyT::match_t match_t;
+    typedef typename MatchPolicyT::iterator_t iterator_t;
+
+    template<typename MatchAT, typename MatchBT>
+    static void concat(MatchAT& a, MatchBT const& b)
+    {
+        typedef typename match_t::attr_t attr_t;
+        BOOST_SPIRIT_ASSERT(a && b);
+
+        std::copy(b.trees.begin(), b.trees.end(),
+            std::back_insert_iterator<typename match_t::container_t>(a.trees));
+    }
+
+    template <typename MatchT, typename Iterator1T, typename Iterator2T>
+    static void group_match(MatchT& m, parser_id const& id,
+            Iterator1T const& first, Iterator2T const& last)
+    {
+        if (!m)
+            return;
+
+        typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+        typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
+            container_t;
+        typedef typename container_t::iterator cont_iterator_t;
+
+        match_t newmatch(m.length(),
+                factory_t::create_node(first, last, false));
+
+        std::swap(newmatch.trees.begin()->children, m.trees);
+        // set this node and all it's unset children's rule_id
+        newmatch.trees.begin()->value.id(id);
+        for (cont_iterator_t i = newmatch.trees.begin()->children.begin();
+                i != newmatch.trees.begin()->children.end();
+                ++i)
+        {
+            if (i->value.id() == 0)
+                i->value.id(id);
+        }
+        m = newmatch;
+    }
+
+    template <typename FunctorT, typename MatchT>
+    static void apply_op_to_match(FunctorT const& op, MatchT& m)
+    {
+        op(m);
+    }
+};
+
+namespace impl {
+
+    template <typename IteratorT, typename NodeFactoryT, typename T>
+    struct tree_policy_selector<pt_match_policy<IteratorT, NodeFactoryT, T> >
+    {
+        typedef pt_tree_policy<
+            pt_match_policy<IteratorT, NodeFactoryT, T>, 
+            NodeFactoryT, 
+            T
+        > type;
+    };
+
+} // namespace impl
+
+
+//////////////////////////////////
+struct gen_pt_node_parser_gen;
+
+template <typename T>
+struct gen_pt_node_parser
+:   public unary<T, parser<gen_pt_node_parser<T> > >
+{
+    typedef gen_pt_node_parser<T> self_t;
+    typedef gen_pt_node_parser_gen parser_generator_t;
+    typedef unary_parser_category parser_category_t;
+
+    gen_pt_node_parser(T const& a)
+    : unary<T, parser<gen_pt_node_parser<T> > >(a) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+        typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
+        typedef typename ScannerT::match_policy_t::factory_t factory_t;
+        typedef pt_match_policy<iterator_t, factory_t> match_policy_t;
+        typedef typename ScannerT::action_policy_t action_policy_t;
+        typedef scanner_policies<
+            iteration_policy_t,
+            match_policy_t,
+            action_policy_t
+        > policies_t;
+
+        return this->subject().parse(scan.change_policies(policies_t(scan)));
+    }
+};
+
+//////////////////////////////////
+struct gen_pt_node_parser_gen
+{
+    template <typename T>
+    struct result {
+
+        typedef gen_pt_node_parser<T> type;
+    };
+
+    template <typename T>
+    static gen_pt_node_parser<T>
+    generate(parser<T> const& s)
+    {
+        return gen_pt_node_parser<T>(s.derived());
+    }
+
+    template <typename T>
+    gen_pt_node_parser<T>
+    operator[](parser<T> const& s) const
+    {
+        return gen_pt_node_parser<T>(s.derived());
+    }
+};
+
+//////////////////////////////////
+const gen_pt_node_parser_gen gen_pt_node_d = gen_pt_node_parser_gen();
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Parse functions for parse trees
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename NodeFactoryT, typename IteratorT, typename ParserT, 
+    typename SkipT
+>
+inline tree_parse_info<IteratorT, NodeFactoryT>
+pt_parse(
+    IteratorT const&        first_,
+    IteratorT const&        last,
+    parser<ParserT> const&  p,
+    SkipT const&            skip,
+    NodeFactoryT const&   /*dummy_*/ = NodeFactoryT())
+{
+    typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+    typedef pt_match_policy<IteratorT, NodeFactoryT> pt_match_policy_t;
+    typedef
+        scanner_policies<iter_policy_t, pt_match_policy_t>
+        scanner_policies_t;
+    typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+    iter_policy_t iter_policy(skip);
+    scanner_policies_t policies(iter_policy);
+    IteratorT first = first_;
+    scanner_t scan(first, last, policies);
+    tree_match<IteratorT, NodeFactoryT> hit = p.derived().parse(scan);
+    return tree_parse_info<IteratorT, NodeFactoryT>(
+        first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+template <typename IteratorT, typename ParserT, typename SkipT>
+inline tree_parse_info<IteratorT>
+pt_parse(
+    IteratorT const&        first,
+    IteratorT const&        last,
+    parser<ParserT> const&  p,
+    SkipT const&            skip)
+{
+    typedef node_val_data_factory<nil_t> default_node_factory_t;
+    return pt_parse(first, last, p, skip, default_node_factory_t());
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename ParserT>
+inline tree_parse_info<IteratorT>
+pt_parse(
+    IteratorT const&        first_,
+    IteratorT const&        last,
+    parser<ParserT> const&  parser)
+{
+    typedef pt_match_policy<IteratorT> pt_match_policy_t;
+    IteratorT first = first_;
+    scanner<
+        IteratorT,
+        scanner_policies<iteration_policy, pt_match_policy_t>
+    > scan(first, last);
+    tree_match<IteratorT> hit = parser.derived().parse(scan);
+    return tree_parse_info<IteratorT>(
+        first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT, typename SkipT>
+inline tree_parse_info<CharT const*>
+pt_parse(
+    CharT const*            str,
+    parser<ParserT> const&  p,
+    SkipT const&            skip)
+{
+    CharT const* last = str;
+    while (*last)
+        last++;
+    return pt_parse(str, last, p, skip);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline tree_parse_info<CharT const*>
+pt_parse(
+    CharT const*            str,
+    parser<ParserT> const&  parser)
+{
+    CharT const* last = str;
+    while (*last)
+    {
+        last++;
+    }
+    return pt_parse(str, last, parser);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_fwd.hpp
new file mode 100644 (file)
index 0000000..5e99459
--- /dev/null
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP)
+#define BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <
+        typename MatchPolicyT, 
+        typename NodeFactoryT,
+        typename T = nil_t
+    >
+    struct pt_tree_policy;
+
+    template <
+        typename IteratorT,
+        typename NodeFactoryT = node_val_data_factory<nil_t>,
+        typename T = nil_t
+    >
+    struct pt_match_policy;
+
+    template <typename T>
+    struct gen_pt_node_parser;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parse_tree_utils.hpp
new file mode 100644 (file)
index 0000000..105d80e
--- /dev/null
@@ -0,0 +1,64 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(PARSE_TREE_UTILS_HPP)
+#define PARSE_TREE_UTILS_HPP
+
+#include <utility>                          // for std::pair
+
+#include <boost/spirit/home/classic/tree/parse_tree.hpp> // needed for parse tree generation
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace spirit {
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The function 'get_first_leaf' returnes a reference to the first leaf node
+//  of the given parsetree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+tree_node<T> const &
+get_first_leaf (tree_node<T> const &node);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The function 'find_node' finds a specified node through recursive search.
+//  If the return value is true, the variable to which points the parameter
+//  'found_node' will contain the address of the node with the given rule_id.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+bool
+find_node (tree_node<T> const &node, parser_id node_to_search,
+    tree_node<T> const **found_node);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The function 'get_node_range' return a pair of iterators pointing at the
+//  range, which containes the elements of a specified node. It's very useful
+//  for locating all information related with a specified node.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+bool
+get_node_range (tree_node<T> const &node, parser_id node_to_search,
+    std::pair<typename tree_node<T>::const_tree_iterator,
+        typename tree_node<T>::const_tree_iterator> &nodes);
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+}   // namespace spirit
+}   // namespace boost
+
+#include "boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp"
+
+#endif // !defined(PARSE_TREE_UTILS_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parsetree.dtd b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/parsetree.dtd
new file mode 100644 (file)
index 0000000..9d847c7
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- This DTD is used for the output of Spirit parse tree's through          -->
+<!-- the boost::spirit::tree_to_xml functions.                               -->
+<!-- Copyright (c) 2001-2007 Hartmut Kaiser                                  -->
+<!-- Distribution under the Boost Software                                   -->
+<!-- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -->
+<!-- http://www.boost.org/LICENSE_1_0.txt)                                   -->
+<!ELEMENT parsetree (parsenode)>
+<!ATTLIST parsetree
+    version CDATA "1.0"
+>
+<!ELEMENT parsenode ((value | token)?, parsenode*)>
+<!ATTLIST parsenode
+    rule CDATA #IMPLIED
+>
+<!ELEMENT value (#PCDATA | token)*>
+<!ELEMENT token (#PCDATA)>
+<!ATTLIST token
+    id CDATA #REQUIRED
+    is_root CDATA "0"
+>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/tree_to_xml.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/tree_to_xml.hpp
new file mode 100644 (file)
index 0000000..0ef3aa3
--- /dev/null
@@ -0,0 +1,116 @@
+/*=============================================================================
+    Copyright (c) 2001-2007 Hartmut Kaiser
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TREE_TO_XML_HPP)
+#define TREE_TO_XML_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+        template <typename CharT> struct default_string;
+    }
+    
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Dump a parse tree as a xml stream
+//
+//      The functions 'tree_to_xml' can be used to output a parse tree as a xml
+//      stream into the given ostream. The parameters have the following
+//      meaning:
+//
+//  mandatory parameters:
+//      ostrm       The output stream used for streaming the parse tree.
+//      tree        The parse tree to output.
+//
+//  optional parameters:
+//      input_line  The input line from which the parse tree was
+//                  generated (if given, it is used to output a comment
+//                  containing this line).
+//      id_to_name  A map, which is used for converting the rule id's contained
+//                  in the parse tree to readable strings. Here a auxiliary
+//                  associative container can be used, which maps a rule_id to
+//                  a std::string (i.e. a std::map<rule_id, std::string>).
+//      get_token_id
+//                  A function or functor, which takes an instance of a token
+//                  and which should return a token id (i.e. something like
+//                  'int f(char const c)').
+//      get_token_value
+//                  A function or functor, which takes an instance of a token
+//                  and which should return a readable representation of this
+//                  token (i.e. something like 'std::string f(char const c)').
+//
+//  The structure of the generated xml stream conforms to the DTD given in the
+//  file 'parsetree.dtd'. This file is located in the spirit/tree directory.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+    template <
+        typename CharT, typename TreeNodeT, typename AssocContainerT,
+        typename GetIdT, typename GetValueT
+    >
+    inline void 
+    basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+        std::basic_string<CharT> const &input_line, 
+        AssocContainerT const& id_to_name, GetIdT const &get_token_id, 
+        GetValueT const &get_token_value);
+
+    template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+    inline void 
+    basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+        std::basic_string<CharT> const &input_line, 
+        AssocContainerT const& id_to_name);
+
+    template <typename CharT, typename TreeNodeT>
+    inline void 
+    basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+        std::basic_string<CharT> const &input_line = 
+            impl::default_string<CharT>::get());
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename TreeNodeT, typename AssocContainerT,
+        typename GetIdT, typename GetValueT
+    >
+    inline void 
+    tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+        std::string const &input_line, AssocContainerT const& id_to_name, 
+        GetIdT const &get_token_id, GetValueT const &get_token_value)
+    {
+        basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name, 
+            get_token_id, get_token_value);
+    }
+
+    template <typename TreeNodeT, typename AssocContainerT>
+    inline void 
+    tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+        std::string const &input_line, AssocContainerT const& id_to_name)
+    {
+        basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name);
+    }
+    
+    template <typename TreeNodeT>
+    inline void 
+    tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+        std::string const &input_line = "")
+    {
+        basic_tree_to_xml<char>(ostrm, tree, input_line);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#include <boost/spirit/home/classic/tree/impl/tree_to_xml.ipp>
+
+#endif // !defined(TREE_TO_XML_HPP)
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/tree/typeof.hpp
new file mode 100644 (file)
index 0000000..2d25512
--- /dev/null
@@ -0,0 +1,80 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_TYPEOF_HPP)
+#define BOOST_SPIRIT_TREE_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/core/typeof.hpp>
+
+#include <boost/spirit/home/classic/tree/common_fwd.hpp>
+#include <boost/spirit/home/classic/tree/parse_tree_fwd.hpp>
+#include <boost/spirit/home/classic/tree/ast_fwd.hpp>
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// common.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_node,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_iter_data,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_iter_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_val_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_all_val_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_match,3)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::tree_policy)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::common_tree_match_policy,4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::common_tree_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::no_tree_gen_node_parser,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::leaf_node_parser,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::discard_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::reduced_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::infix_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::discard_first_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::discard_last_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::inner_node_op)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::action_directive_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::access_match_action)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::access_match_action::action,2)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::access_node_action)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::access_node_action::action,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_parse_info,3)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::node_iter_data,1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::node_iter_data_factory<BOOST_SPIRIT_CLASSIC_NS::nil_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::node_val_data_factory<BOOST_SPIRIT_CLASSIC_NS::nil_t>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::node_all_val_data_factory<BOOST_SPIRIT_CLASSIC_NS::nil_t>)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_match,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_match,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_parse_info,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::tree_parse_info,1)
+
+
+// parse_tree.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::pt_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::pt_match_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::gen_pt_node_parser,1)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::pt_match_policy,1)
+
+
+// ast.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ast_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ast_match_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::gen_ast_node_parser,1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::root_node_op)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::ast_match_policy,1)
+
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility.hpp
new file mode 100644 (file)
index 0000000..8eec51a
--- /dev/null
@@ -0,0 +1,40 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    Copyright (c) 2002-2003 Martin Wille
+    Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+    Copyright (c) 2002 Raghavendra Satish
+    Copyright (c) 2002 Jeff Westfahl
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
+#define BOOST_SPIRIT_UTILITY_MAIN_HPP
+
+#include <boost/spirit/home/classic/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Master header for Spirit.Utilities
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// Utility.Parsers
+#include <boost/spirit/home/classic/utility/chset.hpp>
+#include <boost/spirit/home/classic/utility/chset_operators.hpp>
+#include <boost/spirit/home/classic/utility/escape_char.hpp>
+#include <boost/spirit/home/classic/utility/functor_parser.hpp>
+#include <boost/spirit/home/classic/utility/loops.hpp>
+#include <boost/spirit/home/classic/utility/confix.hpp>
+#include <boost/spirit/home/classic/utility/lists.hpp>
+#include <boost/spirit/home/classic/utility/distinct.hpp>
+
+// Utility.Support
+#include <boost/spirit/home/classic/utility/flush_multi_pass.hpp>
+#include <boost/spirit/home/classic/utility/scoped_lock.hpp>
+
+
+#endif // !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset.hpp
new file mode 100644 (file)
index 0000000..3635456
--- /dev/null
@@ -0,0 +1,187 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_HPP
+#define BOOST_SPIRIT_CHSET_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/shared_ptr.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace utility { namespace impl {
+
+    // This is here because some compilers choke on out-of-line member
+    // template functions.  And we don't want to put the whole algorithm
+    // in the chset constructor in the class definition.
+    template <typename CharT, typename CharT2>
+    void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
+            CharT2 const* definition);
+
+}} // namespace utility::impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chset class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT = char>
+class chset: public char_parser<chset<CharT> > {
+
+public:
+                    chset();
+                    chset(chset const& arg_);
+    explicit        chset(CharT arg_);
+    explicit        chset(anychar_parser arg_);
+    explicit        chset(nothing_parser arg_);
+    explicit        chset(chlit<CharT> const& arg_);
+    explicit        chset(range<CharT> const& arg_);
+    explicit        chset(negated_char_parser<chlit<CharT> > const& arg_);
+    explicit        chset(negated_char_parser<range<CharT> > const& arg_);
+
+                    template <typename CharT2>
+    explicit        chset(CharT2 const* definition)
+                    : ptr(new basic_chset<CharT>())
+                    {
+                        utility::impl::construct_chset(ptr, definition);
+                    }
+                    ~chset();
+
+    chset&          operator=(chset const& rhs);
+    chset&          operator=(CharT rhs);
+    chset&          operator=(anychar_parser rhs);
+    chset&          operator=(nothing_parser rhs);
+    chset&          operator=(chlit<CharT> const& rhs);
+    chset&          operator=(range<CharT> const& rhs);
+    chset&          operator=(negated_char_parser<chlit<CharT> > const& rhs);
+    chset&          operator=(negated_char_parser<range<CharT> > const& rhs);
+
+    void            set(range<CharT> const& arg_);
+    void            set(negated_char_parser<chlit<CharT> > const& arg_);
+    void            set(negated_char_parser<range<CharT> > const& arg_);
+
+    void            clear(range<CharT> const& arg_);
+    void            clear(negated_char_parser<range<CharT> > const& arg_);
+    bool            test(CharT ch) const;
+    chset&          inverse();
+    void            swap(chset& x);
+
+    chset&          operator|=(chset const& x);
+    chset&          operator&=(chset const& x);
+    chset&          operator-=(chset const& x);
+    chset&          operator^=(chset const& x);
+
+private:
+
+    boost::shared_ptr<basic_chset<CharT> > ptr;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Generator functions
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+chset_p(chlit<CharT> const& arg_)
+{ return chset<CharT>(arg_); }
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+chset_p(range<CharT> const& arg_)
+{ return chset<CharT>(arg_); }
+
+template <typename CharT>
+inline chset<CharT>
+chset_p(negated_char_parser<chlit<CharT> > const& arg_)
+{ return chset<CharT>(arg_); }
+
+template <typename CharT>
+inline chset<CharT>
+chset_p(negated_char_parser<range<CharT> > const& arg_)
+{ return chset<CharT>(arg_); }
+
+//////////////////////////////////
+inline chset<char>
+chset_p(char const* init)
+{ return chset<char>(init); }
+
+//////////////////////////////////
+inline chset<wchar_t>
+chset_p(wchar_t const* init)
+{ return chset<wchar_t>(init); }
+
+//////////////////////////////////
+inline chset<char>
+chset_p(char ch)
+{ return chset<char>(ch); }
+
+//////////////////////////////////
+inline chset<wchar_t>
+chset_p(wchar_t ch)
+{ return chset<wchar_t>(ch); }
+
+//////////////////////////////////
+inline chset<int>
+chset_p(int ch)
+{ return chset<int>(ch); }
+
+//////////////////////////////////
+inline chset<unsigned int>
+chset_p(unsigned int ch)
+{ return chset<unsigned int>(ch); }
+
+//////////////////////////////////
+inline chset<short>
+chset_p(short ch)
+{ return chset<short>(ch); }
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+//////////////////////////////////
+inline chset<unsigned short>
+chset_p(unsigned short ch)
+{ return chset<unsigned short>(ch); }
+#endif
+//////////////////////////////////
+inline chset<long>
+chset_p(long ch)
+{ return chset<long>(ch); }
+
+//////////////////////////////////
+inline chset<unsigned long>
+chset_p(unsigned long ch)
+{ return chset<unsigned long>(ch); }
+
+#ifdef BOOST_HAS_LONG_LONG
+//////////////////////////////////
+inline chset< ::boost::long_long_type>
+chset_p( ::boost::long_long_type ch)
+{ return chset< ::boost::long_long_type>(ch); }
+
+//////////////////////////////////
+inline chset< ::boost::ulong_long_type>
+chset_p( ::boost::ulong_long_type ch)
+{ return chset< ::boost::ulong_long_type>(ch); }
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/utility/impl/chset.ipp>
+#include <boost/spirit/home/classic/utility/chset_operators.hpp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset_operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/chset_operators.hpp
new file mode 100644 (file)
index 0000000..d42b5fa
--- /dev/null
@@ -0,0 +1,402 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_OPERATORS_HPP
+#define BOOST_SPIRIT_CHSET_OPERATORS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/utility/chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chset free operators
+//
+//      Where a and b are both chsets, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+//      Where a is a chset, implements:
+//
+//          ~a
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator~(chset<CharT> const& a);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  range <--> chset free operators
+//
+//      Where a is a chset and b is a range, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(range<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chlit <--> chset free operators
+//
+//      Where a is a chset and b is a chlit, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chlit<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  negated_char_parser<range> <--> chset free operators
+//
+//      Where a is a chset and b is a range, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  negated_char_parser<chlit> <--> chset free operators
+//
+//      Where a is a chset and b is a chlit, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  literal primitives <--> chset free operators
+//
+//      Where a is a chset and b is a literal primitive,
+//      and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(CharT a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  anychar_parser <--> chset free operators
+//
+//      Where a is chset and b is a anychar_parser, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(anychar_parser a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  nothing_parser <--> chset free operators
+//
+//      Where a is chset and b is nothing_parser, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(nothing_parser a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/utility/impl/chset_operators.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix.hpp
new file mode 100644 (file)
index 0000000..42228ea
--- /dev/null
@@ -0,0 +1,405 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONFIX_HPP
+#define BOOST_SPIRIT_CONFIX_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/config.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#include <boost/spirit/home/classic/core/composite/operators.hpp>
+
+#include <boost/spirit/home/classic/utility/confix_fwd.hpp>
+#include <boost/spirit/home/classic/utility/impl/confix.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  confix_parser class
+//
+//      Parses a sequence of 3 sub-matches. This class may
+//      be used to parse structures, where the opening part is possibly
+//      contained in the expression part and the whole sequence is only
+//      parsed after seeing the closing part matching the first opening
+//      subsequence. Example: C-comments:
+//
+//      /* This is a C-comment */
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
+template<typename NestedT = non_nested, typename LexemeT = non_lexeme>
+struct confix_parser_gen;
+
+template <
+    typename OpenT, typename ExprT, typename CloseT, typename CategoryT,
+    typename NestedT, typename LexemeT
+>
+struct confix_parser :
+    public parser<
+        confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
+    >
+{
+    typedef
+        confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
+        self_t;
+
+    confix_parser(OpenT const &open_, ExprT const &expr_, CloseT const &close_)
+    : open(open_), expr(expr_), close(close_)
+    {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::confix_parser_type<CategoryT>::
+            parse(NestedT(), LexemeT(), *this, scan, open, expr, close);
+    }
+
+private:
+
+    typename as_parser<OpenT>::type::embed_t open;
+    typename as_parser<ExprT>::type::embed_t expr;
+    typename as_parser<CloseT>::type::embed_t close;
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Confix parser generator template
+//
+//      This is a helper for generating a correct confix_parser<> from
+//      auxiliary parameters. There are the following types supported as
+//      parameters yet: parsers, single characters and strings (see
+//      as_parser).
+//
+//      If the body parser is an action_parser_category type parser (a parser
+//      with an attached semantic action) we have to do something special. This
+//      happens, if the user wrote something like:
+//
+//          confix_p(open, body[f], close)
+//
+//      where 'body' is the parser matching the body of the confix sequence
+//      and 'f' is a functor to be called after matching the body. If we would
+//      do nothing, the resulting code would parse the sequence as follows:
+//
+//          start >> (body[f] - close) >> close
+//
+//      what in most cases is not what the user expects.
+//      (If this _is_ what you've expected, then please use the confix_p
+//      generator function 'direct()', which will inhibit
+//      re-attaching the actor to the body parser).
+//
+//      To make the confix parser behave as expected:
+//
+//          start >> (body - close)[f] >> close
+//
+//      the actor attached to the 'body' parser has to be re-attached to the
+//      (body - close) parser construct, which will make the resulting confix
+//      parser 'do the right thing'. This refactoring is done by the help of
+//      the refactoring parsers (see the files refactoring.[hi]pp).
+//
+//      Additionally special care must be taken, if the body parser is a
+//      unary_parser_category type parser as
+//
+//          confix_p(open, *anychar_p, close)
+//
+//      which without any refactoring would result in
+//
+//          start >> (*anychar_p - close) >> close
+//
+//      and will not give the expected result (*anychar_p will eat up all the
+//      input up to the end of the input stream). So we have to refactor this
+//      into:
+//
+//          start >> *(anychar_p - close) >> close
+//
+//      what will give the correct result.
+//
+//      The case, where the body parser is a combination of the two mentioned
+//      problems (i.e. the body parser is a unary parser  with an attached
+//      action), is handled accordingly too:
+//
+//          confix_p(start, (*anychar_p)[f], end)
+//
+//      will be parsed as expected:
+//
+//          start >> (*(anychar_p - end))[f] >> end.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename NestedT, typename LexemeT>
+struct confix_parser_gen
+{
+    // Generic generator function for creation of concrete confix parsers
+
+    template<typename StartT, typename ExprT, typename EndT>
+    struct paren_op_result_type
+    {
+        typedef confix_parser<
+            typename as_parser<StartT>::type,
+            typename as_parser<ExprT>::type,
+            typename as_parser<EndT>::type,
+            typename as_parser<ExprT>::type::parser_category_t,
+            NestedT,
+            LexemeT
+        > type;
+    };
+  
+    template<typename StartT, typename ExprT, typename EndT>
+    typename paren_op_result_type<StartT, ExprT, EndT>::type 
+    operator()(StartT const &start_, ExprT const &expr_, EndT const &end_) const
+    {
+        typedef typename paren_op_result_type<StartT,ExprT,EndT>::type 
+            return_t;
+
+        return return_t(
+            as_parser<StartT>::convert(start_),
+            as_parser<ExprT>::convert(expr_),
+            as_parser<EndT>::convert(end_)
+        );
+    }
+
+    // Generic generator function for creation of concrete confix parsers
+    // which have an action directly attached to the ExprT part of the
+    // parser (see comment above, no automatic refactoring)
+
+    template<typename StartT, typename ExprT, typename EndT>
+    struct direct_result_type
+    {
+        typedef confix_parser<
+            typename as_parser<StartT>::type,
+            typename as_parser<ExprT>::type,
+            typename as_parser<EndT>::type,
+            plain_parser_category,   // do not re-attach action
+            NestedT,
+            LexemeT
+        > type;
+    };
+
+    template<typename StartT, typename ExprT, typename EndT>
+    typename direct_result_type<StartT,ExprT,EndT>::type
+    direct(StartT const &start_, ExprT const &expr_, EndT const &end_) const
+    {
+        typedef typename direct_result_type<StartT,ExprT,EndT>::type
+            return_t;
+
+        return return_t(
+            as_parser<StartT>::convert(start_),
+            as_parser<ExprT>::convert(expr_),
+            as_parser<EndT>::convert(end_)
+        );
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Predefined non_nested confix parser generators
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const confix_parser_gen<non_nested, non_lexeme> confix_p =
+    confix_parser_gen<non_nested, non_lexeme>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Comments are special types of confix parsers
+//
+//      Comment parser generator template. This is a helper for generating a
+//      correct confix_parser<> from auxiliary parameters, which is able to
+//      parse comment constructs: (StartToken >> Comment text >> EndToken).
+//
+//      There are the following types supported as parameters yet: parsers,
+//      single characters and strings (see as_parser).
+//
+//      There are two diffenerent predefined comment parser generators
+//      (comment_p and comment_nest_p, see below), which may be used for
+//      creating special comment parsers in two different ways.
+//
+//      If these are used with one parameter, a comment starting with the given
+//      first parser parameter up to the end of the line is matched. So for
+//      instance the following parser matches C++ style comments:
+//
+//          comment_p("//").
+//
+//      If these are used with two parameters, a comment starting with the
+//      first parser parameter up to the second parser parameter is matched.
+//      For instance a C style comment parser should be constrcuted as:
+//
+//          comment_p("/*", "*/").
+//
+//      Please note, that a comment is parsed implicitly as if the whole
+//      comment_p(...) statement were embedded into a lexeme_d[] directive.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename NestedT>
+struct comment_parser_gen
+{
+    // Generic generator function for creation of concrete comment parsers
+    // from an open token. The newline parser eol_p is used as the
+    // closing token.
+
+    template<typename StartT>
+    struct paren_op1_result_type
+    {
+        typedef confix_parser<
+            typename as_parser<StartT>::type,
+            kleene_star<anychar_parser>,
+            alternative<eol_parser, end_parser>,
+            unary_parser_category,          // there is no action to re-attach
+            NestedT,
+            is_lexeme                       // insert implicit lexeme_d[]
+        >
+        type;
+    };
+
+    template<typename StartT>
+    typename paren_op1_result_type<StartT>::type 
+    operator() (StartT const &start_) const
+    {
+        typedef typename paren_op1_result_type<StartT>::type
+            return_t;
+
+        return return_t(
+            as_parser<StartT>::convert(start_),
+            *anychar_p,
+            eol_p | end_p
+        );
+    }
+
+    // Generic generator function for creation of concrete comment parsers
+    // from an open and a close tokens.
+
+    template<typename StartT, typename EndT>
+    struct paren_op2_result_type
+    {
+        typedef confix_parser<
+            typename as_parser<StartT>::type,
+            kleene_star<anychar_parser>,
+            typename as_parser<EndT>::type,
+            unary_parser_category,          // there is no action to re-attach
+            NestedT,
+            is_lexeme                       // insert implicit lexeme_d[]
+        > type;
+    };
+
+    template<typename StartT, typename EndT>
+    typename paren_op2_result_type<StartT,EndT>::type
+    operator() (StartT const &start_, EndT const &end_) const
+    {
+        typedef typename paren_op2_result_type<StartT,EndT>::type
+            return_t;
+
+        return return_t(
+            as_parser<StartT>::convert(start_),
+            *anychar_p,
+            as_parser<EndT>::convert(end_)
+        );
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Predefined non_nested comment parser generator
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const comment_parser_gen<non_nested> comment_p =
+    comment_parser_gen<non_nested>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  comment_nest_parser class
+//
+//      Parses a nested comments.
+//      Example: nested PASCAL-comments:
+//
+//      { This is a { nested } PASCAL-comment }
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename OpenT, typename CloseT>
+struct comment_nest_parser:
+    public parser<comment_nest_parser<OpenT, CloseT> >
+{
+    typedef comment_nest_parser<OpenT, CloseT> self_t;
+
+    comment_nest_parser(OpenT const &open_, CloseT const &close_):
+        open(open_), close(close_)
+    {}
+
+    template<typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const &scan) const
+    {
+        return do_parse(
+            open >> *(*this | (anychar_p - close)) >> close,
+            scan);
+    }
+
+private:
+    template<typename ParserT, typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+        do_parse(ParserT const &p, ScannerT const &scan) const
+    {
+        return
+            impl::contiguous_parser_parse<
+                typename parser_result<ParserT, ScannerT>::type
+            >(p, scan, scan);
+    }
+
+    typename as_parser<OpenT>::type::embed_t open;
+    typename as_parser<CloseT>::type::embed_t close;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Predefined nested comment parser generator
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename OpenT, typename CloseT>
+struct comment_nest_p_result
+{
+    typedef comment_nest_parser<
+        typename as_parser<OpenT>::type,
+        typename as_parser<CloseT>::type
+    > type;
+};
+
+template<typename OpenT, typename CloseT>
+inline typename comment_nest_p_result<OpenT,CloseT>::type 
+comment_nest_p(OpenT const &open, CloseT const &close)
+{
+    typedef typename comment_nest_p_result<OpenT,CloseT>::type
+        result_t;
+
+    return result_t(
+        as_parser<OpenT>::convert(open),
+        as_parser<CloseT>::convert(close)
+    );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/confix_fwd.hpp
new file mode 100644 (file)
index 0000000..24e2236
--- /dev/null
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONFIX_FWD_HPP)
+#define BOOST_SPIRIT_CONFIX_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct is_nested;
+    struct non_nested;
+    struct is_lexeme;
+    struct non_lexeme;
+
+    template <
+        typename OpenT, typename ExprT, typename CloseT, 
+        typename CategoryT = plain_parser_category,
+        typename NestedT = non_nested, typename LexemeT = non_lexeme
+    >
+    struct confix_parser;
+
+    template<typename OpenT, typename CloseT>
+    struct comment_nest_parser;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct.hpp
new file mode 100644 (file)
index 0000000..b66d409
--- /dev/null
@@ -0,0 +1,229 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2003 Vaclav Vesely
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DISTINCT_HPP)
+#define BOOST_SPIRIT_DISTINCT_HPP
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#include <boost/spirit/home/classic/core/composite/operators.hpp>
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
+#include <boost/spirit/home/classic/utility/chset.hpp>
+
+#include <boost/spirit/home/classic/utility/distinct_fwd.hpp>
+
+namespace boost {
+    namespace spirit {
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+//-----------------------------------------------------------------------------
+// distinct_parser class
+
+template <typename CharT, typename TailT>
+class distinct_parser
+{
+public:
+    typedef
+        contiguous<
+            sequence<
+                chseq<CharT const*>,
+                negated_empty_match_parser<
+                    TailT
+                >
+            >
+        >
+            result_t;
+
+    distinct_parser()
+    :   tail(chset<CharT>())
+    {
+    }
+
+    explicit distinct_parser(parser<TailT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    explicit distinct_parser(CharT const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    result_t operator()(CharT const* str) const
+    {
+        return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
+    }
+
+    TailT tail;
+};
+
+//-----------------------------------------------------------------------------
+// distinct_directive class
+
+template <typename CharT, typename TailT>
+class distinct_directive
+{
+public:
+    template<typename ParserT>
+    struct result {
+        typedef
+            contiguous<
+                sequence<
+                    ParserT,
+                    negated_empty_match_parser<
+                        TailT
+                    >
+                >
+            >
+                type;
+    };
+
+    distinct_directive()
+    :   tail(chset<CharT>())
+    {
+    }
+
+    explicit distinct_directive(CharT const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    explicit distinct_directive(parser<TailT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    template<typename ParserT>
+    typename result<typename as_parser<ParserT>::type>::type
+        operator[](ParserT const &subject) const
+    {
+        return
+            lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+    }
+
+    TailT tail;
+};
+
+//-----------------------------------------------------------------------------
+// dynamic_distinct_parser class
+
+template <typename ScannerT>
+class dynamic_distinct_parser
+{
+public:
+    typedef typename ScannerT::value_t char_t;
+
+    typedef
+        rule<
+            typename no_actions_scanner<
+                typename lexeme_scanner<ScannerT>::type
+            >::type
+        >
+            tail_t;
+
+    typedef
+        contiguous<
+            sequence<
+                chseq<char_t const*>,
+                negated_empty_match_parser<
+                    tail_t
+                >
+            >
+        >
+            result_t;
+
+    dynamic_distinct_parser()
+    :   tail(nothing_p)
+    {
+    }
+
+    template<typename ParserT>
+    explicit dynamic_distinct_parser(parser<ParserT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    explicit dynamic_distinct_parser(char_t const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    result_t operator()(char_t const* str) const
+    {
+        return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
+    }
+
+    tail_t tail;
+};
+
+//-----------------------------------------------------------------------------
+// dynamic_distinct_directive class
+
+template <typename ScannerT>
+class dynamic_distinct_directive
+{
+public:
+    typedef typename ScannerT::value_t char_t;
+
+    typedef
+        rule<
+            typename no_actions_scanner<
+                typename lexeme_scanner<ScannerT>::type
+            >::type
+        >
+            tail_t;
+
+    template<typename ParserT>
+    struct result {
+        typedef
+            contiguous<
+                sequence<
+                    ParserT,
+                    negated_empty_match_parser<
+                        tail_t
+                    >
+                >
+            >
+                type;
+    };
+
+    dynamic_distinct_directive()
+    :   tail(nothing_p)
+    {
+    }
+
+    template<typename ParserT>
+    explicit dynamic_distinct_directive(parser<ParserT> const & tail_)
+    :   tail(tail_.derived())
+    {
+    }
+
+    explicit dynamic_distinct_directive(char_t const* letters)
+    :   tail(chset_p(letters))
+    {
+    }
+
+    template<typename ParserT>
+    typename result<typename as_parser<ParserT>::type>::type
+        operator[](ParserT const &subject) const
+    {
+        return
+            lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+    }
+
+    tail_t tail;
+};
+
+//-----------------------------------------------------------------------------
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+    } // namespace spirit
+} // namespace boost
+
+#endif // !defined(BOOST_SPIRIT_DISTINCT_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/distinct_fwd.hpp
new file mode 100644 (file)
index 0000000..368d1f0
--- /dev/null
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DISTINCT_FWD_HPP)
+#define BOOST_SPIRIT_DISTINCT_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template<typename CharT> class chset;
+
+    template <typename CharT = char, typename TailT = chset<CharT> >
+    class distinct_parser;
+
+    template <typename CharT = char, typename TailT = chset<CharT> >
+    class distinct_directive;
+
+    template <typename ScannerT = scanner<> >
+    class dynamic_distinct_parser;
+
+    template <typename ScannerT = scanner<> >
+    class dynamic_distinct_directive;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char.hpp
new file mode 100644 (file)
index 0000000..375402f
--- /dev/null
@@ -0,0 +1,184 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ESCAPE_CHAR_HPP
+#define BOOST_SPIRIT_ESCAPE_CHAR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <string>
+#include <iterator>
+#include <cctype>
+#include <boost/limits.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/debug.hpp>
+
+#include <boost/spirit/home/classic/utility/escape_char_fwd.hpp>
+#include <boost/spirit/home/classic/utility/impl/escape_char.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  escape_char_action class
+//
+//      Links an escape char parser with a user defined semantic action.
+//      The semantic action may be a function or a functor. A function
+//      should be compatible with the interface:
+//
+//          void f(CharT ch);
+//
+//      A functor should have a member operator() with a compatible signature
+//      as above. The matching character is passed into the function/functor.
+//      This is the default class that character parsers use when dealing with
+//      the construct:
+//
+//          p[f]
+//
+//      where p is a parser and f is a function or functor.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename ParserT, typename ActionT,
+    unsigned long Flags, typename CharT
+>
+struct escape_char_action
+:   public unary<ParserT,
+        parser<escape_char_action<ParserT, ActionT, Flags, CharT> > >
+{
+    typedef escape_char_action
+        <ParserT, ActionT, Flags, CharT>        self_t;
+    typedef action_parser_category              parser_category_t;
+    typedef unary<ParserT, parser<self_t> >     base_t;
+
+    template <typename ScannerT>
+    struct result
+    {
+        typedef typename match_result<ScannerT, CharT>::type type;
+    };
+
+    escape_char_action(ParserT const& p, ActionT const& a)
+    : base_t(p), actor(a) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::escape_char_action_parse<Flags, CharT>::
+            parse(scan, *this);
+    }
+
+    ActionT const& predicate() const { return actor; }
+
+private:
+
+    ActionT actor;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  escape_char_parser class
+//
+//      The escape_char_parser helps in conjunction with the escape_char_action
+//      template class (see above) in parsing escaped characters. There are two
+//      different variants of this parser: one for parsing C style escaped
+//      characters and one for parsing LEX style escaped characters.
+//
+//      The C style escaped character parser is generated, when the template
+//      parameter 'Flags' is equal to 'c_escapes' (a constant defined in the
+//      file impl/escape_char.ipp). This parser recognizes all valid C escape
+//      character sequences: '\t', '\b', '\f', '\n', '\r', '\"', '\'', '\\'
+//      and the numeric style escapes '\120' (octal) and '\x2f' (hexadecimal)
+//      and converts these to their character equivalent, for instance the
+//      sequence of a backslash and a 'b' is parsed as the character '\b'.
+//      All other escaped characters are rejected by this parser.
+//
+//      The LEX style escaped character parser is generated, when the template
+//      parameter 'Flags' is equal to 'lex_escapes' (a constant defined in the
+//      file impl/escape_char.ipp). This parser recognizes all the C style
+//      escaped character sequences (as described above) and additionally
+//      does not reject all other escape sequences. All not mentioned escape
+//      sequences are converted by the parser to the plain character, for
+//      instance '\a' will be parsed as 'a'.
+//
+//      All not escaped characters are parsed without modification.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_action_parser_gen;
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_parser :
+    public parser<escape_char_parser<Flags, CharT> > {
+
+    // only the values c_escapes and lex_escapes are valid for Flags
+    BOOST_STATIC_ASSERT(Flags == c_escapes || Flags == lex_escapes);
+
+    typedef escape_char_parser<Flags, CharT> self_t;
+    typedef
+        escape_char_action_parser_gen<Flags, CharT>
+        action_parser_generator_t;
+
+    template <typename ScannerT>
+    struct result {
+
+        typedef typename match_result<ScannerT, CharT>::type type;
+    };
+
+    template <typename ActionT>
+    escape_char_action<self_t, ActionT, Flags, CharT>
+    operator[](ActionT const& actor) const
+    {
+        return escape_char_action<self_t, ActionT, Flags, CharT>(*this, actor);
+    }
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const &scan) const
+    {
+        return impl::escape_char_parse<CharT>::parse(scan, *this);
+    }
+};
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_action_parser_gen {
+
+    template <typename ParserT, typename ActionT>
+    static escape_char_action<ParserT, ActionT, Flags, CharT>
+    generate (ParserT const &p, ActionT const &actor)
+    {
+        typedef
+            escape_char_action<ParserT, ActionT, Flags, CharT>
+            action_parser_t;
+        return action_parser_t(p, actor);
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  predefined escape_char_parser objects
+//
+//      These objects should be used for generating correct escaped character
+//      parsers.
+//
+///////////////////////////////////////////////////////////////////////////////
+const escape_char_parser<lex_escapes> lex_escape_ch_p =
+    escape_char_parser<lex_escapes>();
+
+const escape_char_parser<c_escapes> c_escape_ch_p =
+    escape_char_parser<c_escapes>();
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/escape_char_fwd.hpp
new file mode 100644 (file)
index 0000000..1485367
--- /dev/null
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP)
+#define BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <unsigned long Flags, typename CharT = char>
+    struct escape_char_parser;
+
+    template <
+        class ParserT, typename ActionT,
+        unsigned long Flags, typename CharT = char>
+    struct escape_char_action;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/flush_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/flush_multi_pass.hpp
new file mode 100644 (file)
index 0000000..ad69f4f
--- /dev/null
@@ -0,0 +1,77 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+#define BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core.hpp>
+#include <boost/spirit/home/classic/iterator/multi_pass.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace impl {
+
+        template <typename T>
+        void flush_iterator(T &) {}
+
+        template <typename T1, typename T2, typename T3, typename T4>
+        void flush_iterator(BOOST_SPIRIT_CLASSIC_NS::multi_pass<
+            T1, T2, T3, T4, BOOST_SPIRIT_CLASSIC_NS::multi_pass_policies::std_deque> &i)
+        {
+            i.clear_queue();
+        }
+
+    }   // namespace impl
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  flush_multi_pass_parser
+    //
+    //      The flush_multi_pass_parser flushes an underlying
+    //      multi_pass_iterator during the normal parsing process. This may
+    //      be used at certain points during the parsing process, when it is
+    //      clear, that no backtracking is needed anymore and the input
+    //      gathered so far may be discarded.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    class flush_multi_pass_parser
+    :   public parser<flush_multi_pass_parser>
+    {
+    public:
+        typedef flush_multi_pass_parser this_t;
+
+        template <typename ScannerT>
+        typename parser_result<this_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            impl::flush_iterator(scan.first);
+            return scan.empty_match();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  predefined flush_multi_pass_p object
+    //
+    //      This object should may used to flush a multi_pass_iterator along
+    //      the way during the normal parsing process.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    flush_multi_pass_parser const
+        flush_multi_pass_p = flush_multi_pass_parser();
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/functor_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/functor_parser.hpp
new file mode 100644 (file)
index 0000000..ac53751
--- /dev/null
@@ -0,0 +1,71 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Joel de Guzman
+    Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FUNCTOR_PARSER_HPP
+#define BOOST_SPIRIT_FUNCTOR_PARSER_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  functor_parser class
+    //
+    //      Once a functor parser has been defined, you can build a real
+    //      parser from it by passing it to this class as the template
+    //      parameter.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template < class FunctorT >
+    struct functor_parser : public parser<functor_parser<FunctorT> >
+    {
+        FunctorT functor;
+
+        functor_parser(): functor() {}
+        functor_parser(FunctorT const& functor_): functor(functor_) {}
+
+        typedef typename FunctorT::result_t functor_result_t;
+        typedef functor_parser<FunctorT> self_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, functor_result_t>::type
+            type;
+        };
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const& scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            typedef typename ScannerT::value_t      value_t;
+            typedef typename ScannerT::iterator_t   iterator_t;
+
+            iterator_t const s(scan.first);
+            functor_result_t functor_result;
+            std::ptrdiff_t len = functor(scan, functor_result);
+
+            if (len < 0)
+                return scan.no_match();
+            else
+                return scan.create_match(std::size_t(len), functor_result, s, scan.first);
+        }
+    };
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def.hpp
new file mode 100644 (file)
index 0000000..bc9b11f
--- /dev/null
@@ -0,0 +1,307 @@
+/*=============================================================================
+    Copyright (c) 2003 Hartmut Kaiser
+    Copyright (c) 2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_HPP)
+#define BOOST_SPIRIT_GRAMMAR_DEF_HPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+#include <boost/spirit/home/classic/core/assert.hpp>
+#include <boost/spirit/home/classic/utility/grammar_def_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Spirit predefined maximum grammar start parser limit. This limit defines
+//  the maximum number of possible different parsers exposed from a
+//  particular grammar. This number defaults to 3.
+//  The actual maximum is rounded up in multiples of 3. Thus, if this value
+//  is 4, the actual limit is 6. The ultimate maximum limit in this
+//  implementation is 15.
+//
+//  It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT and
+//        BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15 and
+//        BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0);
+
+//////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+struct same {};
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The make_const_pointer meta function allows to generate a T const*
+    //  needed to store the pointer to a given start parser from a grammar.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T0, typename T = T0>
+    struct make_const_pointer {
+
+    private:
+        // T0 shouldn't be of type 'same'
+        BOOST_STATIC_ASSERT((!boost::is_same<T0, same>::value));
+
+        typedef typename boost::mpl::if_c<
+                    boost::is_same<T, same>::value,
+                    T0 const *,
+                    T const *
+                >::type
+            ptr_type;
+
+    public:
+        // If the type in question is phoenix::nil_t, then the returned type
+        // is still phoenix::nil_t, otherwise a constant pointer type to the
+        // inspected type is returned.
+        typedef typename boost::mpl::if_c<
+                    boost::is_same<T, ::phoenix::nil_t>::value,
+                    ::phoenix::nil_t,
+                    ptr_type
+                >::type
+            type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <int N, typename ElementT>
+    struct assign_zero_to_tuple_member {
+
+        template <typename TupleT>
+        static void do_(TupleT &t) { t[::phoenix::tuple_index<N>()] = 0; }
+    };
+
+    template <int N>
+    struct assign_zero_to_tuple_member<N, ::phoenix::nil_t> {
+
+        template <typename TupleT>
+        static void do_(TupleT& /*t*/) {}
+    };
+
+    struct phoenix_nil_type {
+
+        typedef ::phoenix::nil_t type;
+    };
+
+    template <int N>
+    struct init_tuple_member {
+
+        template <typename TupleT>
+        static void
+        do_(TupleT &t)
+        {
+            typedef typename boost::mpl::eval_if_c<
+                        (N < TupleT::length),
+                        ::phoenix::tuple_element<N, TupleT>,
+                        phoenix_nil_type
+                    >::type
+                element_type;
+
+            assign_zero_to_tuple_member<N, element_type>::do_(t);
+        }
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  grammar_def class
+//
+//      This class may be used as a base class for the embedded definition
+//      class inside the grammar<> derived user grammar.
+//      It exposes the two functions needed for start rule access:
+//
+//          rule<> const &start() const;
+//
+//      and
+//
+//          template <int N>
+//          rule<> const *get_start_parser() const;
+//
+//      Additionally it exposes a set o 'start_parsers' functions, which are to
+//      be called by the user to define the parsers to use as start parsers
+//      of the given grammar.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename T,
+    BOOST_PP_ENUM_PARAMS(
+        BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A), typename T)
+>
+class grammar_def {
+
+private:
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  This generates the full tuple type from the given template parameters
+    //  T, T0, ...
+    //
+    //      typedef ::phoenix::tuple<
+    //              typename impl::make_const_pointer<T>::type,
+    //              typename impl::make_const_pointer<T, T0>::type,
+    //              ...
+    //          > tuple_t;
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM(z, N, _) \
+        typename impl::make_const_pointer<T, BOOST_PP_CAT(T, N)>::type \
+        /**/
+
+    typedef ::phoenix::tuple<
+            typename impl::make_const_pointer<T>::type,
+            BOOST_PP_ENUM(
+                BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
+                BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM,
+                _
+            )
+        > tuple_t;
+
+    #undef BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM
+    ///////////////////////////////////////////////////////////////////////////
+
+protected:
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  This generates a sequence of 'start_parsers' functions with increasing
+    //  number of arguments, which allow to initialize the tuple members with
+    //  the pointers to the start parsers of the grammar:
+    //
+    //      template <typename TC0, ...>
+    //      void start_parsers (TC0 const &t0, ...)
+    //      {
+    //          using ::phoenix::tuple_index_names::_1;
+    //          t[_1] = &t0;
+    //          ...
+    //      }
+    //
+    //      where a TC0 const* must be convertible to a T0 const*
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS(z, N, _) \
+        BOOST_PP_CAT(TC, N) const &BOOST_PP_CAT(t, N) \
+        /**/
+    #define BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN(z, N, _) \
+        using ::phoenix::tuple_index_names::BOOST_PP_CAT(_, BOOST_PP_INC(N)); \
+        t[BOOST_PP_CAT(_, BOOST_PP_INC(N))] = &BOOST_PP_CAT(t, N); \
+        /**/
+    #define BOOST_SPIRIT_GRAMMARDEF_ENUM_START(z, N, _) \
+        template <BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename TC)> \
+        void \
+        start_parsers(BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
+            BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS, _) ) \
+        { \
+            BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N), \
+                BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN, _) \
+        } \
+        /**/
+
+    BOOST_PP_REPEAT(
+        BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
+        BOOST_SPIRIT_GRAMMARDEF_ENUM_START, _)
+
+    #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_START
+    #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN
+    #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  This generates some initialization code, which allows to initialize all
+    //  used tuple members to 0 (zero):
+    //
+    //      t[_1] = 0;
+    //      impl::init_tuple_member<1>::do_(t);
+    //      ...
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    #define BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT(z, N, _) \
+        impl::init_tuple_member<N>::do_(t); \
+        /**/
+
+    grammar_def()
+    {
+        using ::phoenix::tuple_index_names::_1;
+        t[_1] = 0;
+        BOOST_PP_REPEAT_FROM_TO(
+            1, BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
+            BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT, _)
+    }
+
+    #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT
+    ///////////////////////////////////////////////////////////////////////////
+
+public:
+    T const &
+    start() const
+    {
+    //  If the following assertion is fired, you have probably forgot to call
+    //  the start_parser() function from inside the constructor of your
+    //  embedded definition class to initialize the start parsers to be exposed
+    //  from your grammar.
+        using ::phoenix::tuple_index_names::_1;
+        BOOST_SPIRIT_ASSERT(0 != t[_1]);
+        return *t[_1];
+    }
+
+    template <int N>
+    typename ::phoenix::tuple_element<N, tuple_t>::crtype
+    get_start_parser() const
+    {
+    //  If the following expression yields a compiler error, you have probably
+    //  tried to access a start rule, which isn't exposed as such from your
+    //  grammar.
+        BOOST_STATIC_ASSERT(N > 0 && N < tuple_t::length);
+
+    //  If the following assertion is fired, you have probably forgot to call
+    //  the start_parser() function from inside the constructor of your
+    //  embedded definition class to initialize the start parsers to be exposed
+    //  from your grammar.
+    //  Another reason may be, that there is a count mismatch between
+    //  the number of template parameters to the grammar_def<> class and the
+    //  number of parameters used while calling start_parsers().
+        BOOST_SPIRIT_ASSERT(0 != t[::phoenix::tuple_index<N>()]);
+
+        return t[::phoenix::tuple_index<N>()];
+    }
+
+private:
+    tuple_t t;
+};
+
+#undef BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_GRAMMAR_DEF_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/grammar_def_fwd.hpp
new file mode 100644 (file)
index 0000000..cf9e385
--- /dev/null
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP)
+#define BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#endif
+
+//  Calculate an integer rounded up to the nearest integer dividable by 3
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A     15
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A     12
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A     9
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A     6
+#else
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A     3
+#endif
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template <
+        typename T,
+        BOOST_PP_ENUM_BINARY_PARAMS(
+            BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
+            typename T, = ::phoenix::nil_t BOOST_PP_INTERCEPT
+        )
+    >
+    class grammar_def;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset.ipp
new file mode 100644 (file)
index 0000000..6e2130b
--- /dev/null
@@ -0,0 +1,322 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_IPP
+#define BOOST_SPIRIT_CHSET_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/limits.hpp>
+#include <boost/spirit/home/classic/utility/chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chset class
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace utility { namespace impl {
+    template <typename CharT>
+    inline void
+    detach(boost::shared_ptr<basic_chset<CharT> >& ptr)
+    {
+        if (!ptr.unique())
+            ptr = boost::shared_ptr<basic_chset<CharT> >
+                (new basic_chset<CharT>(*ptr));
+    }
+
+    template <typename CharT>
+    inline void
+    detach_clear(boost::shared_ptr<basic_chset<CharT> >& ptr)
+    {
+        if (ptr.unique())
+            ptr->clear();
+        else
+            ptr.reset(new basic_chset<CharT>());
+    }
+
+    template <typename CharT, typename CharT2>
+    void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
+            CharT2 const* definition)
+    {
+        CharT2 ch = *definition++;
+        while (ch)
+        {
+            CharT2 next = *definition++;
+            if (next == '-')
+            {
+                next = *definition++;
+                if (next == 0)
+                {
+                    ptr->set(ch);
+                    ptr->set('-');
+                    break;
+                }
+                ptr->set(ch, next);
+            }
+            else
+            {
+                ptr->set(ch);
+            }
+            ch = next;
+        }
+    }
+
+}} // namespace utility::impl
+
+template <typename CharT>
+inline chset<CharT>::chset()
+: ptr(new basic_chset<CharT>()) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(chset const& arg_)
+: ptr(new basic_chset<CharT>(*arg_.ptr)) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(CharT arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_); }
+
+template <typename CharT>
+inline chset<CharT>::chset(anychar_parser /*arg*/)
+: ptr(new basic_chset<CharT>())
+{
+    ptr->set(
+        (std::numeric_limits<CharT>::min)(),
+        (std::numeric_limits<CharT>::max)()
+    );
+}
+
+template <typename CharT>
+inline chset<CharT>::chset(nothing_parser arg_)
+: ptr(new basic_chset<CharT>()) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(chlit<CharT> const& arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_.ch); }
+
+template <typename CharT>
+inline chset<CharT>::chset(range<CharT> const& arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_.first, arg_.last); }
+
+template <typename CharT>
+inline chset<CharT>::chset(negated_char_parser<chlit<CharT> > const& arg_)
+: ptr(new basic_chset<CharT>())
+{
+    set(arg_);
+}
+
+template <typename CharT>
+inline chset<CharT>::chset(negated_char_parser<range<CharT> > const& arg_)
+: ptr(new basic_chset<CharT>())
+{
+    set(arg_);
+}
+
+template <typename CharT>
+inline chset<CharT>::~chset() {}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(chset const& rhs)
+{
+    ptr = rhs.ptr;
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(CharT rhs)
+{
+    utility::impl::detach_clear(ptr);
+    ptr->set(rhs);
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(anychar_parser rhs)
+{
+    utility::impl::detach_clear(ptr);
+    ptr->set(
+        (std::numeric_limits<CharT>::min)(),
+        (std::numeric_limits<CharT>::max)()
+    );
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(nothing_parser rhs)
+{
+    utility::impl::detach_clear(ptr);
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(chlit<CharT> const& rhs)
+{
+    utility::impl::detach_clear(ptr);
+    ptr->set(rhs.ch);
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(range<CharT> const& rhs)
+{
+    utility::impl::detach_clear(ptr);
+    ptr->set(rhs.first, rhs.last);
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(negated_char_parser<chlit<CharT> > const& rhs)
+{
+    utility::impl::detach_clear(ptr);
+    set(rhs);
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(negated_char_parser<range<CharT> > const& rhs)
+{
+    utility::impl::detach_clear(ptr);
+    set(rhs);
+    return *this;
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::set(range<CharT> const& arg_)
+{
+    utility::impl::detach(ptr);
+    ptr->set(arg_.first, arg_.last);
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::set(negated_char_parser<chlit<CharT> > const& arg_)
+{
+    utility::impl::detach(ptr);
+    
+    if(arg_.positive.ch != (std::numeric_limits<CharT>::min)()) {
+        ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.ch - 1);
+    }
+    if(arg_.positive.ch != (std::numeric_limits<CharT>::max)()) {
+        ptr->set(arg_.positive.ch + 1, (std::numeric_limits<CharT>::max)());
+    }
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::set(negated_char_parser<range<CharT> > const& arg_)
+{
+    utility::impl::detach(ptr);
+    
+    if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
+        ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
+    }
+    if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
+        ptr->set(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
+    }
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::clear(range<CharT> const& arg_)
+{
+    utility::impl::detach(ptr);
+    ptr->clear(arg_.first, arg_.last);
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::clear(negated_char_parser<range<CharT> > const& arg_)
+{
+    utility::impl::detach(ptr);
+
+    if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
+        ptr->clear((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
+    }
+    if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
+        ptr->clear(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
+    }
+}
+
+template <typename CharT>
+inline bool
+chset<CharT>::test(CharT ch) const
+{ return ptr->test(ch); }
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::inverse()
+{
+    utility::impl::detach(ptr);
+    ptr->inverse();
+    return *this;
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::swap(chset& x)
+{ ptr.swap(x.ptr); }
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator|=(chset const& x)
+{
+    utility::impl::detach(ptr);
+    *ptr |= *x.ptr;
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator&=(chset const& x)
+{
+    utility::impl::detach(ptr);
+    *ptr &= *x.ptr;
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator-=(chset const& x)
+{
+    utility::impl::detach(ptr);
+    *ptr -= *x.ptr;
+    return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator^=(chset const& x)
+{
+    utility::impl::detach(ptr);
+    *ptr ^= *x.ptr;
+    return *this;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp
new file mode 100644 (file)
index 0000000..ace6501
--- /dev/null
@@ -0,0 +1,107 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_BASIC_CHSET_HPP
+#define BOOST_SPIRIT_BASIC_CHSET_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <climits>
+#include <boost/spirit/home/classic/utility/impl/chset/range_run.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  basic_chset: basic character set implementation using range_run
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    class basic_chset
+    {
+    public:
+                            basic_chset();
+                            basic_chset(basic_chset const& arg_);
+
+        bool                test(CharT v) const;
+        void                set(CharT from, CharT to);
+        void                set(CharT c);
+        void                clear(CharT from, CharT to);
+        void                clear(CharT c);
+        void                clear();
+
+        void                inverse();
+        void                swap(basic_chset& x);
+
+        basic_chset&        operator|=(basic_chset const& x);
+        basic_chset&        operator&=(basic_chset const& x);
+        basic_chset&        operator-=(basic_chset const& x);
+        basic_chset&        operator^=(basic_chset const& x);
+
+        private: utility::impl::range_run<CharT> rr;
+    };
+
+    #if (CHAR_BIT == 8)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  basic_chset: specializations for 8 bit chars using std::bitset
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    class basic_chset_8bit {
+
+    public:
+                            basic_chset_8bit();
+                            basic_chset_8bit(basic_chset_8bit const& arg_);
+
+        bool                test(CharT v) const;
+        void                set(CharT from, CharT to);
+        void                set(CharT c);
+        void                clear(CharT from, CharT to);
+        void                clear(CharT c);
+        void                clear();
+
+        void                inverse();
+        void                swap(basic_chset_8bit& x);
+
+        basic_chset_8bit&   operator|=(basic_chset_8bit const& x);
+        basic_chset_8bit&   operator&=(basic_chset_8bit const& x);
+        basic_chset_8bit&   operator-=(basic_chset_8bit const& x);
+        basic_chset_8bit&   operator^=(basic_chset_8bit const& x);
+
+        private: std::bitset<256> bset;
+    };
+
+    /////////////////////////////////
+    template <>
+    class basic_chset<char>
+    : public basic_chset_8bit<char> {};
+
+    /////////////////////////////////
+    template <>
+    class basic_chset<signed char>
+    : public basic_chset_8bit<signed char> {};
+
+    /////////////////////////////////
+    template <>
+    class basic_chset<unsigned char>
+    : public basic_chset_8bit<unsigned char> {};
+
+#endif
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
+#include <boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp
new file mode 100644 (file)
index 0000000..e7d9272
--- /dev/null
@@ -0,0 +1,246 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    Copyright (c) 2001-2003 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_BASIC_CHSET_IPP
+#define BOOST_SPIRIT_BASIC_CHSET_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  basic_chset: character set implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>::basic_chset() {}
+
+//////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>::basic_chset(basic_chset const& arg_)
+: rr(arg_.rr) {}
+
+//////////////////////////////////
+template <typename CharT>
+inline bool
+basic_chset<CharT>::test(CharT v) const
+{ return rr.test(v); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::set(CharT from, CharT to)
+{ rr.set(utility::impl::range<CharT>(from, to)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::set(CharT c)
+{ rr.set(utility::impl::range<CharT>(c, c)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::clear(CharT from, CharT to)
+{ rr.clear(utility::impl::range<CharT>(from, to)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::clear()
+{ rr.clear(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::inverse()
+{
+    basic_chset inv;
+    inv.set(
+        (std::numeric_limits<CharT>::min)(),
+        (std::numeric_limits<CharT>::max)()
+    );
+    inv -= *this;
+    swap(inv);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::swap(basic_chset& x)
+{ rr.swap(x.rr); }
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator|=(basic_chset<CharT> const& x)
+{
+    typedef typename utility::impl::range_run<CharT>::const_iterator const_iterator;
+    for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+        rr.set(*iter);
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator&=(basic_chset<CharT> const& x)
+{
+    basic_chset inv;
+    inv.set(
+        (std::numeric_limits<CharT>::min)(),
+        (std::numeric_limits<CharT>::max)()
+    );
+    inv -= x;
+    *this -= inv;
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator-=(basic_chset<CharT> const& x)
+{
+    typedef typename utility::impl::range_run<CharT>::const_iterator const_iterator;
+    for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+        rr.clear(*iter);
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator^=(basic_chset<CharT> const& x)
+{
+    basic_chset bma = x;
+    bma -= *this;
+    *this -= x;
+    *this |= bma;
+    return *this;
+}
+
+#if (CHAR_BIT == 8)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  basic_chset: specializations for 8 bit chars using std::bitset
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>::basic_chset_8bit() {}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>::basic_chset_8bit(basic_chset_8bit const& arg_)
+: bset(arg_.bset) {}
+
+/////////////////////////////////
+template <typename CharT>
+inline bool
+basic_chset_8bit<CharT>::test(CharT v) const
+{ return bset.test((unsigned char)v); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::set(CharT from, CharT to)
+{
+    for (int i = from; i <= to; ++i)
+        bset.set((unsigned char)i);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::set(CharT c)
+{ bset.set((unsigned char)c); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear(CharT from, CharT to)
+{
+    for (int i = from; i <= to; ++i)
+        bset.reset((unsigned char)i);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear(CharT c)
+{ bset.reset((unsigned char)c); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear()
+{ bset.reset(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::inverse()
+{ bset.flip(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::swap(basic_chset_8bit& x)
+{ std::swap(bset, x.bset); }
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator|=(basic_chset_8bit const& x)
+{
+    bset |= x.bset;
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator&=(basic_chset_8bit const& x)
+{
+    bset &= x.bset;
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator-=(basic_chset_8bit const& x)
+{
+    bset &= ~x.bset;
+    return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator^=(basic_chset_8bit const& x)
+{
+    bset ^= x.bset;
+    return *this;
+}
+
+#endif
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.hpp
new file mode 100644 (file)
index 0000000..579bcae
--- /dev/null
@@ -0,0 +1,127 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_RANGE_RUN_HPP
+#define BOOST_SPIRIT_RANGE_RUN_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <vector>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { 
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace utility { namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  range class
+    //
+    //      Implements a closed range of values. This class is used in
+    //      the implementation of the range_run class.
+    //
+    //      { Low level implementation detail }
+    //      { Not to be confused with BOOST_SPIRIT_CLASSIC_NS::range }
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    struct range {
+
+                        range(CharT first, CharT last);
+
+        bool            is_valid() const;
+        bool            includes(CharT v) const;
+        bool            includes(range const& r) const;
+        bool            overlaps(range const& r) const;
+        void            merge(range const& r);
+
+        CharT first;
+        CharT last;
+    };
+
+    //////////////////////////////////
+    template <typename CharT>
+    struct range_char_compare {
+
+        bool operator()(range<CharT> const& x, const CharT y) const
+        { return x.first < y; }
+        
+        bool operator()(const CharT x, range<CharT> const& y) const
+        { return x < y.first; }
+        
+        // This additional operator is required for the checked STL shipped
+        // with VC8 testing the ordering of the iterators passed to the
+        // std::lower_bound algo this range_char_compare<> predicate is passed
+        // to.
+        bool operator()(range<CharT> const& x, range<CharT> const& y) const
+        { return x.first < y.first; }
+    };
+
+    //////////////////////////////////
+    template <typename CharT>
+    struct range_compare {
+
+        bool operator()(range<CharT> const& x, range<CharT> const& y) const
+        { return x.first < y.first; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  range_run
+    //
+    //      An implementation of a sparse bit (boolean) set. The set uses
+    //      a sorted vector of disjoint ranges. This class implements the
+    //      bare minimum essentials from which the full range of set
+    //      operators can be implemented. The set is constructed from
+    //      ranges. Internally, adjacent or overlapping ranges are
+    //      coalesced.
+    //
+    //      range_runs are very space-economical in situations where there
+    //      are lots of ranges and a few individual disjoint values.
+    //      Searching is O(log n) where n is the number of ranges.
+    //
+    //      { Low level implementation detail }
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    class range_run {
+
+    public:
+
+        typedef range<CharT> range_t;
+        typedef std::vector<range_t> run_t;
+        typedef typename run_t::iterator iterator;
+        typedef typename run_t::const_iterator const_iterator;
+
+        void            swap(range_run& rr);
+        bool            test(CharT v) const;
+        void            set(range_t const& r);
+        void            clear(range_t const& r);
+        void            clear();
+
+        const_iterator  begin() const;
+        const_iterator  end() const;
+
+    private:
+
+        void            merge(iterator iter, range_t const& r);
+
+        run_t run;
+    };
+
+}}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS::utility::impl
+
+#endif
+
+#include <boost/spirit/home/classic/utility/impl/chset/range_run.ipp>
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset/range_run.ipp
new file mode 100644 (file)
index 0000000..ede1567
--- /dev/null
@@ -0,0 +1,218 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_RANGE_RUN_IPP
+#define BOOST_SPIRIT_RANGE_RUN_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <algorithm> // for std::lower_bound
+#include <boost/spirit/home/classic/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+#include <boost/spirit/home/classic/utility/impl/chset/range_run.hpp>
+#include <boost/spirit/home/classic/debug.hpp>
+#include <boost/limits.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    namespace utility { namespace impl {
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  range class implementation
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharT>
+        inline range<CharT>::range(CharT first_, CharT last_)
+        : first(first_), last(last_) {}
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline bool
+        range<CharT>::is_valid() const
+        { return first <= last; }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline bool
+        range<CharT>::includes(range const& r) const
+        { return (first <= r.first) && (last >= r.last); }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline bool
+        range<CharT>::includes(CharT v) const
+        { return (first <= v) && (last >= v); }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline bool
+        range<CharT>::overlaps(range const& r) const
+        {
+            CharT decr_first =
+                first == (std::numeric_limits<CharT>::min)() ? first : first-1;
+            CharT incr_last =
+                last == (std::numeric_limits<CharT>::max)() ? last : last+1;
+
+            return (decr_first <= r.last) && (incr_last >= r.first);
+        }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline void
+        range<CharT>::merge(range const& r)
+        {
+            first = (std::min)(first, r.first);
+            last = (std::max)(last, r.last);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        //  range_run class implementation
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharT>
+        inline bool
+        range_run<CharT>::test(CharT v) const
+        {
+            if (!run.empty())
+            {
+                const_iterator iter =
+                    std::lower_bound(
+                        run.begin(), run.end(), v,
+                        range_char_compare<CharT>()
+                    );
+
+                if (iter != run.end() && iter->includes(v))
+                    return true;
+                if (iter != run.begin())
+                    return (--iter)->includes(v);
+            }
+            return false;
+        }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline void
+        range_run<CharT>::swap(range_run& rr)
+        { run.swap(rr.run); }
+
+        //////////////////////////////////
+        template <typename CharT>
+        void
+        range_run<CharT>::merge(iterator iter, range<CharT> const& r)
+        {
+            iter->merge(r);
+            iterator i = iter + 1;
+
+            while (i != run.end() && iter->overlaps(*i))
+                iter->merge(*i++);
+
+            run.erase(iter+1, i);
+        }
+
+        //////////////////////////////////
+        template <typename CharT>
+        void
+        range_run<CharT>::set(range<CharT> const& r)
+        {
+            BOOST_SPIRIT_ASSERT(r.is_valid());
+            if (!run.empty())
+            {
+                iterator iter =
+                    std::lower_bound(
+                        run.begin(), run.end(), r,
+                        range_compare<CharT>()
+                    );
+
+                if ((iter != run.end() && iter->includes(r)) ||
+                    ((iter != run.begin()) && (iter - 1)->includes(r)))
+                    return;
+
+                if (iter != run.begin() && (iter - 1)->overlaps(r))
+                    merge(--iter, r);
+
+                else if (iter != run.end() && iter->overlaps(r))
+                    merge(iter, r);
+
+                else
+                    run.insert(iter, r);
+            }
+            else
+            {
+                run.push_back(r);
+            }
+        }
+
+        //////////////////////////////////
+        template <typename CharT>
+        void
+        range_run<CharT>::clear(range<CharT> const& r)
+        {
+            BOOST_SPIRIT_ASSERT(r.is_valid());
+            if (!run.empty())
+            {
+                iterator iter =
+                    std::lower_bound(
+                        run.begin(), run.end(), r,
+                        range_compare<CharT>()
+                    );
+
+                iterator left_iter;
+
+                if ((iter != run.begin()) &&
+                        (left_iter = (iter - 1))->includes(r.first))
+                {
+                    if (left_iter->last > r.last)
+                    {
+                        CharT save_last = left_iter->last;
+                        left_iter->last = r.first-1;
+                        run.insert(iter, range<CharT>(r.last+1, save_last));
+                        return;
+                    }
+                    else
+                    {
+                        left_iter->last = r.first-1;
+                    }
+                }
+                
+                iterator i = iter;
+                while (i != run.end() && r.includes(*i))
+                    i++;
+                if (i != run.end() && i->includes(r.last))
+                    i->first = r.last+1;
+                run.erase(iter, i);
+            }
+        }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline void
+        range_run<CharT>::clear()
+        { run.clear(); }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline typename range_run<CharT>::const_iterator
+        range_run<CharT>::begin() const
+        { return run.begin(); }
+
+        //////////////////////////////////
+        template <typename CharT>
+        inline typename range_run<CharT>::const_iterator
+        range_run<CharT>::end() const
+        { return run.end(); }
+
+    }} // namespace utility::impl
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset_operators.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/chset_operators.ipp
new file mode 100644 (file)
index 0000000..842a679
--- /dev/null
@@ -0,0 +1,592 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_OPERATORS_IPP
+#define BOOST_SPIRIT_CHSET_OPERATORS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/limits.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) |= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) -= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator~(chset<CharT> const& a)
+{
+    return chset<CharT>(a).inverse();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) &= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) ^= b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  range <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, range<CharT> const& b)
+{
+    chset<CharT> a_(a);
+    a_.set(b);
+    return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, range<CharT> const& b)
+{
+    chset<CharT> a_(a);
+    if(b.first != (std::numeric_limits<CharT>::min)()) {
+        a_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), b.first - 1));
+    }
+    if(b.last != (std::numeric_limits<CharT>::max)()) {
+        a_.clear(range<CharT>(b.last + 1, (std::numeric_limits<CharT>::max)()));
+    }
+    return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, range<CharT> const& b)
+{
+    chset<CharT> a_(a);
+    a_.clear(b);
+    return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, range<CharT> const& b)
+{
+    return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(range<CharT> const& a, chset<CharT> const& b)
+{
+    chset<CharT> b_(b);
+    b_.set(a);
+    return b_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(range<CharT> const& a, chset<CharT> const& b)
+{
+    chset<CharT> b_(b);
+    if(a.first != (std::numeric_limits<CharT>::min)()) {
+        b_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), a.first - 1));
+    }
+    if(a.last != (std::numeric_limits<CharT>::max)()) {
+        b_.clear(range<CharT>(a.last + 1, (std::numeric_limits<CharT>::max)()));
+    }
+    return b_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(range<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(range<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  literal primitives <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, CharT b)
+{
+    return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, CharT b)
+{
+    return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, CharT b)
+{
+    return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, CharT b)
+{
+    return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(CharT a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(CharT a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(CharT a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(CharT a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  chlit <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, chlit<CharT> const& b)
+{
+    return a | chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, chlit<CharT> const& b)
+{
+    return a & chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, chlit<CharT> const& b)
+{
+    return a - chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, chlit<CharT> const& b)
+{
+    return a ^ chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chlit<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a.ch) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chlit<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a.ch) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chlit<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a.ch) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chlit<CharT> const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a.ch) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  negated_char_parser<range> <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+    return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+    return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+    return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+    return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  negated_char_parser<chlit> <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+    return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+    return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+    return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+    return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+    return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  anychar_parser <--> chset free operators
+//
+//      Where a is chset and b is a anychar_parser, and vice-versa, implements:
+//
+//          a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+    template <typename CharT>
+    inline BOOST_SPIRIT_CLASSIC_NS::range<CharT> const&
+    full()
+    {
+        static BOOST_SPIRIT_CLASSIC_NS::range<CharT> full_(
+            (std::numeric_limits<CharT>::min)(),
+            (std::numeric_limits<CharT>::max)());
+        return full_;
+    }
+
+    template <typename CharT>
+    inline BOOST_SPIRIT_CLASSIC_NS::range<CharT> const&
+    empty()
+    {
+        static BOOST_SPIRIT_CLASSIC_NS::range<CharT> empty_;
+        return empty_;
+    }
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const&, anychar_parser)
+{
+    return chset<CharT>(impl::full<CharT>());
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, anychar_parser)
+{
+    return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const&, anychar_parser)
+{
+    return chset<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, anychar_parser)
+{
+    return ~a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(anychar_parser, chset<CharT> const& /*b*/)
+{
+    return chset<CharT>(impl::full<CharT>());
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(anychar_parser, chset<CharT> const& b)
+{
+    return b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(anychar_parser, chset<CharT> const& b)
+{
+    return ~b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(anychar_parser, chset<CharT> const& b)
+{
+    return ~b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  nothing_parser <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, nothing_parser)
+{
+    return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& /*a*/, nothing_parser)
+{
+    return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, nothing_parser)
+{
+    return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, nothing_parser)
+{
+    return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(nothing_parser, chset<CharT> const& b)
+{
+    return b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(nothing_parser, chset<CharT> const& /*b*/)
+{
+    return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(nothing_parser, chset<CharT> const& /*b*/)
+{
+    return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(nothing_parser, chset<CharT> const& b)
+{
+    return b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/confix.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/confix.ipp
new file mode 100644 (file)
index 0000000..494c480
--- /dev/null
@@ -0,0 +1,221 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONFIX_IPP
+#define BOOST_SPIRIT_CONFIX_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/meta/refactoring.hpp>
+#include <boost/spirit/home/classic/core/composite/impl/directives.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Types to distinguish nested and non-nested confix parsers
+//
+///////////////////////////////////////////////////////////////////////////////
+struct is_nested {};
+struct non_nested {};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Types to distinguish between confix parsers, which are implicitly lexems
+//  and without this behaviour
+//
+///////////////////////////////////////////////////////////////////////////////
+struct is_lexeme {};
+struct non_lexeme {};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  confix_parser_type class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  implicitly insert a lexeme_d into the parsing process
+
+    template <typename LexemeT>
+    struct select_confix_parse_lexeme;
+
+    template <>
+    struct select_confix_parse_lexeme<is_lexeme> {
+
+        template <typename ParserT, typename ScannerT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const& p, ScannerT const& scan)
+        {
+            typedef typename parser_result<ParserT, ScannerT>::type result_t;
+            return contiguous_parser_parse<result_t>(p, scan, scan);
+        }
+    };
+
+    template <>
+    struct select_confix_parse_lexeme<non_lexeme> {
+
+        template <typename ParserT, typename ScannerT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ParserT const& p, ScannerT const& scan)
+        {
+            return p.parse(scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  parse confix sequences with refactoring
+
+    template <typename NestedT>
+    struct select_confix_parse_refactor;
+
+    template <>
+    struct select_confix_parse_refactor<is_nested> {
+
+        template <
+            typename LexemeT, typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            LexemeT const &, ParserT const& this_, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+            const refactor_t refactor_body_d = refactor_t(refactor_unary_d);
+
+            return select_confix_parse_lexeme<LexemeT>::parse((
+                            open
+                        >>  (this_ | refactor_body_d[expr - close])
+                        >>  close
+                    ),  scan);
+        }
+    };
+
+    template <>
+    struct select_confix_parse_refactor<non_nested> {
+
+        template <
+            typename LexemeT, typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            LexemeT const &, ParserT const& /*this_*/, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+            const refactor_t refactor_body_d = refactor_t(refactor_unary_d);
+
+            return select_confix_parse_lexeme<LexemeT>::parse((
+                            open
+                        >>  refactor_body_d[expr - close]
+                        >>  close
+                    ),  scan);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  parse confix sequences without refactoring
+
+    template <typename NestedT>
+    struct select_confix_parse_no_refactor;
+
+    template <>
+    struct select_confix_parse_no_refactor<is_nested> {
+
+        template <
+            typename LexemeT, typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            LexemeT const &, ParserT const& this_, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            return select_confix_parse_lexeme<LexemeT>::parse((
+                            open
+                        >>  (this_ | (expr - close))
+                        >>  close
+                    ),  scan);
+        }
+    };
+
+    template <>
+    struct select_confix_parse_no_refactor<non_nested> {
+
+        template <
+            typename LexemeT, typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            LexemeT const &, ParserT const & /*this_*/, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            return select_confix_parse_lexeme<LexemeT>::parse((
+                            open
+                        >>  (expr - close)
+                        >>  close
+                    ),  scan);
+        }
+    };
+
+    // the refactoring is handled by the refactoring parsers, so here there
+    // is no need to pay attention to these issues.
+
+    template <typename CategoryT>
+    struct confix_parser_type {
+
+        template <
+            typename NestedT, typename LexemeT,
+            typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            NestedT const &, LexemeT const &lexeme,
+            ParserT const& this_, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            return select_confix_parse_refactor<NestedT>::
+                parse(lexeme, this_, scan, open, expr, close);
+        }
+    };
+
+    template <>
+    struct confix_parser_type<plain_parser_category> {
+
+        template <
+            typename NestedT, typename LexemeT,
+            typename ParserT, typename ScannerT,
+            typename OpenT, typename ExprT, typename CloseT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(
+            NestedT const &, LexemeT const &lexeme,
+            ParserT const& this_, ScannerT const& scan,
+            OpenT const& open, ExprT const& expr, CloseT const& close)
+        {
+            return select_confix_parse_no_refactor<NestedT>::
+                parse(lexeme, this_, scan, open, expr, close);
+        }
+    };
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/escape_char.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/escape_char.ipp
new file mode 100644 (file)
index 0000000..55ab158
--- /dev/null
@@ -0,0 +1,224 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Daniel Nuffer
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ESCAPE_CHAR_IPP
+#define BOOST_SPIRIT_ESCAPE_CHAR_IPP
+
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/primitives/numerics.hpp>
+#include <boost/spirit/home/classic/core/composite/difference.hpp>
+#include <boost/spirit/home/classic/core/composite/sequence.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  escape_char_parser class
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const unsigned long c_escapes = 1;
+const unsigned long lex_escapes = c_escapes << 1;
+
+//////////////////////////////////
+namespace impl {
+
+    //////////////////////////////////
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+    template <unsigned long Flags, typename CharT>
+    struct escape_char_action_parse {
+
+        template <typename ParserT, typename ScannerT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const &p)
+        {
+            // Actually decode the escape char.
+            typedef CharT char_t;
+            typedef typename ScannerT::iterator_t iterator_t;
+            typedef typename parser_result<ParserT, ScannerT>::type result_t;
+
+            if (scan.first != scan.last) {
+
+                iterator_t save = scan.first;
+                if (result_t hit = p.subject().parse(scan)) {
+
+                    char_t unescaped;
+
+                    scan.first = save;
+                    if (*scan.first == '\\') {
+
+                        ++scan.first;
+                        switch (*scan.first) {
+                        case 'b':   unescaped = '\b';   ++scan.first; break;
+                        case 't':   unescaped = '\t';   ++scan.first; break;
+                        case 'n':   unescaped = '\n';   ++scan.first; break;
+                        case 'f':   unescaped = '\f';   ++scan.first; break;
+                        case 'r':   unescaped = '\r';   ++scan.first; break;
+                        case '"':   unescaped = '"';    ++scan.first; break;
+                        case '\'':  unescaped = '\'';   ++scan.first; break;
+                        case '\\':  unescaped = '\\';   ++scan.first; break;
+
+                        case 'x': case 'X':
+                            {
+                                char_t hex = 0;
+                                char_t const lim =
+                                    (std::numeric_limits<char_t>::max)() >> 4;
+
+                                ++scan.first;
+                                while (scan.first != scan.last)
+                                {
+                                    char_t c = *scan.first;
+                                    if (hex > lim && impl::isxdigit_(c))
+                                    {
+                                        // overflow detected
+                                        scan.first = save;
+                                        return scan.no_match();
+                                    }
+                                    if (impl::isdigit_(c))
+                                    {
+                                        hex <<= 4;
+                                        hex |= c - '0';
+                                        ++scan.first;
+                                    }
+                                    else if (impl::isxdigit_(c))
+                                    {
+                                        hex <<= 4;
+                                        c = impl::toupper_(c);
+                                        hex |= c - 'A' + 0xA;
+                                        ++scan.first;
+                                    }
+                                    else
+                                    {
+                                        break; // reached the end of the number
+                                    }
+                                }
+                                unescaped = hex;
+                            }
+                            break;
+
+                        case '0': case '1': case '2': case '3':
+                        case '4': case '5': case '6': case '7':
+                            {
+                                char_t oct = 0;
+                                char_t const lim =
+                                    (std::numeric_limits<char_t>::max)() >> 3;
+                                while (scan.first != scan.last)
+                                {
+                                    char_t c = *scan.first;
+                                    if (oct > lim && (c >= '0' && c <= '7'))
+                                    {
+                                        // overflow detected
+                                        scan.first = save;
+                                        return scan.no_match();
+                                    }
+
+                                    if (c >= '0' && c <= '7')
+                                    {
+                                        oct <<= 3;
+                                        oct |= c - '0';
+                                        ++scan.first;
+                                    }
+                                    else
+                                    {
+                                        break; // reached end of digits
+                                    }
+                                }
+                                unescaped = oct;
+                            }
+                            break;
+
+                        default:
+                            if (Flags & c_escapes)
+                            {
+                                // illegal C escape sequence
+                                scan.first = save;
+                                return scan.no_match();
+                            }
+                            else
+                            {
+                                unescaped = *scan.first;
+                                ++scan.first;
+                            }
+                            break;
+                        }
+                    }
+                    else {
+                        unescaped = *scan.first;
+                        ++scan.first;
+                    }
+
+                    scan.do_action(p.predicate(), unescaped, save, scan.first);
+                    return hit;
+                }
+            }
+            return scan.no_match(); // overflow detected
+        }
+    };
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(pop)
+#endif
+
+    //////////////////////////////////
+    template <typename CharT>
+    struct escape_char_parse {
+
+        template <typename ScannerT, typename ParserT>
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const &scan, ParserT const &/*p*/)
+        {
+            typedef
+                uint_parser<CharT, 8, 1,
+                    std::numeric_limits<CharT>::digits / 3 + 1
+                >
+                oct_parser_t;
+            typedef
+                uint_parser<CharT, 16, 1,
+                    std::numeric_limits<CharT>::digits / 4 + 1
+                >
+                hex_parser_t;
+
+            typedef alternative<difference<anychar_parser, chlit<CharT> >,
+                sequence<chlit<CharT>, alternative<alternative<oct_parser_t,
+                sequence<inhibit_case<chlit<CharT> >, hex_parser_t > >,
+                difference<difference<anychar_parser,
+                inhibit_case<chlit<CharT> > >, oct_parser_t > > > >
+                parser_t;
+
+            static parser_t p =
+                ( (anychar_p - chlit<CharT>(CharT('\\')))
+                | (chlit<CharT>(CharT('\\')) >>
+                    (  oct_parser_t()
+                     | as_lower_d[chlit<CharT>(CharT('x'))] >> hex_parser_t()
+                     | (anychar_p - as_lower_d[chlit<CharT>(CharT('x'))] - oct_parser_t())
+                    )
+                ));
+
+            BOOST_SPIRIT_DEBUG_TRACE_NODE(p,
+                (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR) != 0);
+
+            return p.parse(scan);
+        }
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/lists.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/lists.ipp
new file mode 100644 (file)
index 0000000..a3dd462
--- /dev/null
@@ -0,0 +1,168 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LISTS_IPP
+#define BOOST_SPIRIT_LISTS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/meta/refactoring.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  list_parser_type class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+struct no_list_endtoken { typedef no_list_endtoken embed_t; };
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Refactor the original list item parser
+//
+///////////////////////////////////////////////////////////////////////////////
+
+    //  match list with 'extended' syntax
+    template <typename EndT>
+    struct select_list_parse_refactor {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& /*p*/,
+            ItemT const &item, DelimT const &delim, EndT const &end)
+        {
+            typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+            const refactor_t refactor_item_d = refactor_t(refactor_unary_d);
+
+            return (
+                    refactor_item_d[item - (end | delim)]
+                >> *(delim >> refactor_item_d[item - (end | delim)])
+                >> !(delim >> end)
+            ).parse(scan);
+        }
+    };
+
+    //  match list with 'normal' syntax (without an 'end' parser)
+    template <>
+    struct select_list_parse_refactor<no_list_endtoken> {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& /*p*/,
+            ItemT const &item, DelimT const &delim, no_list_endtoken const&)
+        {
+            typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+            const refactor_t refactor_item_d = refactor_t(refactor_unary_d);
+
+            return (
+                    refactor_item_d[item - delim]
+                >> *(delim >> refactor_item_d[item - delim])
+            ).parse(scan);
+        }
+    };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Do not refactor the original list item parser.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+    //  match list with 'extended' syntax
+    template <typename EndT>
+    struct select_list_parse_no_refactor {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& /*p*/,
+            ItemT const &item, DelimT const &delim, EndT const &end)
+        {
+            return (
+                    (item - (end | delim))
+                >> *(delim >> (item - (end | delim)))
+                >> !(delim >> end)
+            ).parse(scan);
+        }
+    };
+
+    //  match list with 'normal' syntax (without an 'end' parser)
+    template <>
+    struct select_list_parse_no_refactor<no_list_endtoken> {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& /*p*/,
+            ItemT const &item, DelimT const &delim, no_list_endtoken const&)
+        {
+            return (
+                    (item - delim)
+                >> *(delim >> (item - delim))
+            ).parse(scan);
+        }
+    };
+
+    // the refactoring is handled by the refactoring parsers, so here there
+    // is no need to pay attention to these issues.
+
+    template <typename CategoryT>
+    struct list_parser_type {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT, typename EndT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& p,
+              ItemT const &item, DelimT const &delim, EndT const &end)
+        {
+            return select_list_parse_refactor<EndT>::
+                parse(scan, p, item, delim, end);
+        }
+    };
+
+    template <>
+    struct list_parser_type<plain_parser_category> {
+
+        template <
+            typename ParserT, typename ScannerT,
+            typename ItemT, typename DelimT, typename EndT
+        >
+        static typename parser_result<ParserT, ScannerT>::type
+        parse(ScannerT const& scan, ParserT const& p,
+              ItemT const &item, DelimT const &delim, EndT const &end)
+        {
+            return select_list_parse_no_refactor<EndT>::
+                parse(scan, p, item, delim, end);
+        }
+    };
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/regex.ipp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/impl/regex.ipp
new file mode 100644 (file)
index 0000000..655c1e5
--- /dev/null
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REGEX_IPP
+#define BOOST_SPIRIT_REGEX_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+inline const char* rx_prefix(char) { return "\\A"; }
+inline const wchar_t* rx_prefix(wchar_t) { return L"\\A"; }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  rx_parser class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT = char>
+class rx_parser : public parser<rx_parser<CharT> > {
+
+public:
+    typedef std::basic_string<CharT> string_t;
+    typedef rx_parser<CharT> self_t;
+
+    rx_parser(CharT const *first, CharT const *last)
+    { 
+        rxstr = string_t(rx_prefix(CharT())) + string_t(first, last); 
+    }
+
+    rx_parser(CharT const *first)
+    { 
+        rxstr = string_t(rx_prefix(CharT())) + 
+            string_t(first, impl::get_last(first)); 
+    }
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        boost::match_results<typename ScannerT::iterator_t> what;
+        boost::regex_search(scan.first, scan.last, what, rxstr,
+            boost::match_default);
+
+        if (!what[0].matched)
+            return scan.no_match();
+
+        scan.first = what[0].second;
+        return scan.create_match(what[0].length(), nil_t(),
+            what[0].first, scan.first);
+    }
+
+private:
+#if BOOST_VERSION >= 013300
+    boost::basic_regex<CharT> rxstr;       // regular expression to match
+#else
+    boost::reg_expression<CharT> rxstr;    // regular expression to match
+#endif
+};
+
+}   // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_REGEX_IPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists.hpp
new file mode 100644 (file)
index 0000000..48e9de0
--- /dev/null
@@ -0,0 +1,340 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LISTS_HPP
+#define BOOST_SPIRIT_LISTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/config.hpp>
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+
+#include <boost/spirit/home/classic/utility/lists_fwd.hpp>
+#include <boost/spirit/home/classic/utility/impl/lists.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  list_parser class
+//
+//      List parsers allow to parse constructs like
+//
+//          item >> *(delim >> item)
+//
+//      where 'item' is an auxiliary expression to parse and 'delim' is an
+//      auxiliary delimiter to parse.
+//
+//      The list_parser class also can match an optional closing delimiter
+//      represented by the 'end' parser at the end of the list:
+//
+//          item >> *(delim >> item) >> !end.
+//
+//      If ItemT is an action_parser_category type (parser with an attached
+//      semantic action) we have to do something special. This happens, if the
+//      user wrote something like:
+//
+//          list_p(item[f], delim)
+//
+//      where 'item' is the parser matching one item of the list sequence and
+//      'f' is a functor to be called after matching one item. If we would do
+//      nothing, the resulting code would parse the sequence as follows:
+//
+//          (item[f] - delim) >> *(delim >> (item[f] - delim))
+//
+//      what in most cases is not what the user expects.
+//      (If this _is_ what you've expected, then please use one of the list_p
+//      generator functions 'direct()', which will inhibit re-attaching
+//      the actor to the item parser).
+//
+//      To make the list parser behave as expected:
+//
+//          (item - delim)[f] >> *(delim >> (item - delim)[f])
+//
+//      the actor attached to the 'item' parser has to be re-attached to the
+//      *(item - delim) parser construct, which will make the resulting list
+//      parser 'do the right thing'.
+//
+//      Additionally special care must be taken, if the item parser is a
+//      unary_parser_category type parser as
+//
+//          list_p(*anychar_p, ',')
+//
+//      which without any refactoring would result in
+//
+//          (*anychar_p - ch_p(','))
+//              >> *( ch_p(',') >> (*anychar_p - ch_p(',')) )
+//
+//      and will not give the expected result (the first *anychar_p will eat up
+//      all the input up to the end of the input stream). So we have to
+//      refactor this into:
+//
+//          *(anychar_p - ch_p(','))
+//              >> *( ch_p(',') >> *(anychar_p - ch_p(',')) )
+//
+//      what will give the correct result.
+//
+//      The case, where the item parser is a combination of the two mentioned
+//      problems (i.e. the item parser is a unary parser  with an attached
+//      action), is handled accordingly too:
+//
+//          list_p((*anychar_p)[f], ',')
+//
+//      will be parsed as expected:
+//
+//          (*(anychar_p - ch_p(',')))[f]
+//              >> *( ch_p(',') >> (*(anychar_p - ch_p(',')))[f] ).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+    typename ItemT, typename DelimT, typename EndT, typename CategoryT
+>
+struct list_parser :
+    public parser<list_parser<ItemT, DelimT, EndT, CategoryT> > {
+
+    typedef list_parser<ItemT, DelimT, EndT, CategoryT> self_t;
+    typedef CategoryT parser_category_t;
+
+    list_parser(ItemT const &item_, DelimT const &delim_,
+        EndT const& end_ = no_list_endtoken())
+    : item(item_), delim(delim_), end(end_)
+    {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+        return impl::list_parser_type<CategoryT>
+            ::parse(scan, *this, item, delim, end);
+    }
+
+private:
+    typename as_parser<ItemT>::type::embed_t item;
+    typename as_parser<DelimT>::type::embed_t delim;
+    typename as_parser<EndT>::type::embed_t end;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  List parser generator template
+//
+//      This is a helper for generating a correct list_parser<> from
+//      auxiliary parameters. There are the following types supported as
+//      parameters yet: parsers, single characters and strings (see
+//      as_parser<> in meta/as_parser.hpp).
+//
+//      The list_parser_gen by itself can be used for parsing comma separated
+//      lists without item formatting:
+//
+//          list_p.parse(...)
+//              matches any comma separated list.
+//
+//      If list_p is used with one parameter, this parameter is used to match
+//      the delimiter:
+//
+//          list_p(';').parse(...)
+//              matches any semicolon separated list.
+//
+//      If list_p is used with two parameters, the first parameter is used to
+//      match the items and the second parameter matches the delimiters:
+//
+//          list_p(uint_p, ',').parse(...)
+//              matches comma separated unsigned integers.
+//
+//      If list_p is used with three parameters, the first parameter is used
+//      to match the items, the second one is used to match the delimiters and
+//      the third one is used to match an optional ending token sequence:
+//
+//          list_p(real_p, ';', eol_p).parse(...)
+//              matches a semicolon separated list of real numbers optionally
+//              followed by an end of line.
+//
+//      The list_p in the previous examples denotes the predefined parser
+//      generator, which should be used to define list parsers (see below).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename CharT = char>
+struct list_parser_gen :
+    public list_parser<kleene_star<anychar_parser>, chlit<CharT> >
+{
+    typedef list_parser_gen<CharT> self_t;
+
+// construct the list_parser_gen object as an list parser for comma separated
+// lists without item formatting.
+    list_parser_gen()
+    : list_parser<kleene_star<anychar_parser>, chlit<CharT> >
+        (*anychar_p, chlit<CharT>(','))
+    {}
+
+// The following generator functions should be used under normal circumstances.
+// (the operator()(...) functions)
+
+    // Generic generator functions for creation of concrete list parsers, which
+    // support 'normal' syntax:
+    //
+    //      item >> *(delim >> item)
+    //
+    // If item isn't given, everything between two delimiters is matched.
+
+    template<typename DelimT>
+    list_parser<
+        kleene_star<anychar_parser>,
+        typename as_parser<DelimT>::type,
+        no_list_endtoken,
+        unary_parser_category      // there is no action to re-attach
+    >
+    operator()(DelimT const &delim_) const
+    {
+        typedef kleene_star<anychar_parser> item_t;
+        typedef typename as_parser<DelimT>::type delim_t;
+
+        typedef
+            list_parser<item_t, delim_t, no_list_endtoken, unary_parser_category>
+            return_t;
+
+        return return_t(*anychar_p, as_parser<DelimT>::convert(delim_));
+    }
+
+    template<typename ItemT, typename DelimT>
+    list_parser<
+        typename as_parser<ItemT>::type,
+        typename as_parser<DelimT>::type,
+        no_list_endtoken,
+        typename as_parser<ItemT>::type::parser_category_t
+    >
+    operator()(ItemT const &item_, DelimT const &delim_) const
+    {
+        typedef typename as_parser<ItemT>::type item_t;
+        typedef typename as_parser<DelimT>::type delim_t;
+        typedef list_parser<item_t, delim_t, no_list_endtoken,
+                BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
+            return_t;
+
+        return return_t(
+            as_parser<ItemT>::convert(item_),
+            as_parser<DelimT>::convert(delim_)
+        );
+    }
+
+    // Generic generator function for creation of concrete list parsers, which
+    // support 'extended' syntax:
+    //
+    //      item >> *(delim >> item) >> !end
+
+    template<typename ItemT, typename DelimT, typename EndT>
+    list_parser<
+        typename as_parser<ItemT>::type,
+        typename as_parser<DelimT>::type,
+        typename as_parser<EndT>::type,
+        typename as_parser<ItemT>::type::parser_category_t
+    >
+    operator()(
+        ItemT const &item_, DelimT const &delim_, EndT const &end_) const
+    {
+        typedef typename as_parser<ItemT>::type item_t;
+        typedef typename as_parser<DelimT>::type delim_t;
+        typedef typename as_parser<EndT>::type end_t;
+
+        typedef list_parser<item_t, delim_t, end_t,
+                BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
+            return_t;
+
+        return return_t(
+            as_parser<ItemT>::convert(item_),
+            as_parser<DelimT>::convert(delim_),
+            as_parser<EndT>::convert(end_)
+        );
+    }
+
+// The following functions should be used, if the 'item' parser has an attached
+// semantic action or is a unary_parser_category type parser and the structure
+// of the resulting list parser should _not_ be refactored during parser
+// construction (see comment above).
+
+    // Generic generator function for creation of concrete list parsers, which
+    // support 'normal' syntax:
+    //
+    //      item >> *(delim >> item)
+
+    template<typename ItemT, typename DelimT>
+    list_parser<
+        typename as_parser<ItemT>::type,
+        typename as_parser<DelimT>::type,
+        no_list_endtoken,
+        plain_parser_category        // inhibit action re-attachment
+    >
+    direct(ItemT const &item_, DelimT const &delim_) const
+    {
+        typedef typename as_parser<ItemT>::type item_t;
+        typedef typename as_parser<DelimT>::type delim_t;
+        typedef list_parser<item_t, delim_t, no_list_endtoken,
+                plain_parser_category>
+            return_t;
+
+        return return_t(
+            as_parser<ItemT>::convert(item_),
+            as_parser<DelimT>::convert(delim_)
+        );
+    }
+
+    // Generic generator function for creation of concrete list parsers, which
+    // support 'extended' syntax:
+    //
+    //      item >> *(delim >> item) >> !end
+
+    template<typename ItemT, typename DelimT, typename EndT>
+    list_parser<
+        typename as_parser<ItemT>::type,
+        typename as_parser<DelimT>::type,
+        typename as_parser<EndT>::type,
+        plain_parser_category        // inhibit action re-attachment
+    >
+    direct(
+        ItemT const &item_, DelimT const &delim_, EndT const &end_) const
+    {
+        typedef typename as_parser<ItemT>::type item_t;
+        typedef typename as_parser<DelimT>::type delim_t;
+        typedef typename as_parser<EndT>::type end_t;
+
+        typedef
+            list_parser<item_t, delim_t, end_t, plain_parser_category>
+            return_t;
+
+        return return_t(
+            as_parser<ItemT>::convert(item_),
+            as_parser<DelimT>::convert(delim_),
+            as_parser<EndT>::convert(end_)
+        );
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Predefined list parser generator
+//
+//      The list_p parser generator can be used
+//        - by itself for parsing comma separated lists without item formatting
+//      or
+//        - for generating list parsers with auxiliary parser parameters
+//          for the 'item', 'delim' and 'end' subsequences.
+//      (see comment above)
+//
+///////////////////////////////////////////////////////////////////////////////
+const list_parser_gen<> list_p = list_parser_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/lists_fwd.hpp
new file mode 100644 (file)
index 0000000..1defcb6
--- /dev/null
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LISTS_FWD_HPP)
+#define BOOST_SPIRIT_LISTS_FWD_HPP
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    struct no_list_endtoken;
+
+    template <
+        typename ItemT, typename DelimT, typename EndT = no_list_endtoken,
+        typename CategoryT = plain_parser_category
+    >
+    struct list_parser;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/loops.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/loops.hpp
new file mode 100644 (file)
index 0000000..97fc1d3
--- /dev/null
@@ -0,0 +1,317 @@
+/*=============================================================================
+    Copyright (c) 1998-2003 Joel de Guzman
+    Copyright (c) 2002 Raghavendra Satish
+    Copyright (c) 2002 Jeff Westfahl
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LOOPS_HPP)
+#define BOOST_SPIRIT_LOOPS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  fixed_loop class
+    //
+    //      This class takes care of the construct:
+    //
+    //          repeat_p (exact) [p]
+    //
+    //      where 'p' is a parser and 'exact' is the number of times to
+    //      repeat. The parser iterates over the input exactly 'exact' times.
+    //      The parse function fails if the parser does not match the input
+    //      exactly 'exact' times.
+    //
+    //      This class is parametizable and can accept constant arguments
+    //      (e.g. repeat_p (5) [p]) as well as references to variables (e.g.
+    //      repeat_p (ref (n)) [p]).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename ParserT, typename ExactT>
+    class fixed_loop
+    : public unary<ParserT, parser <fixed_loop <ParserT, ExactT> > >
+    {
+    public:
+
+        typedef fixed_loop<ParserT, ExactT>     self_t;
+        typedef unary<ParserT, parser<self_t> >  base_t;
+
+        fixed_loop (ParserT const & subject_, ExactT const & exact)
+        : base_t(subject_), m_exact(exact) {}
+
+        template <typename ScannerT>
+        typename parser_result <self_t, ScannerT>::type
+        parse (ScannerT const & scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = scan.empty_match();
+            std::size_t n = m_exact;
+
+            for (std::size_t i = 0; i < n; ++i)
+            {
+                if (result_t next = this->subject().parse(scan))
+                {
+                    scan.concat_match(hit, next);
+                }
+                else
+                {
+                    return scan.no_match();
+                }
+            }
+
+            return hit;
+        }
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+    private:
+
+        ExactT m_exact;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //
+    //  finite_loop class
+    //
+    //      This class takes care of the construct:
+    //
+    //          repeat_p (min, max) [p]
+    //
+    //      where 'p' is a parser, 'min' and 'max' specifies the minimum and
+    //      maximum iterations over 'p'. The parser iterates over the input
+    //      at least 'min' times and at most 'max' times. The parse function
+    //      fails if the parser does not match the input at least 'min' times
+    //      and at most 'max' times.
+    //
+    //      This class is parametizable and can accept constant arguments
+    //      (e.g. repeat_p (5, 10) [p]) as well as references to variables
+    //      (e.g. repeat_p (ref (n1), ref (n2)) [p]).
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+    template <typename ParserT, typename MinT, typename MaxT>
+    class finite_loop
+    : public unary<ParserT, parser<finite_loop<ParserT, MinT, MaxT> > >
+    {
+    public:
+
+        typedef finite_loop <ParserT, MinT, MaxT> self_t;
+        typedef unary<ParserT, parser<self_t> >   base_t;
+
+        finite_loop (ParserT const & subject_, MinT const & min, MaxT const & max)
+        : base_t(subject_), m_min(min), m_max(max) {}
+
+        template <typename ScannerT>
+        typename parser_result <self_t, ScannerT>::type
+        parse(ScannerT const & scan) const
+        {
+            BOOST_SPIRIT_ASSERT(m_min <= m_max);
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = scan.empty_match();
+
+            std::size_t n1 = m_min;
+            std::size_t n2 = m_max;
+
+            for (std::size_t i = 0; i < n2; ++i)
+            {
+                typename ScannerT::iterator_t save = scan.first;
+                result_t next = this->subject().parse(scan);
+                if (!next)
+                {
+                    if (i >= n1)
+                    {
+                        scan.first = save;
+                        break;
+                    }
+                    else
+                    {
+                        return scan.no_match();
+                    }
+                }
+
+                scan.concat_match(hit, next);
+            }
+
+            return hit;
+        }
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+    private:
+
+        MinT    m_min;
+        MaxT    m_max;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //
+    //  infinite_loop class
+    //
+    //      This class takes care of the construct:
+    //
+    //          repeat_p (min, more) [p]
+    //
+    //      where 'p' is a parser, 'min' is the minimum iteration over 'p'
+    //      and more specifies that the iteration should proceed
+    //      indefinitely. The parser iterates over the input at least 'min'
+    //      times and continues indefinitely until 'p' fails or all of the
+    //      input is parsed. The parse function fails if the parser does not
+    //      match the input at least 'min' times.
+    //
+    //      This class is parametizable and can accept constant arguments
+    //      (e.g. repeat_p (5, more) [p]) as well as references to variables
+    //      (e.g. repeat_p (ref (n), more) [p]).
+    //
+    ///////////////////////////////////////////////////////////////////////////////
+
+    struct more_t {};
+    more_t const more = more_t ();
+
+    template <typename ParserT, typename MinT>
+    class infinite_loop
+     : public unary<ParserT, parser<infinite_loop<ParserT, MinT> > >
+    {
+    public:
+
+        typedef infinite_loop <ParserT, MinT>   self_t;
+        typedef unary<ParserT, parser<self_t> > base_t;
+
+        infinite_loop (
+            ParserT const& subject_,
+            MinT const& min,
+            more_t const&
+        )
+        : base_t(subject_), m_min(min) {}
+
+        template <typename ScannerT>
+        typename parser_result <self_t, ScannerT>::type
+        parse(ScannerT const & scan) const
+        {
+            typedef typename parser_result<self_t, ScannerT>::type result_t;
+            result_t hit = scan.empty_match();
+            std::size_t n = m_min;
+
+            for (std::size_t i = 0; ; ++i)
+            {
+                typename ScannerT::iterator_t save = scan.first;
+                result_t next = this->subject().parse(scan);
+
+                if (!next)
+                {
+                    if (i >= n)
+                    {
+                        scan.first = save;
+                        break;
+                    }
+                    else
+                    {
+                        return scan.no_match();
+                    }
+                }
+
+                scan.concat_match(hit, next);
+            }
+
+            return hit;
+        }
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename match_result<ScannerT, nil_t>::type type;
+        };
+
+        private:
+
+        MinT m_min;
+    };
+
+    template <typename ExactT>
+    struct fixed_loop_gen
+    {
+        fixed_loop_gen (ExactT const & exact)
+        : m_exact (exact) {}
+
+        template <typename ParserT>
+        fixed_loop <ParserT, ExactT>
+        operator[](parser <ParserT> const & subject_) const
+        {
+            return fixed_loop <ParserT, ExactT> (subject_.derived (), m_exact);
+        }
+
+        ExactT m_exact;
+    };
+
+    namespace impl {
+
+        template <typename ParserT, typename MinT, typename MaxT>
+        struct loop_traits
+        {
+            typedef typename mpl::if_<
+                boost::is_same<MaxT, more_t>,
+                infinite_loop<ParserT, MinT>,
+                finite_loop<ParserT, MinT, MaxT>
+            >::type type;
+        };
+
+    } // namespace impl
+
+    template <typename MinT, typename MaxT>
+    struct nonfixed_loop_gen
+    {
+       nonfixed_loop_gen (MinT min, MaxT max)
+        : m_min (min), m_max (max) {}
+
+       template <typename ParserT>
+       typename impl::loop_traits<ParserT, MinT, MaxT>::type
+       operator[](parser <ParserT> const & subject_) const
+       {
+           typedef typename impl::loop_traits<ParserT, MinT, MaxT>::type ret_t;
+           return ret_t(
+                subject_.derived(),
+                m_min,
+                m_max);
+       }
+
+       MinT m_min;
+       MaxT m_max;
+    };
+
+    template <typename ExactT>
+    fixed_loop_gen <ExactT>
+    repeat_p(ExactT const & exact)
+    {
+        return fixed_loop_gen <ExactT> (exact);
+    }
+
+    template <typename MinT, typename MaxT>
+    nonfixed_loop_gen <MinT, MaxT>
+    repeat_p(MinT const & min, MaxT const & max)
+    {
+        return nonfixed_loop_gen <MinT, MaxT> (min, max);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // #if !defined(BOOST_SPIRIT_LOOPS_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/regex.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/regex.hpp
new file mode 100644 (file)
index 0000000..e8286d5
--- /dev/null
@@ -0,0 +1,112 @@
+/*=============================================================================
+    Copyright (c) 2002-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REGEX_HPP
+#define BOOST_SPIRIT_REGEX_HPP
+
+#include <boost/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Include the regular expression library of boost (Boost.Regex)
+//
+//  Note though, that this library is not distributed with Spirit. You have to
+//  obtain a separate copy from http://www.boost.org.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_NO_REGEX_LIB) && BOOST_VERSION < 103300
+//
+//  Include all the Boost.regex library. Please note that this will not work,
+//  if you are using the boost/spirit/regex.hpp header from more than one
+//  translation units.
+//
+#define BOOST_REGEX_NO_LIB
+#define BOOST_REGEX_STATIC_LINK
+#define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#include <boost/regex.hpp>
+#include <boost/regex/src.cpp>
+
+#else
+//
+//  Include the Boost.Regex headers only. Note, that you will have to link your
+//  application against the Boost.Regex library as described in the related
+//  documentation.
+//  This is the only way for Boost newer than V1.32.0
+//
+#include <boost/regex.hpp>
+#endif // defined(BOOST_SPIRIT_NO_REGEX_LIB)
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#include <boost/spirit/home/classic/core/parser.hpp>
+#include <boost/spirit/home/classic/utility/impl/regex.ipp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+///////////////////////////////////////////////////////////////////////////////
+// rxstrlit class
+template <typename CharT = char>
+struct rxstrlit : public parser<rxstrlit<CharT> > {
+
+    typedef rxstrlit self_t;
+
+    rxstrlit(CharT const *first, CharT const *last)
+    : rx(first, last) {}
+    rxstrlit(CharT const *first)
+    : rx(first) {}
+
+    template <typename ScannerT>
+    typename parser_result<self_t, ScannerT>::type
+    parse(ScannerT const& scan) const
+    {
+    //  Due to limitations in the boost::regex library the iterators wrapped in
+    //  the ScannerT object should be at least bidirectional iterators. Plain
+    //  forward iterators do not work here.
+        typedef typename ScannerT::iterator_t iterator_t;
+        typedef
+            typename boost::detail::iterator_traits<iterator_t>::iterator_category
+            iterator_category;
+
+        BOOST_STATIC_ASSERT((
+            boost::is_convertible<iterator_category,
+                std::bidirectional_iterator_tag>::value
+        ));
+
+        typedef typename parser_result<self_t, ScannerT>::type result_t;
+        return impl::contiguous_parser_parse<result_t>(rx, scan, scan);
+    }
+
+private:
+    impl::rx_parser<CharT> rx;   // contains the boost regular expression parser
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Generator functions
+template <typename CharT>
+inline rxstrlit<CharT>
+regex_p(CharT const *first)
+{ return rxstrlit<CharT>(first); }
+
+//////////////////////////////////
+template <typename CharT>
+inline rxstrlit<CharT>
+regex_p(CharT const *first, CharT const *last)
+{ return rxstrlit<CharT>(first, last); }
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+#endif // BOOST_SPIRIT_REGEX_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/rule_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/rule_parser.hpp
new file mode 100644 (file)
index 0000000..08aba69
--- /dev/null
@@ -0,0 +1,1142 @@
+/*==============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+// The comment below contains a unnamed 'namespace {', which is flagged by the
+// Boost inspect tool as a violation of common C++ programming rules. Since it's
+// in a comment, well, we switch it off :-P
+// boostinspect:nounnamed
+
+//
+// About:
+// =====
+//
+// Using a typeof operator or Boost.Typeof to automatically set the type of
+// variables (as done in the Spirit example demonstrating typeof) is by far not
+// all we can do to tighten up our grammars as there are some significant
+// drawbacks of this approach:
+// - the types complexity scales with the complexity of the grammar (sooner or
+//   later hitting the limits of the compiler),
+// - recursive grammars are not possible, and
+// - all parser objects are embedded by value.
+//
+// The Spirit documentation therefore recommends creating custom parser classes
+// (derived from the a sub_grammar template):
+//
+//   http://www.boost.org/libs/spirit/doc/techniques.html#no_rules
+//   http://www.boost.org/libs/spirit/doc/techniques.html#typeof
+//
+// In practice manually applying this technique leads to rather lengthy code and
+// overthis requires the user to have a solid understanding of Spirit details.
+//
+// Here is a generalized, macro-based approach to easily create typeof-based
+// grammars that can be recursive and arbitrarily complex.
+//
+//
+// Quick manual:
+// ============
+//
+// 1. Setup
+//
+// Before the rule parser macro (the protagonist of the facility) can be used
+// the user must define the macro BOOST_SPIRIT__NAMESPACE (note the double
+// underscore characeter) and setup a registration group for Boost.Typeof.
+//
+// Examples:
+//
+//   // should come after regular #includeS
+//   #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+//   // [...]
+//
+//   #define BOOST_SPIRIT__NAMESPACE (2,(my_project, my_module))
+//   //                             | |     +- outer     +- inner
+//   //                  ! space ! -+ |         namespace    namespace
+//   //                               |
+//   //                               +--- number of nested namespaces
+//
+//   namespace my_project { namespace my_module {
+//
+//   // [...]
+//
+//  ---
+//
+//   // should come after regular #includeS
+//   #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+//   // [...]
+//
+//   #define BOOST_SPIRIT__NAMESPACE (2,(my_project, (anonymous) ))
+//
+//   namespace my_project { namespace {
+//
+//   // [...]
+//
+//  ---
+//
+//   // should come after regular #includeS
+//   #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+//   // [...]
+//
+//
+//   #define BOOST_SPIRIT__NAMESPACE -
+//   // we're working at root namespace
+//
+//
+// Why do I have to do this?
+//
+//   Boost.Typeof needs to assign a unique ID for each registration. This ID is
+//   created composed of the line number and the registration group. The
+//   facility performs Typeof registration and thus requires the source file to
+//   have its own registration group. Further Boost.Typeof requires registration
+//   to happen at root namespace so we have to close and reopen the namespace
+//   we're in.
+//
+//
+// 2. The rule parser macro
+//
+// A simple rule parser definition looks like that:
+//
+//   // we're at namespace scope here
+//
+//   // Skip parser for C/C++ comments and whitespace
+//   BOOST_SPIRIT_RULE_PARSER(skipper,
+//     -,-,-,
+//
+//     +(   confix_p("//",*anychar_p,eol_p)
+//        | confix_p("/*",*anychar_p,"*/")
+//        | space_p
+//     )
+//   )
+//
+// Now we can use 'skipper' in other Spirit expressions.
+//
+// The code above creates a parser (template) class 'skpper_t' and (in this
+// case, because there are no parameters) a static const instance 'skipper' of
+// that class. The class is automatically registered with Boost.Typeof. The type
+// name our parser is skipper_t here.
+//
+//
+// 2.1. Parametrized rule parsers
+//
+// Rule parser definitions can have parameters.
+//
+// Parameters are passed to the BOOST_SPIRIT_RULE_PARSER macro as its second
+// argument (just pass '-' if there are no parameters) with the following
+// format:
+//
+//   (N,( param1,param2, / ... / paramN ))
+//    +-- number of parameters
+//
+// Example of a whole rule parser:
+//
+//   BOOST_SPIRIT_RULE_PARSER(new_name,
+//     (1,( symbol_table )),-,-,
+//
+//     lexeme_d[ (alpha_p >> *alnum_p)[ symbol_table.add ] ]
+//   )
+//
+// The expression 'new_name(my_symbols)' parses a string literal and adds it to
+// the symbol table 'my_symbols'.
+//
+// The rule parser macro creates a function template as called 'new_name' that
+// takes one parameter of deduced reference type and returns a specialization of
+// 'new_name_t' in this case.
+//
+// Since parsers that require to be fast and lightweight often also require to
+// be reentrant, it's quite common to pass in some semantic controller (the
+// symbol table in the example above).
+// However, parameters are templated so they can be anything (including parsers
+// of course) so refactoring tasks can be abstracted with rule parsers as well.
+//
+//   BOOST_SPIRIT_RULE_PARSER(enumeration_parser,
+//     (2,( element_parser, delimiter_parser )),-,-,
+//
+//     element_parser >> *(delimiter_parser >> element_parser)
+//   )
+//
+// The expression 'enumeration_parser(int_p[ some_action ], ',')' creates a
+// parser for a comma-separated list of integers.
+//
+//
+// 2.2. Rule parsrs and semantic actions
+//
+// While semantic actions can be globally attached to a rule parser or passed
+// to a parametrized rule parser as (part of) an argument, even more control is
+// possible by using action placeholders. E.g:
+//
+//   BOOST_SPIRIT_ACTION_PLACEHOLDER(int_action)
+//
+//   BOOST_SPIRIT_RULE_PARSER(int_list,
+//     -,(1,( int_action )),-,
+//
+//     int_p[ int_action ] >> *(',' >> int_p[ int_action ])
+//   )
+//
+// The expression 'int_list[ my_action ]' parses a comma separated list of
+// integers and calls 'my_action' for every integer parsed therein.
+//
+// Of course multiple actions can be attached to one placeholder as usual (in
+// this case 'int_list[ my_action1 ][ my_action2 ] would call two actions).
+//
+// Further there can be multiple action placeholders for a single rule parser:
+//
+//   BOOST_SPIRIT_ACTION_PLACEHOLDER(feed_int)
+//   BOOST_SPIRIT_ACTION_PLACEHOLDER(next_int)
+//
+//   BOOST_SPIRIT_RULE_PARSER(int_list,
+//     -,(2,( feed_int, next_int )),-,
+//
+//     int_p[ feed_int ] >> *(',' >> int_p[ next_int ][ feed_int ])
+//   )
+//
+// The expression 'int_list[ (feed_int = my_action1), (next_int = my_action2) ]'
+// creates a parser for a comma separated list of integers with the actions
+// attached appropriately.
+//
+//   int_list[ feed_int = my_action1,my_action2, next_int = my_action3 ]
+//
+// works too (in this case the action placeholder 'feed_int' has two actions
+// attached to it).
+//
+// You can both override and append actions associated with an action
+// placeholder:
+//
+//   var = int_list[ feed_int = my_action1, next_int = my_action2 ]
+//
+//   // [...]
+//
+//   ... var[ feed_int = another_action ]
+//   // 'another_action' overrides the actions previously attached to 'feed_int'
+//
+//   ... var[ next_int += another_action ]
+//   // 'another_action' is appended to the list of actions attached to
+//   // 'next_int'
+//
+// Action placeholders are not entirely for free -- they add to the size and the
+// initialization time of the rule parser. However, the impact on an already
+// initialized rule parser instance should be quite small.
+//
+//
+// 2.3. Member variables
+//
+// You can add member variables to the rule parser class using the third
+// parameter of the rule parser macro:
+//
+//   BOOST_SPIRIT_RULE_PARSER( calc,
+//     -,
+//     -,
+//     (3,( ((subrule<0>),expression,()),
+//          ((subrule<1>),term,()),
+//          ((subrule<2>),factor,() )) ),
+//
+//     // [...]
+//
+// adds three subrules to the rule parser.
+// Each parameter must have the following type to allow commas to be handled
+// safely from within the preprocessing code:
+//
+//   ((type)),name,(constructor argument(s)))
+//
+//
+// 2.4. The opaque rule parser
+//
+// Rule parsers usually are templates. Building large grammars pushes the
+// compiler really hard (and eventually to its limits) because of the
+// metafunction complexity involved.
+// If a rule parser without parameters and action placeholders is defined, a
+// non-template class is created. Non-templated rule parsers can also be created
+// explicitly by using BOOST_SPIRIT_OPAQUE_RULE_PARSER.
+// Opaque rule parsers can have parameters and member variables (note: no action
+// placeholders are possible). The parameters of an opaque rule parsers are
+// strictly typed, e.g:
+//
+//   BOOST_SPIRIT_OPAQUE_RULE_PARSER(new_identifier,
+//     (1,( ((my_symbol_table_t &),symbol_table) ))
+//     ,-,
+//     (alpha_p >> *alnum_p) [ symbol_table.add ]
+//   )
+//
+// Note it's also possible to have opaque rule parsers accept parameters of
+// non-const reference types which is not possible with regular rule parsers.
+//
+//
+// 3. Utilities for by-reference embedding
+//
+// When using parsers mutiple times or recursively it can be helpful to embed
+// them by-reference into the final parser expression.
+// For this purpose the library provides a wrapper template 'parser_reference'.
+// There is also a function template to create a wrapped parser which can deduce
+// the parser's type from its argument.
+//
+// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
+#if !defined(BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED)
+#   define BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED
+//==============================================================================
+// Dependencies
+//==============================================================================
+#   include <boost/config.hpp>
+#   include <boost/detail/workaround.hpp>
+#   include <boost/call_traits.hpp>
+#   include <boost/typeof/typeof.hpp>
+#   include <boost/spirit/home/classic/namespace.hpp>
+#   include <boost/spirit/home/classic/core/parser.hpp>
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/seq/seq.hpp>
+#   include <boost/preprocessor/seq/for_each_i.hpp>
+#   include <boost/preprocessor/tuple/eat.hpp>
+#   include <boost/preprocessor/tuple/to_seq.hpp>
+#   include <boost/preprocessor/array/size.hpp>
+#   include <boost/preprocessor/control/if.hpp>
+#   include <boost/preprocessor/control/iif.hpp>
+#   include <boost/preprocessor/control/expr_iif.hpp>
+#   include <boost/preprocessor/logical/or.hpp>
+#   include <boost/preprocessor/logical/nor.hpp>
+#   include <boost/preprocessor/logical/not.hpp>
+#   include <boost/preprocessor/logical/compl.hpp>
+#   include <boost/preprocessor/arithmetic/inc.hpp>
+#   include <boost/preprocessor/arithmetic/dec.hpp>
+#   include <boost/preprocessor/arithmetic/add.hpp>
+#   include <boost/preprocessor/detail/is_unary.hpp>
+#   include <boost/preprocessor/detail/is_binary.hpp>
+#   include <boost/preprocessor/repetition/repeat.hpp>
+#   include <boost/preprocessor/repetition/enum_params.hpp>
+#   include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#   include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#   include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#   include <boost/preprocessor/punctuation/comma.hpp>
+#   include <boost/preprocessor/punctuation/comma_if.hpp>
+#   include <boost/preprocessor/facilities/empty.hpp>
+#   include <boost/preprocessor/facilities/identity.hpp>
+#   include <boost/preprocessor/facilities/intercept.hpp>
+//==============================================================================
+// Interface
+//==============================================================================
+// Creates a rule parser. Use at namespace scope.
+#   define BOOST_SPIRIT_RULE_PARSER(name,params,actions,members,rule)          \
+      BOOST_SPIRIT_RP_IMPL_I(name,params,actions,members,rule)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Creates a non-templated rule parser. Use at namespace scope.
+#   define BOOST_SPIRIT_OPAQUE_RULE_PARSER(name,params,members,rule)           \
+      BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,params,members,rule)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Defines an action placeholder. Use at namespace scope.
+#   define BOOST_SPIRIT_ACTION_PLACEHOLDER(name)                               \
+      BOOST_SPIRIT_RP_AP_IMPL(name,::BOOST_SPIRIT_CLASSIC_NS::type_of)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Utilities to embed parsers by reference.
+namespace boost
+{
+  namespace spirit
+  {
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    template<class P> class parser_reference;
+    template<class P> parser_reference<P> embed_by_reference(parser<P> const &);
+
+    BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+  }
+}
+//==============================================================================
+// Implementation
+//==============================================================================
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_REGISTER_TEMPLATE
+//
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+#   define BOOST_SPIRIT_RP_REGISTER_TEMPLATE(name,params)                      \
+      BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-)                 \
+    BOOST_TYPEOF_REGISTER_TEMPLATE(                                            \
+        BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name,       \
+        params)                                                                \
+      BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_REGISTER_TYPE
+//
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+#   define BOOST_SPIRIT_RP_REGISTER_TYPE(name)                                 \
+      BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-)                 \
+    BOOST_TYPEOF_REGISTER_TYPE(                                                \
+        BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name )      \
+      BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_IMPL
+//
+// The action placeholder definition
+#   define BOOST_SPIRIT_RP_AP_IMPL(name,ns)                                    \
+      namespace __action_placeholder                                           \
+      {                                                                        \
+        struct name                                                            \
+        {                                                                      \
+          template<typename Action>                                            \
+          ns :: action_chain< name, ns :: replace, Action>                     \
+          operator=(Action const & __a) const                                  \
+          { return ns :: action_chain< name, ns :: replace, Action>(__a); }    \
+                                                                               \
+          template<typename Action>                                            \
+          ns :: action_chain< name, ns :: append, Action>                      \
+          operator+=(Action const & __a) const                                 \
+          { return ns :: action_chain< name, ns :: append, Action> (__a); }    \
+        };                                                                     \
+      }                                                                        \
+      __action_placeholder:: name const name = __action_placeholder:: name ();
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_I
+//
+// Does some precalculation so RP_IMPL_II can look cleaner
+#   define BOOST_SPIRIT_RP_IMPL_I(name,pars,acts,mbrs,expr)                    \
+      BOOST_SPIRIT_RP_IMPL_II(name, name ## _t ,                               \
+                              pars, BOOST_SPIRIT_RP_ARRAY_SIZE(pars),          \
+                              acts, BOOST_SPIRIT_RP_ARRAY_SIZE(acts),          \
+                              mbrs, BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs), expr)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_II
+#   define BOOST_SPIRIT_RP_IMPL_II(name,name_t,pars,np,acts,na,mbrs,nm,x)      \
+      BOOST_PP_IIF(BOOST_PP_OR(np,na),BOOST_SPIRIT_RP_IMPL_III,                \
+                                      BOOST_SPIRIT_RP_OPAQUE_IMPL_II)          \
+                                         (name,name_t,pars,np,acts,na,mbrs,nm,x)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_III
+//
+// The rule parser definition
+#   define BOOST_SPIRIT_RP_IMPL_III(name,name_t,pars,np,acts,na,mbrs,nm,x)     \
+                                                                               \
+      template< BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,typename __,1) >          \
+      class name_t                                                             \
+        : public ::BOOST_SPIRIT_CLASSIC_NS::parser< name_t                     \
+                       < BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,__,0) > >        \
+      {                                                                        \
+        class __rule                                                           \
+        {                                                                      \
+          BOOST_SPIRIT_RP_EMIT(PM_STATIC,pars,__T)                             \
+          BOOST_SPIRIT_RP_EMIT(AP_STATIC,acts,-)                               \
+          BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_IDENTITY(typename))     \
+        public:                                                                \
+          BOOST_TYPEOF_NESTED_TYPEDEF_TPL(__expr,                              \
+            ::BOOST_SPIRIT_CLASSIC_NS::type_of::depend_on_type<__Dummy>(x) )   \
+        };                                                                     \
+                                                                               \
+      public:                                                                  \
+                                                                               \
+        typedef name_t self_t;                                                 \
+        typedef typename __rule::__expr::type::parser_category_t               \
+                                                           parser_category_t;  \
+                                                                               \
+        BOOST_PP_EXPR_IIF(BOOST_PP_NOR(np,na),typedef self_t const & embed_t;) \
+                                                                               \
+      protected:                                                               \
+                                                                               \
+        BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_IDENTITY(typename))    \
+        BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_EXTRA_MBRS,2)(np,na)                \
+                                                                               \
+        typename __rule::__expr::type::embed_t __parser;                       \
+                                                                               \
+      public:                                                                  \
+                                                                               \
+        explicit name_t ( BOOST_SPIRIT_RP_CTOR(PARAMS,pars,np,acts) )          \
+          : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-)                     \
+          BOOST_PP_COMMA_IF(nm)                                                \
+          BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4)(INIT_LIST,pars,np,acts)\
+            __parser(x)                                                        \
+        { }                                                                    \
+                                                                               \
+        name_t( name_t const & that)                                           \
+          : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that)             \
+          BOOST_PP_COMMA_IF(nm)                                                \
+          BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4)                        \
+                                                 (COPY_INIT_LIST,pars,np,acts) \
+            __parser(that.__parser)                                            \
+        { }                                                                    \
+                                                                               \
+        template<typename Scanner> struct result                               \
+        {                                                                      \
+          typedef typename ::BOOST_SPIRIT_CLASSIC_NS::parser_result<                     \
+                           typename __rule::__expr::type, Scanner>::type type; \
+        };                                                                     \
+                                                                               \
+        template<typename Scanner>                                             \
+        typename ::BOOST_SPIRIT_CLASSIC_NS::parser_result<self_t, Scanner>::type         \
+        parse(Scanner const & s) const { return __parser.parse(s); }           \
+                                                                               \
+        BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_HANDLER,5)                          \
+                                  (name_t,np,acts,na,::BOOST_SPIRIT_CLASSIC_NS::type_of) \
+      };                                                                       \
+                                                                               \
+      BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_FUNC,BOOST_SPIRIT_RP_GLOB_VAR)        \
+                                                           (name,name_t,np,na) \
+      BOOST_SPIRIT_RP_REGISTER_TEMPLATE                                        \
+        (name_t,BOOST_PP_INC(BOOST_PP_ADD(np,na)))
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPAQUE_IMPL_I
+//
+#   define BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,pars,mbrs,expr)                  \
+      BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name, name ## _t,                         \
+                                     pars,BOOST_SPIRIT_RP_ARRAY_SIZE(pars),-,-,\
+                                     mbrs,BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs),expr)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPAQUE_IMPL_II
+//
+#   define BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name,name_t,pars,np,_1,_2,mbrs,nm,x) \
+      class name_t;                                                            \
+                                                                               \
+      BOOST_SPIRIT_RP_REGISTER_TYPE(name_t)                                    \
+                                                                               \
+      class name_t                                                             \
+        : public ::BOOST_SPIRIT_CLASSIC_NS::parser< name_t >                             \
+      {                                                                        \
+        class __rule                                                           \
+        {                                                                      \
+          BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_STATIC,pars,-)                        \
+          BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_EMPTY)                  \
+        public:                                                                \
+          BOOST_TYPEOF_NESTED_TYPEDEF(__expr,x)                                \
+        };                                                                     \
+                                                                               \
+      public:                                                                  \
+                                                                               \
+        typedef name_t self_t;                                                 \
+        typedef __rule::__expr::type::parser_category_t parser_category_t;     \
+        BOOST_PP_EXPR_IIF(BOOST_PP_NOT(np),typedef self_t const & embed_t;)    \
+                                                                               \
+      protected:                                                               \
+                                                                               \
+        BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_EMPTY)                 \
+                                                                               \
+        __rule::__expr::type::embed_t __parser;                                \
+                                                                               \
+      public:                                                                  \
+                                                                               \
+        explicit name_t (BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_CTOR_PARAMS,pars,-))   \
+          : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-)                     \
+            BOOST_PP_COMMA_IF(nm) __parser(x)                                  \
+        { }                                                                    \
+                                                                               \
+        name_t(name_t const & that)                                            \
+          : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that)             \
+            BOOST_PP_COMMA_IF(nm) __parser(that.__parser)                      \
+        { }                                                                    \
+                                                                               \
+        template<typename Scanner> struct result                               \
+        {                                                                      \
+          typedef typename ::BOOST_SPIRIT_CLASSIC_NS::parser_result<                     \
+                                   __rule::__expr::type, Scanner>::type type;  \
+        };                                                                     \
+                                                                               \
+        template<typename Scanner>                                             \
+        typename ::BOOST_SPIRIT_CLASSIC_NS::parser_result<self_t, Scanner>::type         \
+        parse(Scanner const & s) const { return __parser.parse(s); }           \
+      };                                                                       \
+                                                                               \
+      BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_OPAQUE,BOOST_SPIRIT_RP_GLOB_OPAQUE)   \
+                                                         (name,name_t,np,pars)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_HANDLER
+//
+// Part of the rule parser definition for handling action placeholders
+#   define BOOST_SPIRIT_RP_AP_HANDLER(name_t,np,acts,na,ns)                    \
+      private:                                                                 \
+        template<typename A> struct __rebound_1st                              \
+        {                                                                      \
+          typedef name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T) ,        \
+            typename ns ::action_concatenator<__A0,A>::type                    \
+            BOOST_PP_COMMA_IF(BOOST_PP_DEC(na))                                \
+            BOOST_PP_ENUM_SHIFTED_PARAMS(na,__A)                               \
+          > type;                                                              \
+        };                                                                     \
+                                                                               \
+        template<typename X> struct __rebound                                  \
+        {                                                                      \
+          typedef name_t <                                                     \
+            void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T)                         \
+            BOOST_SPIRIT_RP_EMIT(AP_REBOUND_TPL_ARGS,acts,X)                   \
+          > type;                                                              \
+        };                                                                     \
+      public:                                                                  \
+        template<typename A>                                                   \
+        typename __rebound_1st<A>::type const operator[](A const & a) const    \
+        {                                                                      \
+          return typename __rebound_1st<A>::type (                             \
+            BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np)                 \
+            ns ::concatenate_actions(__a0,a)                                   \
+            BOOST_PP_COMMA_IF(BOOST_PP_DEC(na))                                \
+            BOOST_PP_ENUM_SHIFTED_PARAMS(na,__a) );                            \
+        }                                                                      \
+        template<class PH, ns ::action_chain_mode M, typename A>               \
+        typename __rebound< ns ::action_chain<PH,M,A> >::type const            \
+        operator[]( ns ::action_chain<PH,M,A> const & x) const                 \
+        {                                                                      \
+          return typename __rebound< ns ::action_chain<PH,M,A> >::type (       \
+            BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np)                 \
+            BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) );                    \
+        }                                                                      \
+        template<class Head, class Tail>                                       \
+        typename __rebound< ns ::action_chains<Head,Tail> >::type const        \
+        operator[]( ns ::action_chains<Head,Tail> const & x) const             \
+        {                                                                      \
+          return typename __rebound< ns ::action_chains<Head,Tail> >::type (   \
+            BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np)                 \
+            BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) );                    \
+        }
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_EXTRA_MBRS
+//
+// Extra members we need for rebinding if there are action placeholders
+#   define BOOST_SPIRIT_RP_AP_EXTRA_MBRS(np,na)                                \
+      private:                                                                 \
+        BOOST_PP_REPEAT(np,BOOST_SPIRIT_RP_PM_MBRS,-)                          \
+        BOOST_PP_REPEAT(na,BOOST_SPIRIT_RP_AP_MBRS,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_PM_MBRS
+//
+// Member variables to remember parameters if there are action placeholder
+#   define BOOST_SPIRIT_RP_PM_MBRS(z,i,d) __T ## i __p ## i ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_MBRS
+//
+// Member variables to remember action placeholder substitutes
+#   define BOOST_SPIRIT_RP_AP_MBRS(z,i,d) __A ## i __a ## i ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_CTOR
+//
+// Expands to a fragment of a constructor (parameters or init-list)
+#   define BOOST_SPIRIT_RP_CTOR(what,pars,np,acts)                             \
+      BOOST_SPIRIT_RP_EMIT(PM_CTOR_ ## what,pars,__T)                          \
+      BOOST_SPIRIT_RP_EMIT(AP_CTOR_ ## what,acts,np)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_CTOR_COMMA
+//
+// RP_CTOR with a trailing comma
+#   define BOOST_SPIRIT_RP_CTOR_COMMA(what,pars,np,acts)                       \
+      BOOST_SPIRIT_RP_CTOR(what,pars,np,acts) ,
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_TPL_PARAMS
+//
+// Expands to the template parameters or arguments of the rule parser template
+#   define BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,prefix,defaults)               \
+      prefix ## Dummy                                                          \
+      BOOST_SPIRIT_RP_EMIT(PM_TEMPLATE_PARAMS,pars,prefix ## T)                \
+      BOOST_SPIRIT_RP_EMIT(AP_TEMPLATE_PARAMS,acts,(prefix ## A,defaults))
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_GEN_FUNC
+//
+// Generator function
+#   define BOOST_SPIRIT_RP_GEN_FUNC(name,name_t,np,na)                         \
+      template< BOOST_PP_ENUM_PARAMS(np,typename T) >                          \
+      inline name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) >               \
+      name( BOOST_PP_ENUM_BINARY_PARAMS(np,T, const & p) )                     \
+      { return name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) >             \
+                 (BOOST_PP_ENUM_PARAMS(np,p) BOOST_PP_ENUM_TRAILING_PARAMS(na, \
+                ::BOOST_SPIRIT_CLASSIC_NS::type_of::nop_functor() BOOST_PP_INTERCEPT) ); \
+      }
+// RP_GEN_OPAQUE
+//
+// non-templated version for opaque rule parsers.
+#   define BOOST_SPIRIT_RP_GEN_OPAQUE(name,name_t,np,pars)                     \
+      inline name_t name( BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_GEN_PARAMS,pars,p))   \
+      { return name_t (BOOST_PP_ENUM_PARAMS(np,p)); }
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_GLOB_VAR
+//
+// Global variable -- used instead of the generator function if there are no
+// parameters
+#   define BOOST_SPIRIT_RP_GLOB_VAR(name,name_t,np,na)                         \
+      static name_t <void> const name = name_t <void>(BOOST_PP_ENUM_PARAMS(na, \
+                ::BOOST_SPIRIT_CLASSIC_NS::type_of::nop_functor() BOOST_PP_INTERCEPT) );
+
+// RP_GLOB_OPAQUE
+//
+// non-templated version for opaque rule parsers.
+#   define BOOST_SPIRIT_RP_GLOB_OPAQUE(name,name_t,np,pars)                    \
+      static name_t const name = name_t () ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// PP_EMIT operations (fragment emittion based on array input)
+
+// - - Namespace handling
+
+// NS_OPEN
+#   define BOOST_SPIRIT_RP__NS_OPEN(r,data,i,elem)                             \
+      namespace BOOST_SPIRIT_RP_OPTIONAL(elem) {
+
+// NS_QUALIFY
+#   define BOOST_SPIRIT_RP__NS_QUALIFY(r,data,i,elem)                          \
+      BOOST_SPIRIT_RP_OPTIONAL(elem ::)
+
+// NS_CLOSE
+#   define BOOST_SPIRIT_RP__NS_CLOSE(r,data,i,elem) }
+
+// - - Parameter handling
+
+// PM_STATIC
+#   define BOOST_SPIRIT_RP__PM_STATIC(r,data,i,elem)                           \
+      static typename ::boost::call_traits< data ## i >::reference elem ;
+
+// PM_CTOR_PARAMS
+#   define BOOST_SPIRIT_RP__PM_CTOR_PARAMS(r,data,i,elem)                      \
+      BOOST_PP_COMMA_IF(i)                                                     \
+      typename ::boost::call_traits< data ## i >::param_type elem
+
+// PM_CTOR_ARGS
+#   define BOOST_SPIRIT_RP__PM_CTOR_ARGS(r,data,i,elem)                        \
+      BOOST_PP_COMMA_IF(i) elem
+
+// PM_CTOR_INIT_LIST
+#   define BOOST_SPIRIT_RP__PM_CTOR_INIT_LIST(r,data,i,elem)                   \
+      BOOST_PP_COMMA_IF(i) __p ## i ( elem )
+
+// PM_CTOR_COPY_INIT_LIST
+#   define BOOST_SPIRIT_RP__PM_CTOR_COPY_INIT_LIST(r,data,i,elem)              \
+      BOOST_PP_COMMA_IF(i) __p ## i ( that. __p ## i )
+
+
+// PM_TEMPLATE_PARAMS
+#   define BOOST_SPIRIT_RP__PM_TEMPLATE_PARAMS(r,data,i,elem) , data ## i
+
+// - strictly typed parameters of the opaque rule_parser
+
+// PM_OPAQUE_STATIC
+#   define BOOST_SPIRIT_RP__PM_OPAQUE_STATIC(r,data,i,elem)                    \
+      static ::boost::call_traits<                                             \
+          BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem))                  \
+        >::reference BOOST_PP_TUPLE_ELEM(2,1,elem) ;
+
+// PM_OPAQUE_CTOR_PARAMS
+#   define BOOST_SPIRIT_RP__PM_OPAQUE_CTOR_PARAMS(r,data,i,elem)               \
+      BOOST_PP_COMMA_IF(i) ::boost::call_traits<                               \
+          BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem))                  \
+        >::param_type BOOST_PP_TUPLE_ELEM(2,1,elem)
+
+// PM_OPAQUE_GEN_PARAMS
+#   define BOOST_SPIRIT_RP__PM_OPAQUE_GEN_PARAMS(r,data,i,elem)                \
+      BOOST_PP_COMMA_IF(i) ::boost::call_traits<                               \
+          BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem))                  \
+        >::param_type data ## i
+
+// - - Member variable handling
+
+// MV_NONSTATIC
+#   define BOOST_SPIRIT_RP__MV_NONSTATIC(r,data,i,elem)                        \
+      data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem))               \
+        BOOST_PP_TUPLE_ELEM(3,1,elem) ;
+
+// MV_STATIC
+#   define BOOST_SPIRIT_RP__MV_STATIC(r,data,i,elem)                           \
+      static data() ::boost::call_traits<                                      \
+            data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem))         \
+        >::reference BOOST_PP_TUPLE_ELEM(3,1,elem) ;
+
+// MV_CTOR_INIT_LIST
+#   define BOOST_SPIRIT_RP__MV_CTOR_INIT_LIST(r,data,i,elem)                   \
+      BOOST_PP_COMMA_IF(i)                                                     \
+      BOOST_PP_TUPLE_ELEM(3,1,elem) BOOST_PP_TUPLE_ELEM(3,2,elem)
+
+// MV_CTOR_COPY_INIT_LIST
+#   define BOOST_SPIRIT_RP__MV_CTOR_COPY_INIT_LIST(r,data,i,elem)              \
+      BOOST_PP_COMMA_IF(i)                                                     \
+      BOOST_PP_TUPLE_ELEM(3,1,elem) (data . BOOST_PP_TUPLE_ELEM(3,1,elem))
+
+// - - Action placeholder handling
+
+// AP_STATIC
+#   define BOOST_SPIRIT_RP__AP_STATIC(r,data,i,elem) static __A ## i & elem ;
+
+// AP_CTOR_PARAMS
+#   define BOOST_SPIRIT_RP__AP_CTOR_PARAMS(r,data,i,elem)                      \
+      BOOST_SPIRIT_RP_COMMA_IF_OR(data,i)                                      \
+      typename ::boost::call_traits< __A ## i >::param_type elem
+
+// AP_CTOR_ARGS
+#   define BOOST_SPIRIT_RP__AP_CTOR_ARGS(r,data,i,elem)                        \
+      BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) elem
+
+// AP_CTOR_INIT_LIST
+#   define BOOST_SPIRIT_RP__AP_CTOR_INIT_LIST(r,data,i,elem)                   \
+      BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( elem )
+
+// AP_CTOR_COPY_INIT_LIST
+#   define BOOST_SPIRIT_RP__AP_CTOR_COPY_INIT_LIST(r,data,i,elem)              \
+      BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( that. __a ## i )
+
+// AP_TEMPLATE_PARAMS
+#   define BOOST_SPIRIT_RP__AP_TEMPLATE_PARAMS(r,data,i,elem)                  \
+      , BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,data),i)                          \
+      BOOST_PP_EXPR_IIF(BOOST_PP_TUPLE_ELEM(2,1,data),                         \
+          = ::BOOST_SPIRIT_CLASSIC_NS::type_of::nop_functor)
+
+// AP_REBOUND_ARGS
+#   define BOOST_SPIRIT_RP__AP_REBOUND_ARGS(r,data,i,elem)                     \
+      BOOST_PP_COMMA_IF(i)                                                     \
+      ::BOOST_SPIRIT_CLASSIC_NS::type_of::get_placeholdee< __action_placeholder:: elem > \
+                                                           ( __a ## i , data )
+
+// AP_REBOUND_TPL_ARGS
+#   define BOOST_SPIRIT_RP__AP_REBOUND_TPL_ARGS(r,data,i,elem)                 \
+      , typename ::BOOST_SPIRIT_CLASSIC_NS::type_of::placeholdee<                        \
+                  __action_placeholder:: elem , __A ## i, data >::type
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// PP_EMIT
+//
+// Performs one of the operations in the above section on an optional array.
+//
+#   define BOOST_SPIRIT_RP_EMIT(op, array, data)                               \
+      BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(BOOST_SPIRIT_RP__ ## op,data,array)
+// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
+// RP_ARRAY_FOR_EACH_I
+//
+// Iterates an optional array. That is you can pass e.g.'-' or 'none' to denote
+// emptiness.
+#   define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(macro,data,optional_array)         \
+      BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array),                         \
+                   BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL,                      \
+                   BOOST_PP_TUPLE_EAT(3))(macro,data,optional_array)
+
+// RP_ARRAY_FOR_EACH_I_IMPL
+#   define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL(macro,data,array)             \
+      BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array),PP_SEQ_FOR_EACH_I,3)       \
+        (macro,data, BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array),            \
+                                        PP_TUPLE_TO_SEQ,2) array)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_ARRAY_SIZE
+//
+// Expands to the size of an "optional array".
+//
+// Examples:
+//
+//   BOOST_SPIRIT_RP_ARRAY_SIZE( (2,(a,b)) ) // 2
+//   BOOST_SPIRIT_RP_ARRAY_SIZE( (0,()) )    // 0
+//   BOOST_SPIRIT_RP_ARRAY_SIZE( none )      // 0
+//   BOOST_SPIRIT_RP_ARRAY_SIZE( - )         // 0
+//
+#   define BOOST_SPIRIT_RP_ARRAY_SIZE(optional_array)                          \
+      BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array),                         \
+                   BOOST_PP_ARRAY_SIZE, 0 BOOST_PP_TUPLE_EAT(1))(optional_array)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPTIONAL
+//
+// Expands to nothing if the argument is parenthesized.
+//
+// Examples:
+//
+//   BOOST_SPIRIT_RP_OPTIONAL( foobar ) // foobar
+//   BOOST_SPIRIT_RP_OPTIONAL( (none) ) // evaluates to nothing
+//
+#   define BOOST_SPIRIT_RP_OPTIONAL(elem)                                      \
+      BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_UNARY(elem)),elem)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_COMMA_IF_OR
+//
+// Expands to nothing if both arguments are zero, otherwise expands to a comma.
+//
+#   define BOOST_SPIRIT_RP_COMMA_IF_OR(a,b)                                    \
+      BOOST_PP_IIF(BOOST_PP_OR(a,b),BOOST_PP_COMMA,BOOST_PP_EMPTY)()
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IF
+//
+//   BOOST_SPIRIT_RP_IF(cond,name,arity)
+//
+// is equivalent to:
+//
+//   BOOST_PP_IF(cond,BOOST_name,BOOST_PP_TUPLE_EAT(arity))
+//
+#   define BOOST_SPIRIT_RP_IF(cond,name,arity) \
+      BOOST_PP_IF(cond,BOOST_ ## name,BOOST_PP_TUPLE_EAT(arity))
+
+//------------------------------------------------------------------------------
+// Wrapper and gernator function to embed a parser by reference
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+  // Wrapper to embed a parser by reference
+
+  template<class P> class parser_reference
+    : public parser< parser_reference<P> >
+  {
+    P const & ref_that;
+  public:
+    parser_reference(P & that)
+    // we allow implicit conversion but forbid temporaries.
+      : ref_that(that)
+    { }
+
+    typedef parser_reference<P>           self_t;
+    typedef self_t const &                embed_t;
+    typedef typename P::parser_category_t parser_category_t;
+
+    template<typename ScannerT> struct result
+    { typedef typename P::BOOST_NESTED_TEMPLATE result<ScannerT>::type type; };
+
+    template<typename ScannerT>
+    typename result<ScannerT>::type
+    parse(ScannerT const & scan) const
+    { return this->ref_that.parse(scan); }
+  };
+
+  template<class P> parser_reference<P>
+  embed_by_reference(::BOOST_SPIRIT_CLASSIC_NS::parser<P> & p)
+  { return p; }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+} } // namespace ::BOOST_SPIRIT_CLASSIC_NS
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::parser_reference, 1)
+
+//------------------------------------------------------------------------------
+// Expression templates for action placeholders.
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace type_of {
+
+  // No-operation functor
+
+  struct nop_functor
+  {
+    template<typename T>
+    bool operator()(T const &) const
+    { return false; }
+    template<typename T, typename U>
+    bool operator()(T const &, U const &) const
+    { return false; }
+
+    typedef bool result_type;
+  };
+
+  // Composite action
+
+  template<typename Action1, typename Action2>
+  class composite_action
+  {
+    Action1 fnc_a1;
+    Action2 fnc_a2;
+  public:
+    composite_action(Action1 const & a1, Action2 const & a2)
+      : fnc_a1(a1), fnc_a2(a2)
+    { }
+
+    template<typename T>
+    void operator()(T const & inp) const
+    { fnc_a1(inp); fnc_a2(inp); }
+
+    template<typename T, typename U>
+    void operator()(T const & inp1, U const inp2) const
+    { fnc_a1(inp1, inp2); fnc_a2(inp1, inp2); }
+  };
+
+  // Action concatenation (and optimize away nop_functorS)
+
+  template<typename Action1, typename Action2>
+  struct action_concatenator
+  {
+    typedef composite_action<Action1,Action2> type;
+
+    static type concatenate(Action1 const & a1, Action2 const & a2)
+    { return composite_action<Action1,Action2>(a1,a2); }
+  };
+  template<typename Action> struct action_concatenator<nop_functor, Action>
+  {
+    typedef Action type;
+
+    static type concatenate(nop_functor const &, Action const & a)
+    { return a; }
+  };
+  template<typename Action> struct action_concatenator<Action, nop_functor>
+  {
+    typedef Action type;
+
+    static type concatenate(Action const & a, nop_functor const &)
+    { return a; }
+  };
+  template<> struct action_concatenator<nop_functor, nop_functor>
+  {
+    typedef nop_functor type;
+
+    static type concatenate(nop_functor const &, nop_functor const &)
+    { return nop_functor(); }
+  };
+
+  template<typename Action1, typename Action2>
+  typename action_concatenator<Action1,Action2>::type
+  concatenate_actions(Action1 const & a1, Action2 const & a2)
+  {
+    return action_concatenator<Action1,Action2>::concatenate(a1,a2);
+  }
+
+  // Action chains
+
+  enum action_chain_mode { replace, append };
+
+  template<class Placeholder, action_chain_mode Mode, typename Action>
+  class action_chain
+  {
+    Action fnc_action;
+  public:
+    action_chain(Action const & a)
+      : fnc_action(a)
+    { }
+
+    typedef Action action_type;
+
+    Action const & action() const { return fnc_action; }
+  };
+
+  // This operator adds actions to an action chain definition
+  template<class PH, action_chain_mode M, typename A1, typename A2>
+  action_chain<PH, M, typename action_concatenator<A1,A2>::type>
+  operator, (action_chain<PH,M,A1> const & chain, A2 const & a)
+  {
+    return action_chain<PH,M,typename action_concatenator<A1,A2>::type>
+        ( concatenate_actions(chain.action(), a) );
+  }
+
+  // Expression template for mutiple action chain assignments
+  template<class ChainOrChains, class LastChain>
+  class action_chains
+  {
+    ChainOrChains obj_head;
+    LastChain     obj_tail;
+  public:
+    action_chains(ChainOrChains const & head, LastChain const & tail)
+      : obj_head(head), obj_tail(tail)
+    { }
+
+    typedef ChainOrChains head_type;
+    typedef LastChain     tail_type;
+
+    head_type const & head() const { return obj_head; }
+    tail_type const & tail() const { return obj_tail; }
+  };
+
+  // Action chain concatenation
+  template<class Head, class Tail>
+  action_chains<Head,Tail> make_chain(Head const & h, Tail const & t)
+  { return action_chains<Head,Tail>(h,t); }
+
+  template<class PH1, action_chain_mode M1, typename A1,
+           class PH2, action_chain_mode M2, typename A2>
+  action_chains< action_chain<PH1,M1,A1>, action_chain<PH2,M2,A2> >
+  operator, (action_chain<PH1,M1,A1> const & h,
+             action_chain<PH2,M2,A2> const & t)
+  { return make_chain(h,t); }
+
+  template<class Head, class Tail,class PH, action_chain_mode M, typename A>
+  action_chains< action_chains<Head,Tail>, action_chain<PH,M,A> >
+  operator, (action_chains<Head,Tail> const & h, action_chain<PH,M,A> const & t)
+  { return make_chain(h,t); }
+
+
+  // Extract the (maybe composite) action associated with an action
+  // placeholders from the chains with a fold algorithm.
+  template<class Placeholder, typename StartAction, class NewChainOrChains>
+  struct placeholdee
+  {
+    typedef StartAction type;
+
+    static type get(StartAction const & a, NewChainOrChains const &)
+    { return a; }
+  };
+
+  template<class Placeholder, // <-- non-deduced
+           typename StartAction, class NewChainOrChains>
+  typename placeholdee<Placeholder,StartAction,NewChainOrChains>::type
+  get_placeholdee(StartAction const & a, NewChainOrChains const & c)
+  { return placeholdee<Placeholder,StartAction,NewChainOrChains>::get(a,c); }
+
+  template<class Placeholder, typename StartAction, class Head, class Tail>
+  struct placeholdee
+            < Placeholder, StartAction, action_chains<Head,Tail> >
+  {
+    typedef typename placeholdee<Placeholder,
+      typename placeholdee<Placeholder,StartAction,Head>::type, Tail >::type
+    type;
+
+    static type get(StartAction const & a, action_chains<Head,Tail> const & c)
+    {
+      return get_placeholdee<Placeholder>(
+        get_placeholdee<Placeholder>(a,c.head()), c.tail() );
+    }
+  };
+
+  template<class Placeholder, typename StartAction, typename A>
+  struct placeholdee
+            < Placeholder, StartAction, action_chain<Placeholder,replace,A> >
+  {
+    typedef A type;
+
+    static type get(StartAction const &,
+                    action_chain<Placeholder,replace,A> const & c)
+    { return c.action(); }
+  };
+
+  template<class Placeholder, typename StartAction, typename A>
+  struct placeholdee
+            < Placeholder, StartAction, action_chain<Placeholder,append,A> >
+  {
+    typedef typename action_concatenator<StartAction,A>::type type;
+
+    static type get(StartAction const & a,
+                    action_chain<Placeholder,append,A> const & c)
+    { return concatenate_actions(a,c.action()); }
+  };
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+} } // namespace ::BOOST_SPIRIT_CLASSIC_NS::type_of
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::type_of::nop_functor)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::type_of::composite_action,2)
+
+//------------------------------------------------------------------------------
+// Misc.utilities
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+namespace type_of {
+
+  // Utility function to create a dependency to a template argument.
+
+  template<typename T, typename X>
+  X const & depend_on_type(X const & x)
+  { return x; }
+
+  // Utility to allow use parenthesized type expressions with commas inside
+  // as a type within macros. Thanks to Dave Abrahams for telling me this nice
+  // trick.
+
+  #define BOOST_SPIRIT_RP_TYPE(x) \
+    ::BOOST_SPIRIT_CLASSIC_NS::type_of::remove_special_fptr \
+      < ::BOOST_SPIRIT_CLASSIC_NS::type_of::special_result & (*) x >::type
+
+  struct special_result;
+
+  template<typename T> struct remove_special_fptr { };
+  template<typename T> struct remove_special_fptr< special_result & (*)(T) >
+  { typedef T type; };
+
+}
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+} } // namespace ::BOOST_SPIRIT_CLASSIC_NS::type_of
+
+//------------------------------------------------------------------------------
+#endif
+//------------------------------------------------------------------------------
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/scoped_lock.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/scoped_lock.hpp
new file mode 100644 (file)
index 0000000..952fd87
--- /dev/null
@@ -0,0 +1,112 @@
+/*=============================================================================
+    Copyright (c) 2003 Martin Wille
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ =============================================================================*/
+#ifndef BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
+#define BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/classic/namespace.hpp>
+#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
+#include <boost/spirit/home/classic/core/composite.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    // scoped_lock_parser class
+    //
+    //      implements locking of a mutex during execution of
+    //      the parse method of an embedded parser
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename MutexT, typename ParserT>
+    struct scoped_lock_parser
+        : public unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >
+    {
+        typedef scoped_lock_parser<MutexT, ParserT> self_t;
+        typedef MutexT      mutex_t;
+        typedef ParserT     parser_t;
+
+        template <typename ScannerT>
+        struct result
+        {
+            typedef typename parser_result<parser_t, ScannerT>::type type;
+        };
+
+        scoped_lock_parser(mutex_t &m, parser_t const &p)
+            : unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >(p)
+            , mutex(m)
+        {}
+
+
+        template <typename ScannerT>
+        typename parser_result<self_t, ScannerT>::type
+        parse(ScannerT const &scan) const
+        {
+            typedef typename  mutex_t::scoped_lock scoped_lock_t;
+            scoped_lock_t lock(mutex);
+            return this->subject().parse(scan);
+        }
+
+        mutex_t &mutex;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    // scoped_lock_parser_gen
+    //
+    //      generator for scoped_lock_parser objects
+    //      operator[] returns scoped_lock_parser according to its argument
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename MutexT>
+    struct scoped_lock_parser_gen
+    {
+        typedef MutexT mutex_t;
+        explicit scoped_lock_parser_gen(mutex_t &m) : mutex(m) {}
+
+        template<typename ParserT>
+        scoped_lock_parser
+        <
+            MutexT,
+            typename as_parser<ParserT>::type
+        >
+        operator[](ParserT const &p) const
+        {
+            typedef ::BOOST_SPIRIT_CLASSIC_NS::as_parser<ParserT> as_parser_t;
+            typedef typename as_parser_t::type parser_t;
+
+            return scoped_lock_parser<mutex_t, parser_t>
+                (mutex, as_parser_t::convert(p));
+        }
+
+        mutex_t &mutex;
+    };
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    // scoped_lock_d parser directive
+    //
+    //      constructs a scoped_lock_parser generator from its argument
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename MutexT>
+    scoped_lock_parser_gen<MutexT>
+    scoped_lock_d(MutexT &mutex)
+    {
+        return scoped_lock_parser_gen<MutexT>(mutex);
+    }
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+#endif // BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/utility/typeof.hpp
new file mode 100644 (file)
index 0000000..9c70619
--- /dev/null
@@ -0,0 +1,150 @@
+/*=============================================================================
+    Copyright (c) 2006 Tobias Schwinger
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTILITY_TYPEOF_HPP)
+#define BOOST_SPIRIT_UTILITY_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/home/classic/namespace.hpp>
+#include <boost/spirit/home/classic/core/typeof.hpp>
+
+#include <boost/spirit/home/classic/utility/escape_char_fwd.hpp>
+#include <boost/spirit/home/classic/utility/confix_fwd.hpp>
+#include <boost/spirit/home/classic/utility/lists_fwd.hpp>
+#include <boost/spirit/home/classic/utility/distinct_fwd.hpp>
+#include <boost/spirit/home/classic/utility/grammar_def_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
+
+    // chset.hpp
+    template<typename CharT> class chset;        
+
+    // functor_parser.hpp
+    template<typename FunctorT> struct functor_parser;
+
+    // loops.hpp
+    template<class ParserT, typename ExactT> class fixed_loop;
+    template<class ParserT, typename MinT, typename MaxT> class finite_loop;
+    template<class ParserT, typename MinT> class infinite_loop;
+
+    // regex.hpp
+    template<typename CharT> struct rxstrlit;
+
+    // flush_multi_pass.hpp
+    class flush_multi_pass_parser;  
+
+    // scoped_lock.hpp
+    template<class MutexT, class ParserT> struct scoped_lock_parser;
+
+BOOST_SPIRIT_CLASSIC_NAMESPACE_END
+
+}} // namespace BOOST_SPIRIT_CLASSIC_NS
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// chset.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::chset,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chset<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chset<wchar_t>)
+
+
+// escape_char.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long)))
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long)))
+
+
+// functor_parser.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::functor_parser,1)
+
+
+// loops.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fixed_loop,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::finite_loop,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::infinite_loop,2)
+
+
+// regex.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit<char>)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit<wchar_t>)
+
+
+// confix.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 6)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::comment_nest_parser, 2)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::is_nested)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::non_nested)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::is_lexeme)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::non_lexeme)
+
+
+// lists.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::no_list_endtoken)
+
+
+// distinct.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::dynamic_distinct_parser,1)
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser<>)
+
+
+// flush_multi_pass.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::flush_multi_pass_parser)
+
+
+// scoped_lock.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scoped_lock_parser,2)
+
+
+// grammar_gen.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def,BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def,12)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT >  9
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 9)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT >  6
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 6)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT >  3
+BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 3)
+#endif
+
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/classic/version.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/classic/version.hpp
new file mode 100644 (file)
index 0000000..77371ed
--- /dev/null
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2001-2003 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_CLASSIC_VERSION_HPP)
+#define SPIRIT_CLASSIC_VERSION_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  This checks, whether the used Boost library is at least V1.32.0
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/version.hpp>
+
+#if BOOST_VERSION < 103200
+#error "Spirit v1.8.x needs at least Boost V1.32.0 to compile successfully."
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  This is the version of the current Spirit distribution
+//
+///////////////////////////////////////////////////////////////////////////////
+#define SPIRIT_VERSION 0x1806
+#define SPIRIT_PIZZA_VERSION SPIRIT_MEGA_VEGGI  // :-)
+
+#endif // defined(SPIRIT_VERSION_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma.hpp
new file mode 100644 (file)
index 0000000..464b5d7
--- /dev/null
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_CORE_MARCH_06_2007_0833PM)
+#define SPIRIT_KARMA_CORE_MARCH_06_2007_0833PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/char.hpp>
+#include <boost/spirit/home/karma/string.hpp>
+#include <boost/spirit/home/karma/numeric.hpp>
+#include <boost/spirit/home/karma/operator.hpp>
+#include <boost/spirit/home/karma/nonterminal.hpp>
+#include <boost/spirit/home/karma/action.hpp>
+#include <boost/spirit/home/karma/directive.hpp>
+#include <boost/spirit/home/karma/auxiliary.hpp>
+#include <boost/spirit/home/karma/binary.hpp>
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/karma/generate_attr.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/what.hpp>
+#include <boost/spirit/home/karma/stream.hpp>
+#include <boost/spirit/home/karma/auto.hpp>
+#include <boost/spirit/home/karma/format.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/action.hpp
new file mode 100644 (file)
index 0000000..dd6208e
--- /dev/null
@@ -0,0 +1,15 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_ACTION_MAR_04_2007_0912AM)
+#define BOOST_SPIRIT_KARMA_ACTION_MAR_04_2007_0912AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/action/action.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/action/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/action/action.hpp
new file mode 100644 (file)
index 0000000..23d621a
--- /dev/null
@@ -0,0 +1,137 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_ACTION_MAR_07_2007_0851AM)
+#define BOOST_SPIRIT_KARMA_ACTION_MAR_07_2007_0851AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/action_dispatch.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+
+    template <typename Subject, typename Action>
+    struct action : unary_generator<action<Subject, Action> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<Subject, Context, Iterator>
+        {};
+
+        action(Subject const& subject, Action f)
+          : subject(subject), f(f) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr_) const
+        {
+            typedef typename attribute<Context, unused_type>::type attr_type;
+            typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+            // create a attribute if none is supplied
+            // this creates a _copy_ of the attribute because the semantic
+            // action will likely change parts of this
+            typedef traits::transform_attribute<
+                typename make_attribute::type, attr_type, domain> transform;
+
+            typename transform::type attr = 
+                traits::pre_transform<domain, attr_type>(make_attribute::call(attr_));
+
+            // call the function, passing the attribute, the context and a bool 
+            // flag that the client can set to false to fail generating.
+            return traits::action_dispatch<Subject>()(f, attr, ctx) && 
+                   subject.generate(sink, ctx, d, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // the action is transparent (does not add any info)
+            return subject.what(context);
+        }
+
+        subject_type subject;
+        Action f;
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma action meta-compiler
+    template <>
+    struct make_component<karma::domain, tag::action>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                remove_const<typename Elements::car_type>::type
+            subject_type;
+
+            typedef typename
+                remove_const<typename Elements::cdr_type::car_type>::type
+            action_type;
+
+            typedef karma::action<subject_type, action_type> type;
+        };
+
+        template <typename Elements>
+        typename result<make_component(Elements, unused_type)>::type
+        operator()(Elements const& elements, unused_type) const
+        {
+            typename result<make_component(Elements, unused_type)>::type
+                result(elements.car, elements.cdr.car);
+            return result;
+        }
+    };
+}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action>
+    struct has_semantic_action<karma::action<Subject, Action> >
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<karma::action<Subject, Action>, Attribute
+      , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto.hpp
new file mode 100644 (file)
index 0000000..0996306
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_AUTO_NOV_29_2009_0324PM)
+#define BOOST_SPIRIT_KARMA_AUTO_NOV_29_2009_0324PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auto/auto.hpp>
+#include <boost/spirit/home/karma/detail/generate_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/auto.hpp
new file mode 100644 (file)
index 0000000..5d1a0a1
--- /dev/null
@@ -0,0 +1,188 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_AUTO_NOV_29_2009_0339PM)
+#define BOOST_SPIRIT_KARMA_AUTO_NOV_29_2009_0339PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/auto/create_generator.hpp>
+#include <boost/mpl/bool.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::auto_>     // enables auto_
+      : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables auto_(...)
+      , terminal_ex<tag::auto_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <>                                         // enables auto_(f)
+    struct use_lazy_terminal<
+        karma::domain, tag::auto_, 1   /*arity*/
+    > : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::auto_;
+#endif
+    using spirit::auto_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct auto_generator
+      : generator<auto_generator<Modifiers> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef spirit::basic_hold_any<char> type;
+        };
+
+        auto_generator(Modifiers const& modifiers)
+          : modifiers_(modifiers) {}
+
+        // auto_generator has an attached attribute
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            return compile<karma::domain>(create_generator<Attribute>(), modifiers_)
+                      .generate(sink, context, d, attr);
+        }
+
+        // this auto_generator has no attribute attached, it needs to have been
+        // initialized from a value/variable
+        template <typename OutputIterator, typename Context
+          , typename Delimiter>
+        static bool
+        generate(OutputIterator&, Context&, Delimiter const&, unused_type)
+        {
+            // It is not possible (doesn't make sense) to use auto_ generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, auto_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("auto_");
+        }
+
+        Modifiers modifiers_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Modifiers>
+    struct lit_auto_generator
+      : generator<lit_auto_generator<T, Modifiers> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        lit_auto_generator(typename add_reference<T>::type t, Modifiers const& modifiers)
+          : t_(t)
+          , generator_(compile<karma::domain>(create_generator<T>(), modifiers))
+        {}
+
+        // auto_generator has an attached attribute
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const&) const
+        {
+            return generator_.generate(sink, context, d, t_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("auto_");
+        }
+
+        typedef typename spirit::result_of::create_generator<T>::type
+            generator_type;
+
+        typedef typename spirit::result_of::compile<
+            karma::domain, generator_type, Modifiers>::type generator_impl_type;
+
+        T t_;
+        generator_impl_type generator_;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        lit_auto_generator& operator= (lit_auto_generator const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // auto_
+    template <typename Modifiers>
+    struct make_primitive<tag::auto_, Modifiers>
+    {
+        typedef auto_generator<Modifiers> result_type;
+
+        result_type operator()(unused_type, Modifiers const& modifiers) const
+        {
+            return result_type(modifiers);
+        }
+    };
+
+    // auto_(...)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::auto_, fusion::vector1<A0> >, Modifiers>
+    {
+        typedef typename add_const<A0>::type const_attribute;
+
+        typedef lit_auto_generator<const_attribute, Modifiers> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Modifiers const& modifiers) const
+        {
+            return result_type(fusion::at_c<0>(term.args), modifiers);
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/create_generator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/create_generator.hpp
new file mode 100644 (file)
index 0000000..7c2551b
--- /dev/null
@@ -0,0 +1,46 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_CREATE_NOV_21_2009_0340PM)
+#define BOOST_SPIRIT_KARMA_CREATE_NOV_21_2009_0340PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auto/meta_create.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct create_generator
+      : spirit::traits::meta_create<karma::domain, T> {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    // Main API function for generator creation from data type
+    template <typename T>
+    typename result_of::create_generator<T>::type
+    create_generator()
+    {
+        return spirit::traits::meta_create<karma::domain, T>::call();
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    // Meta function returning true if create_generator does return a valid
+    // generator for the given type T.
+    template <typename T>
+    struct create_generator_exists
+      : meta_create_exists<karma::domain, T> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/meta_create.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auto/meta_create.hpp
new file mode 100644 (file)
index 0000000..c101a63
--- /dev/null
@@ -0,0 +1,339 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_META_CREATE_NOV_21_2009_0425PM)
+#define BOOST_SPIRIT_KARMA_META_CREATE_NOV_21_2009_0425PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/auto/meta_create.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/variant.hpp>
+#include <boost/optional.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // compatible STL containers
+    template <typename Container>
+    struct meta_create_container
+    {
+        typedef make_unary_proto_expr<
+            typename Container::value_type
+          , proto::tag::dereference, karma::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // String types
+    template <typename String>
+    struct meta_create_string
+    {
+        typedef spirit::standard::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <>
+    struct meta_create_string<wchar_t*>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <>
+    struct meta_create_string<wchar_t const*>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <int N>
+    struct meta_create_string<wchar_t[N]>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <int N>
+    struct meta_create_string<wchar_t const[N]>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <int N>
+    struct meta_create_string<wchar_t(&)[N]>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <int N>
+    struct meta_create_string<wchar_t const(&)[N]>
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    template <typename Traits, typename Allocator>
+    struct meta_create_string<std::basic_string<wchar_t, Traits, Allocator> >
+    {
+        typedef spirit::standard_wide::string_type type;
+        static type const call() { return type(); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Fusion sequences
+    template <typename Sequence>
+    struct meta_create_sequence
+    {
+        // create a mpl sequence from the given fusion sequence
+        typedef typename mpl::fold<
+            typename fusion::result_of::as_vector<Sequence>::type
+          , mpl::vector<>, mpl::push_back<mpl::_, mpl::_>
+        >::type sequence_type;
+
+        typedef make_nary_proto_expr<
+            sequence_type, proto::tag::shift_left, karma::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the default is to use the standard streaming operator unless it's a
+    // STL container or a fusion sequence
+
+    // The default implementation will be chosen if no predefined mapping of
+    // the data type T to a Karma component is defined.
+    struct no_auto_mapping_exists {};
+
+    template <typename T, typename Enable = void>
+    struct meta_create_impl : mpl::identity<no_auto_mapping_exists> {};
+
+    template <typename T>
+    struct meta_create_impl<T
+          , typename enable_if<
+                mpl::and_<
+                    traits::is_container<T>
+                  , mpl::not_<traits::is_string<T> >
+                  , mpl::not_<fusion::traits::is_sequence<T> >
+                > >::type>
+      : meta_create_container<T> {};
+
+    template <typename T>
+    struct meta_create_impl<T
+          , typename enable_if<traits::is_string<T> >::type>
+      : meta_create_string<T> {};
+
+    template <typename T>
+    struct meta_create_impl<T, typename enable_if<
+                spirit::detail::is_fusion_sequence_but_not_proto_expr<T>
+            >::type>
+      : meta_create_sequence<T> {};
+
+    template <typename T, typename Enable = void>
+    struct meta_create : meta_create_impl<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // optional
+    template <typename T>
+    struct meta_create<boost::optional<T> >
+    {
+        typedef make_unary_proto_expr<
+            T, proto::tag::negate, karma::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // alternatives
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct meta_create<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        typedef make_nary_proto_expr<
+            typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types
+          , proto::tag::bitwise_or, karma::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // predefined specializations for primitive components
+
+    // character generator
+    template <>
+    struct meta_create<char>
+    {
+        typedef spirit::standard::char_type type;
+        static type const call() { return type(); }
+    };
+    template <>
+    struct meta_create<signed char>
+    {
+        typedef spirit::standard::char_type type;
+        static type const call() { return type(); }
+    };
+    template <>
+    struct meta_create<wchar_t>
+    {
+        typedef spirit::standard_wide::char_type type;
+        static type const call() { return type(); }
+    };
+
+    template <>
+    struct meta_create<unsigned char>
+    {
+        typedef spirit::standard::char_type type;
+        static type const call() { return type(); }
+    };
+
+    // boolean generator
+    template <>
+    struct meta_create<bool>
+    {
+        typedef spirit::bool_type type;
+        static type call() { return type(); }
+    };
+
+    // integral generators
+    template <>
+    struct meta_create<int>
+    {
+        typedef spirit::int_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<short>
+    {
+        typedef spirit::short_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<long>
+    {
+        typedef spirit::long_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<unsigned int>
+    {
+        typedef spirit::uint_type type;
+        static type call() { return type(); }
+    };
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <>
+    struct meta_create<unsigned short>
+    {
+        typedef spirit::ushort_type type;
+        static type call() { return type(); }
+    };
+#endif
+    template <>
+    struct meta_create<unsigned long>
+    {
+        typedef spirit::ulong_type type;
+        static type call() { return type(); }
+    };
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct meta_create<boost::long_long_type>
+    {
+        typedef spirit::long_long_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<boost::ulong_long_type>
+    {
+        typedef spirit::ulong_long_type type;
+        static type call() { return type(); }
+    };
+#endif
+
+    // floating point generators
+    template <>
+    struct meta_create<float>
+    {
+        typedef spirit::float_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<double>
+    {
+        typedef spirit::double_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<long double>
+    {
+        typedef spirit::long_double_type type;
+        static type call() { return type(); }
+    };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // main customization point for create_generator
+    template <typename T, typename Enable = void>
+    struct create_generator : karma::meta_create<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // dispatch this to the karma related specializations
+    template <typename T>
+    struct meta_create<karma::domain, T>
+      : create_generator<typename spirit::detail::remove_const_ref<T>::type> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Check whether a valid mapping exits for the given data type to a Karma
+    // component
+    template <typename T>
+    struct meta_create_exists<karma::domain, T>
+      : mpl::not_<is_same<
+            karma::no_auto_mapping_exists
+          , typename meta_create<karma::domain, T>::type
+        > > {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary.hpp
new file mode 100644 (file)
index 0000000..da116c5
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_AUXILIARY_MAR_26_2007_1225PM)
+#define BOOST_SPIRIT_KARMA_AUXILIARY_MAR_26_2007_1225PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary/eps.hpp>
+#include <boost/spirit/home/karma/auxiliary/eol.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/attr_cast.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/attr_cast.hpp
new file mode 100644 (file)
index 0000000..2e67b6b
--- /dev/null
@@ -0,0 +1,120 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_ATTR_CAST_SEP_26_2009_0348PM)
+#define SPIRIT_KARMA_ATTR_CAST_SEP_26_2009_0348PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/auxiliary/attr_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // enables attr_cast<>() pseudo generator
+    template <typename Expr, typename Exposed, typename Transformed>
+    struct use_terminal<karma::domain
+          , tag::stateful_tag<Expr, tag::attr_cast, Exposed, Transformed> >
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::attr_cast;
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attr_cast_generator consumes the attribute of subject generator without
+    // generating anything
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Subject>
+    struct attr_cast_generator
+      : unary_generator<attr_cast_generator<Exposed, Transformed, Subject> >
+    {
+        typedef typename result_of::compile<karma::domain, Subject>::type
+            subject_type;
+
+        typedef mpl::int_<subject_type::properties::value> properties;
+
+        typedef typename mpl::eval_if<
+            traits::not_is_unused<Transformed>
+          , mpl::identity<Transformed>
+          , traits::attribute_of<subject_type> >::type 
+        transformed_attribute_type;
+
+        attr_cast_generator(Subject const& subject)
+          : subject(subject) 
+        {
+            // If you got an error_invalid_expression error message here,
+            // then the expression (Subject) is not a valid spirit karma
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Subject);
+        }
+
+        // If Exposed is given, we use the given type, otherwise all we can do
+        // is to guess, so we expose our inner type as an attribute and
+        // deal with the passed attribute inside the parse function.
+        template <typename Context, typename Unused>
+        struct attribute
+          : mpl::if_<traits::not_is_unused<Exposed>, Exposed
+              , transformed_attribute_type>
+        {};
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            typedef traits::transform_attribute<
+                Attribute const, transformed_attribute_type, domain> 
+            transform;
+
+            return compile<karma::domain>(subject).generate(
+                sink, ctx, d, transform::pre(attr));
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("attr_cast"
+              , compile<karma::domain>(subject).what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generator: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Exposed, typename Transformed
+      , typename Modifiers>
+    struct make_primitive<
+        tag::stateful_tag<Expr, tag::attr_cast, Exposed, Transformed>, Modifiers>
+    {
+        typedef attr_cast_generator<Exposed, Transformed, Expr> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            typedef tag::stateful_tag<
+                Expr, tag::attr_cast, Exposed, Transformed> tag_type;
+            using spirit::detail::get_stateful_data;
+            return result_type(get_stateful_data<tag_type>::call(term));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eol.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eol.hpp
new file mode 100644 (file)
index 0000000..3aba64b
--- /dev/null
@@ -0,0 +1,81 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_EOL_JUL_08_2008_1014AM)
+#define BOOST_SPIRIT_KARMA_EOL_JUL_08_2008_1014AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::eol>       // enables eol
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::eol;
+#endif
+    using boost::spirit::eol_type;
+
+    struct eol_generator : primitive_generator<eol_generator>
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const& /*attr*/)
+        {
+            return detail::generate_to(sink, '\n') &&
+                   karma::delimit_out(sink, d);   // always do post-delimiting
+        }
+
+        template <typename Context>
+        info what(Context const& /*context*/) const
+        {
+            return info("eol");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::eol, Modifiers>
+    {
+        typedef eol_generator result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eps.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/eps.hpp
new file mode 100644 (file)
index 0000000..a8c57b3
--- /dev/null
@@ -0,0 +1,137 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_EPS_APRIL_21_2007_0246PM)
+#define BOOST_SPIRIT_KARMA_EPS_APRIL_21_2007_0246PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables eps
+    template <>
+    struct use_terminal<karma::domain, tag::eps>
+      : mpl::true_ {};
+
+    // enables eps(bool-condition)
+    template <typename A0>
+    struct use_terminal<karma::domain
+        , terminal_ex<tag::eps, fusion::vector1<A0> > > 
+      : is_convertible<A0, bool> {};
+
+    // enables lazy eps(f)
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::eps, 1>
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::eps;
+#endif
+    using boost::spirit::eps_type;
+
+    struct eps_generator : primitive_generator<eps_generator>
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const& /*attr*/)
+        {
+            return karma::delimit_out(sink, d); // always do post-delimiting
+        }
+
+        template <typename Context>
+        info what(Context const& /*context*/) const
+        {
+            return info("eps");
+        }
+    };
+
+    struct semantic_predicate : primitive_generator<semantic_predicate>
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        semantic_predicate(bool predicate)
+          : predicate_(predicate) 
+        {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const& /*attr*/) const
+        {
+            // only do post-delimiting when predicate is true
+            return predicate_ && karma::delimit_out(sink, d);
+        }
+
+        template <typename Context>
+        info what(Context const& /*context*/) const
+        {
+            return info("semantic-predicate");
+        }
+
+        bool predicate_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::eps, Modifiers>
+    {
+        typedef eps_generator result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::eps, fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef semantic_predicate result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/auxiliary/lazy.hpp
new file mode 100644 (file)
index 0000000..32d55fa
--- /dev/null
@@ -0,0 +1,267 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_LAZY_MARCH_27_2007_1231PM)
+#define BOOST_SPIRIT_KARMA_LAZY_MARCH_27_2007_1231PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/lazy.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval>
+    struct use_terminal<karma::domain, phoenix::actor<Eval> >  // enables phoenix actors
+        : mpl::true_ {};
+
+    // forward declaration
+    template <typename Terminal, typename Actor, int Arity>
+    struct lazy_terminal;
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    using spirit::lazy;
+    typedef modify<karma::domain> karma_modify;
+
+    namespace detail
+    {
+        template <typename Generator, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool lazy_generate_impl(Generator const& g, OutputIterator& sink
+          , Context& context, Delimiter const& delim
+          , Attribute const& attr, mpl::false_)
+        {
+            return g.generate(sink, context, delim, attr);
+        }
+
+        template <typename Generator, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool lazy_generate_impl(Generator const& g, OutputIterator& sink
+          , Context& context, Delimiter const& delim
+          , Attribute const& attr, mpl::true_)
+        {
+            // If DeducedAuto is false (semantic actions is present), the
+            // component's attribute is unused.
+            return g.generate(sink, context, delim, unused);
+        }
+
+        template <typename Generator, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool lazy_generate_impl_main(Generator const& g, OutputIterator& sink
+          , Context& context, Delimiter const& delim, Attribute const& attr)
+        {
+            // If DeducedAuto is true (no semantic action), we pass the parser's
+            // attribute on to the component.
+            typedef typename traits::has_semantic_action<Generator>::type auto_rule;
+            return lazy_generate_impl(g, sink, context, delim, attr, auto_rule());
+        }
+    }
+
+    template <typename Function, typename Modifiers>
+    struct lazy_generator : generator<lazy_generator<Function, Modifiers> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                boost::result_of<karma_modify(tag::lazy_eval, Modifiers)>::type
+            modifier;
+
+            typedef typename
+                remove_reference<
+                    typename boost::result_of<Function(unused_type, Context)>::type
+                >::type
+            expr_type;
+
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr_type) is not a valid spirit karma
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, expr_type);
+
+            typedef typename
+                result_of::compile<karma::domain, expr_type, modifier>::type
+            generator_type;
+
+            typedef typename
+                traits::attribute_of<generator_type, Context, Iterator>::type
+            type;
+        };
+
+        lazy_generator(Function const& func, Modifiers const& modifiers)
+          : func(func), modifiers(modifiers) {}
+
+        template <
+            typename OutputIterator, typename Context, 
+            typename Delimiter, typename Attribute
+        >
+        bool generate(OutputIterator& sink, Context& context, 
+            Delimiter const& d, Attribute const& attr) const
+        {
+            return detail::lazy_generate_impl_main(
+                compile<karma::domain>(func(unused, context)
+              , karma_modify()(tag::lazy_eval(), modifiers))
+              , sink, context, d, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("lazy"
+              , compile<karma::domain>(func(unused, context)
+                , karma_modify()(tag::lazy_eval(), modifiers))
+                    .what(context)
+            );
+        }
+
+        Function func;
+        Modifiers modifiers;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        lazy_generator& operator= (lazy_generator const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Function, typename Subject, typename Modifiers>
+    struct lazy_directive 
+      : unary_generator<lazy_directive<Function, Subject, Modifiers> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                boost::result_of<karma_modify(tag::lazy_eval, Modifiers)>::type
+            modifier;
+
+            typedef typename
+                remove_reference<
+                    typename boost::result_of<Function(unused_type, Context)>::type
+                >::type
+            directive_expr_type;
+
+            typedef typename
+                proto::result_of::make_expr<
+                    proto::tag::subscript
+                  , directive_expr_type
+                  , Subject
+                >::type
+            expr_type;
+
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr_type) is not a valid spirit karma
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, expr_type);
+
+            typedef typename
+                result_of::compile<karma::domain, expr_type, modifier>::type
+            generator_type;
+
+            typedef typename
+                traits::attribute_of<generator_type, Context, Iterator>::type
+            type;
+        };
+
+        lazy_directive(Function const& function, Subject const& subject
+              , Modifiers const& modifiers)
+          : function(function), subject(subject), modifiers(modifiers) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::lazy_generate_impl_main(compile<karma::domain>(
+                proto::make_expr<proto::tag::subscript>(
+                    function(unused, ctx), subject)
+                  , karma_modify()(tag::lazy_eval(), modifiers))
+                  , sink, ctx, d, attr);
+        }
+
+        template <typename Context>
+        info what(Context& ctx) const
+        {
+            return info("lazy-directive"
+              , compile<karma::domain>(
+                    proto::make_expr<proto::tag::subscript>(
+                        function(unused, ctx), subject)
+                      , karma_modify()(tag::lazy_eval(), modifiers))
+                    .what(ctx)
+            );
+        }
+
+        Function function;
+        Subject subject;
+        Modifiers modifiers;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval, typename Modifiers>
+    struct make_primitive<phoenix::actor<Eval>, Modifiers>
+    {
+        typedef lazy_generator<phoenix::actor<Eval>, Modifiers> result_type;
+        result_type operator()(phoenix::actor<Eval> const& f
+          , Modifiers const& modifiers) const
+        {
+            return result_type(f, modifiers);
+        }
+    };
+
+    template <typename Terminal, typename Actor, int Arity, typename Modifiers>
+    struct make_primitive<lazy_terminal<Terminal, Actor, Arity>, Modifiers>
+    {
+        typedef lazy_generator<Actor, Modifiers> result_type;
+        result_type operator()(
+            lazy_terminal<Terminal, Actor, Arity> const& lt
+          , Modifiers const& modifiers) const
+        {
+            return result_type(lt.actor, modifiers);
+        }
+    };
+
+    template <
+        typename Terminal, typename Actor, int Arity, typename Subject
+      , typename Modifiers>
+    struct make_directive<lazy_terminal<Terminal, Actor, Arity>
+      , Subject, Modifiers>
+    {
+        typedef lazy_directive<Actor, Subject, Modifiers> result_type;
+        result_type operator()(
+            lazy_terminal<Terminal, Actor, Arity> const& lt
+          , Subject const& subject, Modifiers const& modifiers) const
+        {
+            return result_type(lt.actor, subject, modifiers);
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary.hpp
new file mode 100644 (file)
index 0000000..50b8e70
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_BINARY_MAY_04_2007_0859AM)
+#define BOOST_SPIRIT_KARMA_BINARY_MAY_04_2007_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/binary/binary.hpp>
+#include <boost/spirit/home/karma/binary/padding.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/binary.hpp
new file mode 100644 (file)
index 0000000..4f88617
--- /dev/null
@@ -0,0 +1,438 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_BINARY_MAY_04_2007_0904AM)
+#define BOOST_SPIRIT_KARMA_BINARY_MAY_04_2007_0904AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/endian.hpp>
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_ENABLE_BINARY(name)                                      \
+    template <>                                                               \
+    struct use_terminal<karma::domain, tag::name>                             \
+      : mpl::true_ {};                                                        \
+                                                                              \
+    template <typename A0>                                                    \
+    struct use_terminal<karma::domain                                         \
+        , terminal_ex<tag::name, fusion::vector1<A0> > >                      \
+      : mpl::or_<is_integral<A0>, is_enum<A0> > {};                           \
+                                                                              \
+    template <>                                                               \
+    struct use_lazy_terminal<karma::domain, tag::name, 1> : mpl::true_ {};    \
+                                                                              \
+/***/
+
+#define BOOST_SPIRIT_ENABLE_BINARY_IEEE754(name)                              \
+    template<>                                                                \
+    struct use_terminal<karma::domain, tag::name>: mpl::true_ {};             \
+                                                                              \
+    template<typename A0>                                                     \
+    struct use_terminal<karma::domain, terminal_ex<tag::name,                 \
+        fusion::vector1<A0> > >: is_floating_point<A0> {};                    \
+                                                                              \
+    template<>                                                                \
+    struct use_lazy_terminal<karma::domain, tag::name, 1> : mpl::true_ {};    \
+                                                                              \
+/***/
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    BOOST_SPIRIT_ENABLE_BINARY(byte_)                   // enables byte_
+    BOOST_SPIRIT_ENABLE_BINARY(word)                    // enables word
+    BOOST_SPIRIT_ENABLE_BINARY(big_word)                // enables big_word
+    BOOST_SPIRIT_ENABLE_BINARY(little_word)             // enables little_word
+    BOOST_SPIRIT_ENABLE_BINARY(dword)                   // enables dword
+    BOOST_SPIRIT_ENABLE_BINARY(big_dword)               // enables big_dword
+    BOOST_SPIRIT_ENABLE_BINARY(little_dword)            // enables little_dword
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_SPIRIT_ENABLE_BINARY(qword)                   // enables qword
+    BOOST_SPIRIT_ENABLE_BINARY(big_qword)               // enables big_qword
+    BOOST_SPIRIT_ENABLE_BINARY(little_qword)            // enables little_qword
+#endif
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(big_bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(little_bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(bin_double)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(big_bin_double)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(little_bin_double)
+}}
+
+#undef BOOST_SPIRIT_ENABLE_BINARY
+#undef BOOST_SPIRIT_ENABLE_BINARY_IEEE754
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::byte_;
+    using boost::spirit::word;
+    using boost::spirit::big_word;
+    using boost::spirit::little_word;
+    using boost::spirit::dword;
+    using boost::spirit::big_dword;
+    using boost::spirit::little_dword;
+#ifdef BOOST_HAS_LONG_LONG
+    using boost::spirit::qword;
+    using boost::spirit::big_qword;
+    using boost::spirit::little_qword;
+#endif
+    using boost::spirit::bin_float;
+    using boost::spirit::big_bin_float;
+    using boost::spirit::little_bin_float;
+    using boost::spirit::bin_double;
+    using boost::spirit::big_bin_double;
+    using boost::spirit::little_bin_double;
+#endif
+
+    using boost::spirit::byte_type;
+    using boost::spirit::word_type;
+    using boost::spirit::big_word_type;
+    using boost::spirit::little_word_type;
+    using boost::spirit::dword_type;
+    using boost::spirit::big_dword_type;
+    using boost::spirit::little_dword_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using boost::spirit::qword_type;
+    using boost::spirit::big_qword_type;
+    using boost::spirit::little_qword_type;
+#endif
+    using boost::spirit::bin_float_type;
+    using boost::spirit::big_bin_float_type;
+    using boost::spirit::little_bin_float_type;
+    using boost::spirit::bin_double_type;
+    using boost::spirit::big_bin_double_type;
+    using boost::spirit::little_bin_double_type;
+
+    namespace detail
+    {
+        template <int bits>
+        struct integer
+        {
+#ifdef BOOST_HAS_LONG_LONG
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 8 || bits == 16 || bits == 32 || bits == 64,
+                not_supported_binary_size, ());
+#else
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 8 || bits == 16 || bits == 32,
+                not_supported_binary_size, ());
+#endif
+        };
+
+        template <>
+        struct integer<8>
+        {
+            typedef uint_least8_t type;
+        };
+
+        template <>
+        struct integer<16>
+        {
+            typedef uint_least16_t type;
+        };
+
+        template <>
+        struct integer<32>
+        {
+            typedef uint_least32_t type;
+        };
+
+#ifdef BOOST_HAS_LONG_LONG
+        template <>
+        struct integer<64>
+        {
+            typedef uint_least64_t type;
+        };
+#endif
+
+        template <int bits>
+        struct floating_point
+        {
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 32 || bits == 64,
+                not_supported_binary_size, ());
+        };
+
+        template <>
+        struct floating_point<32>
+        {
+            typedef float type;
+        };
+
+        template <>
+        struct floating_point<64>
+        {
+            typedef double type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <BOOST_SCOPED_ENUM(boost::endian::endianness) bits>
+        struct what;
+
+        template <>
+        struct what<boost::endian::endianness::native>
+        {
+            static info is()
+            {
+                return info("native-endian binary");
+            }
+        };
+
+        template <>
+        struct what<boost::endian::endianness::little>
+        {
+            static info is()
+            {
+                return info("little-endian binary");
+            }
+        };
+
+        template <>
+        struct what<boost::endian::endianness::big>
+        {
+            static info is()
+            {
+                return info("big-endian binary");
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct any_binary_generator
+      : primitive_generator<any_binary_generator<T, endian, bits> >
+    {
+        template <typename Context, typename Unused = unused_type>
+        struct attribute: T {};
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr)
+        {
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            // Even if the endian types are not pod's (at least not in the
+            // definition of C++03) it seems to be safe to assume they are.
+            // This allows us to treat them as a sequence of consecutive bytes.
+            boost::endian::endian<endian, typename T::type, bits> p;
+
+#if defined(BOOST_MSVC)
+// warning C4244: 'argument' : conversion from 'const int' to 'foo', possible loss of data
+#pragma warning(push)
+#pragma warning(disable: 4244)
+#endif
+            typedef typename T::type attribute_type;
+            p = traits::extract_from<attribute_type>(attr, context);
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+            unsigned char const* bytes =
+                reinterpret_cast<unsigned char const*>(&p);
+
+            for (unsigned int i = 0; i < sizeof(p); ++i)
+            {
+                if (!detail::generate_to(sink, *bytes++))
+                    return false;
+            }
+            return karma::delimit_out(sink, d);     // always do post-delimiting
+        }
+
+        // this any_byte_director has no parameter attached, it needs to have
+        // been initialized from a direct literal
+        template <
+            typename OutputIterator, typename Context, typename Delimiter>
+        static bool generate(OutputIterator&, Context&, Delimiter const&
+          , unused_type)
+        {
+            // It is not possible (doesn't make sense) to use binary generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator,
+                binary_generator_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return karma::detail::what<endian>::is();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct literal_binary_generator
+      : primitive_generator<literal_binary_generator<T, endian, bits> >
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename V>
+        literal_binary_generator(V const& v)
+        {
+#if defined(BOOST_MSVC)
+// warning C4244: 'argument' : conversion from 'const int' to 'foo', possible loss of data
+#pragma warning(push)
+#pragma warning(disable: 4244)
+#endif
+            data_ = v;
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+        }
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const&) const
+        {
+            // Even if the endian types are not pod's (at least not in the
+            // definition of C++03) it seems to be safe to assume they are
+            // (but in C++0x the endian types _are_ PODs).
+            // This allows us to treat them as a sequence of consecutive bytes.
+            unsigned char const* bytes =
+                reinterpret_cast<unsigned char const*>(&data_);
+
+            for (unsigned int i = 0; i < sizeof(data_type); ++i)
+            {
+                if (!detail::generate_to(sink, *bytes++))
+                    return false;
+            }
+            return karma::delimit_out(sink, d);  // always do post-delimiting
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return karma::detail::what<endian>::is();
+        }
+
+        typedef boost::endian::endian<endian, typename T::type,
+            bits> data_type;
+
+        data_type data_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, BOOST_SCOPED_ENUM(boost::endian::endianness) endian
+          , int bits>
+        struct basic_binary
+        {
+            typedef any_binary_generator<T, endian, bits> result_type;
+
+            result_type operator()(unused_type, unused_type) const
+            {
+                return result_type();
+            }
+        };
+
+        template <typename Modifiers, typename T
+          , BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+        struct basic_binary_literal
+        {
+            typedef literal_binary_generator<T, endian, bits> result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                return result_type(fusion::at_c<0>(term.args));
+            }
+        };
+    }
+
+#define BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(name, endiantype, bits)            \
+    template <typename Modifiers>                                             \
+    struct make_primitive<tag::name, Modifiers>                               \
+      : detail::basic_binary<detail::integer<bits>,                           \
+        boost::endian::endianness::endiantype, bits> {};                      \
+                                                                              \
+    template <typename Modifiers, typename A0>                                \
+    struct make_primitive<terminal_ex<tag::name, fusion::vector1<A0> >        \
+          , Modifiers>                                                        \
+      : detail::basic_binary_literal<Modifiers, detail::integer<bits>         \
+        , boost::endian::endianness::endiantype, bits> {};                    \
+                                                                              \
+    /***/
+
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(byte_, native, 8)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(word, native, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_word, big, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_word, little, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(dword, native, 32)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_dword, big, 32)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_dword, little, 32)
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(qword, native, 64)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_qword, big, 64)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_qword, little, 64)
+#endif
+
+#undef BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE
+
+#define BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(name, endiantype, bits)    \
+    template <typename Modifiers>                                             \
+    struct make_primitive<tag::name, Modifiers>                               \
+      : detail::basic_binary<detail::floating_point<bits>,                    \
+        boost::endian::endianness::endiantype, bits> {};                      \
+                                                                              \
+    template <typename Modifiers, typename A0>                                \
+    struct make_primitive<terminal_ex<tag::name, fusion::vector1<A0> >        \
+          , Modifiers>                                                        \
+      : detail::basic_binary_literal<Modifiers, detail::floating_point<bits>  \
+        , boost::endian::endianness::endiantype, bits> {};                    \
+                                                                              \
+    /***/
+
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(bin_float, native, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(big_bin_float, big, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(little_bin_float, little, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(bin_double, native, 64)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(big_bin_double, big, 64)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(little_bin_double, little, 64)
+
+#undef BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/padding.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/binary/padding.hpp
new file mode 100644 (file)
index 0000000..c5b375c
--- /dev/null
@@ -0,0 +1,115 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_PADDING_MAY_06_2008_0436PM)
+#define BOOST_SPIRIT_KARMA_PADDING_MAY_06_2008_0436PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables pad(...)
+    template <typename A0>
+    struct use_terminal<karma::domain
+        , terminal_ex<tag::pad, fusion::vector1<A0> > > 
+      : mpl::true_ {};
+
+    // enables lazy pad(...)
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::pad, 1>
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::pad;
+#endif
+    using boost::spirit::pad_type;
+
+    struct binary_padding_generator 
+      : primitive_generator<binary_padding_generator>
+    {
+        typedef mpl::int_<generator_properties::tracking> properties;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        binary_padding_generator(int numpadbytes)
+          : numpadbytes_(numpadbytes)
+        {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const& /*attr*/) const
+        {
+            std::size_t count = sink.get_out_count() % numpadbytes_;
+            if (count)
+                count = numpadbytes_ - count;
+
+            bool result = true;
+            while (result && count-- != 0)
+                result = detail::generate_to(sink, '\0');
+
+            if (result)
+                result = karma::delimit_out(sink, d);  // always do post-delimiting
+            return result;
+        }
+
+        template <typename Context>
+        static info what(Context const&)
+        {
+            return info("pad");
+        }
+
+        int numpadbytes_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::pad, fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef binary_padding_generator result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/char.hpp
new file mode 100644 (file)
index 0000000..dd82b7f
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_CHAR_FEB_21_2007_0547PM)
+#define BOOST_SPIRIT_KARMA_CHAR_FEB_21_2007_0547PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/char/char.hpp>
+#include <boost/spirit/home/karma/char/char_class.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char.hpp
new file mode 100644 (file)
index 0000000..0d9b4f6
--- /dev/null
@@ -0,0 +1,547 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2010 Bryce Lelbach
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_CHAR_FEB_21_2007_0543PM)
+#define BOOST_SPIRIT_KARMA_CHAR_FEB_21_2007_0543PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/char_set/basic_chset.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/char/char_generator.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <string>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_terminal<karma::domain
+      , tag::char_code<tag::char_, CharEncoding>        // enables char_
+    > : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<karma::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>    // enables char_('x'), char_("x")
+          , fusion::vector1<A0>
+        >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> > // enables lit('x')
+          , typename enable_if<traits::is_char<A0> >::type>
+      : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0, typename A1>
+    struct use_terminal<karma::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>    // enables char_('a','z')
+          , fusion::vector2<A0, A1>
+        >
+    > : mpl::true_ {};
+
+    template <typename CharEncoding>                    // enables *lazy* char_('x'), char_("x")
+    struct use_lazy_terminal<
+        karma::domain
+      , tag::char_code<tag::char_, CharEncoding>
+      , 1 // arity
+    > : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, char>            // enables 'x'
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, char[2]>         // enables "x"
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, wchar_t>         // enables L'x'
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, wchar_t[2]>      // enables L"x"
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::lit;    // lit('x') is equivalent to 'x'
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  any_char
+    //      generates a single character from the associated attribute
+    //
+    //      Note: this generator has to have an associated attribute
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, typename Tag>
+    struct any_char
+      : char_generator<any_char<CharEncoding, Tag>, CharEncoding, Tag>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef char_type type;
+        };
+
+        // any_char has an attached parameter
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context&) const
+        {
+            ch = CharParam(attr);
+            return true;
+        }
+
+        // any_char has no attribute attached, it needs to have been
+        // initialized from a direct literal
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam&, Context&) const
+        {
+            // It is not possible (doesn't make sense) to use char_ without
+            // providing any attribute, as the generator doesn't 'know' what
+            // character to output. The following assertion fires if this
+            // situation is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(CharParam, char_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("any-char");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  literal_char
+    //      generates a single character given by a literal it was initialized
+    //      from
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, typename Tag, bool no_attribute>
+    struct literal_char
+      : char_generator<literal_char<CharEncoding, Tag, no_attribute>
+          , CharEncoding, Tag>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        literal_char(char_type ch)
+          : ch (spirit::char_class::convert<char_encoding>::to(Tag(), ch)) 
+        {}
+
+        template <typename Context, typename Unused>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, char_type>
+        {};
+
+        // A char_('x') which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        // any_char has an attached parameter
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch_, Context&) const
+        {
+            // fail if attribute isn't matched my immediate literal
+            ch_ = attr;
+            return attr == ch;
+        }
+
+        // A char_('x') without any associated attribute just emits its 
+        // immediate literal
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam& ch_, Context&) const
+        {
+            ch_ = ch;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context const& /*context*/) const
+        {
+            return info("literal-char", char_encoding::toucs4(ch));
+        }
+
+        char_type ch;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // char range generator
+    template <typename CharEncoding, typename Tag>
+    struct char_range
+      : char_generator<char_range<CharEncoding, Tag>, CharEncoding, Tag>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        char_range(char_type from, char_type to)
+          : from(spirit::char_class::convert<char_encoding>::to(Tag(), from))
+          , to(spirit::char_class::convert<char_encoding>::to(Tag(), to)) 
+        {}
+
+        // A char_('a', 'z') which has an associated attribute emits it only if 
+        // it matches the character range, otherwise it fails.
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context&) const
+        {
+            // fail if attribute doesn't belong to character range
+            ch = attr;
+            return (from <= char_type(attr)) && (char_type(attr) <= to);
+        }
+
+        // A char_('a', 'z') without any associated attribute fails compiling
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam&, Context&) const
+        {
+            // It is not possible (doesn't make sense) to use char_ generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(CharParam
+              , char_range_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            info result("char-range", char_encoding::toucs4(from));
+            boost::get<std::string>(result.value) += '-';
+            boost::get<std::string>(result.value) += to_utf8(char_encoding::toucs4(to));
+            return result;
+        }
+
+        char_type from, to;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // character set generator
+    template <typename CharEncoding, typename Tag, bool no_attribute>
+    struct char_set
+      : char_generator<char_set<CharEncoding, Tag, no_attribute>
+          , CharEncoding, Tag>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename Context, typename Unused>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, char_type>
+        {};
+
+        template <typename String>
+        char_set(String const& str)
+        {
+            typedef typename traits::char_type_of<String>::type in_type;
+
+            BOOST_SPIRIT_ASSERT_MSG((
+                (sizeof(char_type) == sizeof(in_type))
+            ), cannot_convert_string, (String));
+
+            typedef spirit::char_class::convert<char_encoding> convert_type;
+
+            char_type const* definition =
+                (char_type const*)traits::get_c_string(str);
+            char_type ch = convert_type::to(Tag(), *definition++);
+            while (ch)
+            {
+                char_type next = convert_type::to(Tag(), *definition++);
+                if (next == '-')
+                {
+                    next = convert_type::to(Tag(), *definition++);
+                    if (next == 0)
+                    {
+                        chset.set(ch);
+                        chset.set('-');
+                        break;
+                    }
+                    chset.set(ch, next);
+                }
+                else
+                {
+                    chset.set(ch);
+                }
+                ch = next;
+            }
+        }
+
+        // A char_("a-z") which has an associated attribute emits it only if 
+        // it matches the character set, otherwise it fails.
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context&) const
+        {
+            // fail if attribute doesn't belong to character set
+            ch = attr;
+            return chset.test(char_type(attr));
+        }
+
+        // A char_("a-z") without any associated attribute fails compiling
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam&, Context&) const
+        {
+            // It is not possible (doesn't make sense) to use char_ generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(CharParam
+               , char_set_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("char-set");
+        }
+
+        support::detail::basic_chset<char_type> chset;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Modifiers, typename Encoding>
+        struct basic_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_char<
+                typename spirit::detail::get_encoding_with_case<
+                    Modifiers, Encoding, lower || upper>::type
+              , typename get_casetag<Modifiers, lower || upper>::type
+              , true>
+            result_type;
+
+            template <typename Char>
+            result_type operator()(Char ch, unused_type) const
+            {
+                return result_type(ch);
+            }
+
+            template <typename Char>
+            result_type operator()(Char const* str, unused_type) const
+            {
+                return result_type(str[0]);
+            }
+        };
+    }
+
+    // literals: 'x', "x"
+    template <typename Modifiers>
+    struct make_primitive<char, Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard> {};
+
+    template <typename Modifiers>
+    struct make_primitive<char const(&)[2], Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard> {};
+
+    // literals: L'x', L"x"
+    template <typename Modifiers>
+    struct make_primitive<wchar_t, Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard_wide> {};
+
+    template <typename Modifiers>
+    struct make_primitive<wchar_t const(&)[2], Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard_wide> {};
+
+    // char_
+    template <typename CharEncoding, typename Modifiers>
+    struct make_primitive<tag::char_code<tag::char_, CharEncoding>, Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef any_char<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename CharEncoding, typename Modifiers, typename A0
+          , bool no_attribute>
+        struct make_char_direct
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type encoding;
+            typedef typename detail::get_casetag<
+                Modifiers, lower || upper>::type tag;
+
+            typedef typename mpl::if_<
+                traits::is_string<A0>
+              , char_set<encoding, tag, no_attribute>
+              , literal_char<encoding, tag, no_attribute>
+            >::type result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                return result_type(fusion::at_c<0>(term.args));
+            }
+        };
+    }
+
+    // char_(...), lit(...)
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<
+                tag::char_code<tag::char_, CharEncoding>
+              , fusion::vector1<A0> >
+          , Modifiers>
+      : detail::make_char_direct<CharEncoding, Modifiers, A0, false>
+    {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_char<A0> >::type>
+      : detail::make_char_direct<
+            typename traits::char_encoding_from_char<
+                typename traits::char_type_of<A0>::type>::type
+          , Modifiers, A0, true>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // char_("x")
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<Char(&)[2]> > // For single char strings
+      , Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef literal_char<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , false
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)[0]);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // char_('a', 'z')
+    template <typename CharEncoding, typename Modifiers, typename A0, typename A1>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<A0, A1>
+        >
+      , Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef char_range<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)
+              , fusion::at_c<1>(term.args));
+        }
+    };
+
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<Char(&)[2], Char(&)[2]> // For single char strings
+        >
+      , Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef char_range<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)[0]
+              , fusion::at_c<1>(term.args)[0]);
+        }
+    };
+}}}   // namespace boost::spirit::karma
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_class.hpp
new file mode 100644 (file)
index 0000000..30858b1
--- /dev/null
@@ -0,0 +1,226 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_CHAR_CLASS_AUG_10_2009_0720AM)
+#define BOOST_SPIRIT_KARMA_CHAR_CLASS_AUG_10_2009_0720AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/char/char_generator.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    // enables alnum, alpha, graph, etc.
+    template <typename CharClass, typename CharEncoding>
+    struct use_terminal<karma::domain
+        , tag::char_code<CharClass, CharEncoding> >
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    // hoist the char classification namespaces into karma sub-namespaces of 
+    // the same name
+    namespace ascii { using namespace boost::spirit::ascii; }
+    namespace iso8859_1 { using namespace boost::spirit::iso8859_1; }
+    namespace standard { using namespace boost::spirit::standard; }
+    namespace standard_wide { using namespace boost::spirit::standard_wide; }
+#if defined(BOOST_SPIRIT_UNICODE)
+    namespace unicode { using namespace boost::spirit::unicode; }
+#endif
+
+    // Import the standard namespace into the karma namespace. This allows 
+    // for default handling of all character/string related operations if not 
+    // prefixed with a character set namespace.
+    using namespace boost::spirit::standard;
+
+    // Import encoding
+    using spirit::encoding;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  char_class
+    //      generates a single character if it matches the given character 
+    //      class
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Tag, typename CharEncoding, typename CharClass>
+    struct char_class
+      : char_generator<
+            char_class<Tag, CharEncoding, CharClass>
+          , CharEncoding, CharClass>
+    {
+        typedef typename Tag::char_encoding char_encoding;
+        typedef typename char_encoding::char_type char_type;
+        typedef typename Tag::char_class classification;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef char_type type;
+        };
+
+        // char_class needs an attached attribute
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context&) const
+        {
+            ch = attr;
+
+            using spirit::char_class::classify;
+            return classify<char_encoding>::is(classification(), attr);
+        }
+
+        // char_class shouldn't be used without any associated attribute
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam&, Context&) const
+        {
+            // It is not possible (doesn't make sense) to use char_ generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(CharParam
+              , char_class_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            typedef spirit::char_class::what<char_encoding> what_;
+            return info(what_::is(classification()));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  space
+    //      generates a single character from the associated parameter
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct any_space
+      : char_generator<any_space<CharEncoding>, CharEncoding, tag::space>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef char_type type;
+        };
+
+        // any_space has an attached parameter
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context&) const
+        {
+            ch = CharParam(attr);
+
+            using spirit::char_class::classify;
+            return classify<char_encoding>::is(tag::space(), attr);
+        }
+
+        // any_space has no attribute attached, use single space character
+        template <typename CharParam, typename Context>
+        bool test(unused_type, CharParam& ch, Context&) const
+        {
+            ch = ' ';
+            return true;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("space");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        template <typename Tag, bool lower = false, bool upper = false>
+        struct make_char_class : mpl::identity<Tag> {};
+
+        template <>
+        struct make_char_class<tag::alpha, true, false> 
+          : mpl::identity<tag::lower> {};
+
+        template <>
+        struct make_char_class<tag::alpha, false, true> 
+          : mpl::identity<tag::upper> {};
+
+        template <>
+        struct make_char_class<tag::alnum, true, false> 
+          : mpl::identity<tag::lowernum> {};
+
+        template <>
+        struct make_char_class<tag::alnum, false, true> 
+          : mpl::identity<tag::uppernum> {};
+    }
+
+    // enables alnum, alpha, graph, etc.
+    template <typename CharClass, typename CharEncoding, typename Modifiers>
+    struct make_primitive<tag::char_code<CharClass, CharEncoding>, Modifiers>
+    {
+        static bool const lower = 
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper = 
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef tag::char_code<
+            typename detail::make_char_class<CharClass, lower, upper>::type
+          , CharEncoding>
+        tag_type;
+
+        typedef char_class<
+            tag_type
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    // space is special
+    template <typename CharEncoding, typename Modifiers>
+    struct make_primitive<tag::char_code<tag::space, CharEncoding>, Modifiers>
+    {
+        typedef any_space<CharEncoding> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+}}}  // namespace boost::spirit::karma
+
+#endif // !defined(BOOST_SPIRIT_KARMA_CHAR_FEB_21_2007_0543PM)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_generator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/char/char_generator.hpp
new file mode 100644 (file)
index 0000000..cabd9f9
--- /dev/null
@@ -0,0 +1,168 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_CHAR_GENERATOR_SEP_07_2009_0417PM)
+#define BOOST_SPIRIT_CHAR_GENERATOR_SEP_07_2009_0417PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::complement> // enables ~
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(char_generator_id)
+    }
+
+    template <typename T>
+    struct is_char_generator : detail::has_char_generator_id<T> {};
+}}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The base char_parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Derived, typename CharEncoding, typename Tag
+      , typename Char = typename CharEncoding::char_type, typename Attr = Char>
+    struct char_generator : primitive_generator<Derived>
+    {
+        typedef CharEncoding char_encoding;
+        typedef Tag tag;
+        typedef Char char_type;
+        struct char_generator_id;
+
+        // if Attr is unused_type, Derived must supply its own attribute
+        // metafunction
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef Attr type;
+        };
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            Attr ch = Attr();
+            if (!this->derived().test(traits::extract_from<Attr>(attr, context), ch, context))
+                return false;
+
+            return karma::detail::generate_to(sink, ch, char_encoding(), tag()) &&
+                   karma::delimit_out(sink, d);       // always do post-delimiting
+        }
+
+        // Requirement: g.test(attr, ch, context) -> bool
+        //
+        //  attr:       associated attribute
+        //  ch:         character to be generated (set by test())
+        //  context:    enclosing rule context
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // negated_char_generator handles ~cg expressions (cg is a char_generator)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Positive>
+    struct negated_char_generator
+      : char_generator<negated_char_generator<Positive>
+          , typename Positive::char_encoding, typename Positive::tag>
+    {
+        negated_char_generator(Positive const& positive)
+          : positive(positive) {}
+
+        template <typename Attribute, typename CharParam, typename Context>
+        bool test(Attribute const& attr, CharParam& ch, Context& context) const
+        {
+            return !positive.test(attr, ch, context);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("not", positive.what(context));
+        }
+
+        Positive positive;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Positive>
+        struct make_negated_char_generator
+        {
+            typedef negated_char_generator<Positive> result_type;
+            result_type operator()(Positive const& positive) const
+            {
+                return result_type(positive);
+            }
+        };
+
+        template <typename Positive>
+        struct make_negated_char_generator<negated_char_generator<Positive> >
+        {
+            typedef Positive result_type;
+            result_type operator()(negated_char_generator<Positive> const& ncg) const
+            {
+                return ncg.positive;
+            }
+        };
+    }
+
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::complement, Elements, Modifiers>
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        subject;
+
+        BOOST_SPIRIT_ASSERT_MSG((
+            traits::is_char_generator<subject>::value
+        ), subject_is_not_negatable, (subject));
+
+        typedef typename
+            detail::make_negated_char_generator<subject>::result_type
+        result_type;
+
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return detail::make_negated_char_generator<subject>()(
+                fusion::at_c<0>(elements));
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_flag.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_flag.hpp
new file mode 100644 (file)
index 0000000..ccaf688
--- /dev/null
@@ -0,0 +1,27 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DELIMIT_FLAG_DEC_02_2009_1201PM)
+#define BOOST_SPIRIT_KARMA_DELIMIT_FLAG_DEC_02_2009_1201PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SCOPED_ENUM_START(delimit_flag) 
+    { 
+        predelimit,         // force predelimiting in generate_delimited()
+        dont_predelimit     // inhibit predelimiting in generate_delimited()
+    };
+    BOOST_SCOPED_ENUM_END
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_out.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/delimit_out.hpp
new file mode 100644 (file)
index 0000000..e72e219
--- /dev/null
@@ -0,0 +1,45 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DELIMIT_FEB_20_2007_1208PM)
+#define BOOST_SPIRIT_KARMA_DELIMIT_FEB_20_2007_1208PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/detail/unused_delimiter.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Do delimiting. This is equivalent to p << d. The function is a
+    //  no-op if spirit::unused is passed as the delimiter-generator.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Delimiter>
+    inline bool delimit_out(OutputIterator& sink, Delimiter const& d)
+    {
+        return d.generate(sink, unused, unused, unused);
+    }
+
+    template <typename OutputIterator>
+    inline bool delimit_out(OutputIterator&, unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Delimiter>
+    inline bool delimit_out(OutputIterator&
+      , detail::unused_delimiter<Delimiter> const&)
+    {
+        return true;
+    }
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/alternative_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/alternative_function.hpp
new file mode 100644 (file)
index 0000000..54906b2
--- /dev/null
@@ -0,0 +1,250 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_ALTERNATIVE_MAR_01_2007_1124AM)
+#define SPIRIT_KARMA_ALTERNATIVE_MAR_01_2007_1124AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/directive/buffer.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/utree/utree_traits_fwd.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/variant.hpp>
+#include <boost/detail/workaround.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  execute a generator if the given Attribute type is compatible
+    ///////////////////////////////////////////////////////////////////////////
+
+    //  this gets instantiated if the Attribute type is _not_ compatible with
+    //  the generator
+    template <typename Component, typename Attribute, typename Expected
+      , typename Enable = void>
+    struct alternative_generate
+    {
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        call(Component const&, OutputIterator&, Context&, Delimiter const&
+          , Attribute const&, bool& failed)
+        {
+            failed = true;
+            return false;
+        }
+    };
+
+    template <typename Component>
+    struct alternative_generate<Component, unused_type, unused_type>
+    {
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        call(Component const& component, OutputIterator& sink, Context& ctx
+          , Delimiter const& d, unused_type, bool&)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            // return true if any of the generators succeed
+            return component.generate(sink, ctx, d, unused);
+        }
+    };
+
+    //  this gets instantiated if there is no Attribute given for the
+    //  alternative generator
+    template <typename Component, typename Expected>
+    struct alternative_generate<Component, unused_type, Expected>
+      : alternative_generate<Component, unused_type, unused_type> {};
+
+    //  this gets instantiated if the generator does not expect to receive an
+    //  Attribute (the generator is self contained).
+    template <typename Component, typename Attribute>
+    struct alternative_generate<Component, Attribute, unused_type>
+      : alternative_generate<Component, unused_type, unused_type> {};
+
+    //  this gets instantiated if the Attribute type is compatible to the
+    //  generator
+    template <typename Component, typename Attribute, typename Expected>
+    struct alternative_generate<Component, Attribute, Expected
+      , typename enable_if<
+            traits::compute_compatible_component<Expected, Attribute, karma::domain> >::type>
+    {
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        call(Component const& component, OutputIterator& sink
+          , Context& ctx, Delimiter const& d, Attribute const& attr, bool&)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            return call(component, sink, ctx, d, attr
+              , spirit::traits::not_is_variant<Attribute, karma::domain>());
+        }
+
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        call(Component const& component, OutputIterator& sink
+          , Context& ctx, Delimiter const& d, Attribute const& attr, mpl::true_)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            return component.generate(sink, ctx, d, attr);
+        }
+
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        call(Component const& component, OutputIterator& sink
+          , Context& ctx, Delimiter const& d, Attribute const& attr, mpl::false_)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            typedef
+                traits::compute_compatible_component<Expected, Attribute, domain>
+            component_type;
+
+            // if we got passed an empty optional, just fail generation
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            // make sure, the content of the passed variant matches our
+            // expectations
+            typename traits::optional_attribute<Attribute>::type attr_ = 
+                traits::optional_value(attr);
+            if (!component_type::is_compatible(spirit::traits::which(attr_)))
+                return false;
+
+            // returns true if any of the generators succeed
+            typedef typename component_type::compatible_type compatible_type;
+            return component.generate(sink, ctx, d
+              , boost::get<compatible_type>(attr_));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  alternative_generate_function: a functor supplied to fusion::any which
+    //  will be executed for every generator in a given alternative generator
+    //  expression
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Context, typename Delimiter,
+        typename Attribute, typename Strict>
+    struct alternative_generate_function
+    {
+        alternative_generate_function(OutputIterator& sink_, Context& ctx_
+              , Delimiter const& d, Attribute const& attr_)
+          : sink(sink_), ctx(ctx_), delim(d), attr(attr_) {}
+
+        template <typename Component>
+        bool operator()(Component const& component)
+        {
+            typedef
+                typename traits::attribute_of<Component, Context>::type
+            expected_type;
+            typedef
+                alternative_generate<Component, Attribute, expected_type>
+            generate;
+
+            // wrap the given output iterator avoid output as long as one
+            // component fails
+            detail::enable_buffering<OutputIterator> buffering(sink);
+            bool r = false;
+            bool failed = false;    // will be ignored
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = generate::call(component, sink, ctx, delim, attr, failed);
+            }
+            if (r) 
+                buffering.buffer_copy();
+            return r;
+        }
+
+        // avoid double buffering
+        template <typename Component>
+        bool operator()(buffer_directive<Component> const& component)
+        {
+            typedef typename 
+                traits::attribute_of<Component, Context>::type
+            expected_type;
+            typedef alternative_generate<
+                buffer_directive<Component>, Attribute, expected_type>
+            generate;
+
+            bool failed = false;    // will be ignored
+            return generate::call(component, sink, ctx, delim, attr, failed);
+        }
+
+        OutputIterator& sink;
+        Context& ctx;
+        Delimiter const& delim;
+        Attribute const& attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        alternative_generate_function& operator= (alternative_generate_function const&);
+    };
+
+    // specialization for strict alternatives
+    template <typename OutputIterator, typename Context, typename Delimiter,
+        typename Attribute>
+    struct alternative_generate_function<
+        OutputIterator, Context, Delimiter, Attribute, mpl::true_>
+    {
+        alternative_generate_function(OutputIterator& sink_, Context& ctx_
+              , Delimiter const& d, Attribute const& attr_)
+          : sink(sink_), ctx(ctx_), delim(d), attr(attr_), failed(false) {}
+
+        template <typename Component>
+        bool operator()(Component const& component)
+        {
+            typedef
+                typename traits::attribute_of<Component, Context>::type
+            expected_type;
+            typedef
+                alternative_generate<Component, Attribute, expected_type>
+            generate;
+
+            if (failed)
+                return false;     // give up when already failed
+
+            // wrap the given output iterator avoid output as long as one
+            // component fails
+            detail::enable_buffering<OutputIterator> buffering(sink);
+            bool r = false;
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = generate::call(component, sink, ctx, delim, attr, failed);
+            }
+            if (r && !failed) 
+            {
+                buffering.buffer_copy();
+                return true;
+            }
+            return false;
+        }
+
+        OutputIterator& sink;
+        Context& ctx;
+        Delimiter const& delim;
+        Attribute const& attr;
+        bool failed;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        alternative_generate_function& operator= (alternative_generate_function const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/as.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/as.hpp
new file mode 100644 (file)
index 0000000..e9dbd8e
--- /dev/null
@@ -0,0 +1,74 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_AS_STRING_DEC_18_0644PM)
+#define BOOST_SPIRIT_KARMA_AS_STRING_DEC_18_0644PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains the attribute to string conversion utility. The 
+    //  utility provided also accept spirit's unused_type; all no-ops. Compiler 
+    //  optimization will easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    inline typename spirit::result_of::attribute_as<T, Attribute>::type
+    as(Attribute const& attr)
+    {
+        return attribute_as<T, Attribute>::call(attr);
+    }
+
+    template <typename T>
+    inline unused_type as(unused_type)
+    {
+        return unused;
+    }
+    
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    inline bool valid_as(Attribute const& attr)
+    {
+        return attribute_as<T, Attribute>::is_valid(attr);
+    }
+
+    template <typename T>
+    inline bool valid_as(unused_type)
+    {
+        return true;
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename T, typename Attribute>
+    struct attribute_as
+      : traits::attribute_as<T, Attribute>
+    {};
+
+    template <typename T>
+    struct attribute_as<T, unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    template <typename T>
+    struct attribute_as<T, unused_type const>
+    {
+        typedef unused_type type;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/attributes.hpp
new file mode 100644 (file)
index 0000000..c63faac
--- /dev/null
@@ -0,0 +1,108 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_DETAIL_ATTRIBUTES_APR_18_2010_0453PM)
+#define SPIRIT_KARMA_DETAIL_ATTRIBUTES_APR_18_2010_0453PM
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Exposed, typename Transformed, typename Enable = void>
+    struct transform_attribute
+    {
+        typedef Transformed type;
+        static Transformed pre(Exposed& val) 
+        { 
+            return Transformed(traits::extract_from<Transformed>(val, unused));
+        }
+        // Karma only, no post() and no fail() required
+    };
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<boost::optional<Exposed> const, Transformed
+      , typename disable_if<is_same<boost::optional<Exposed>, Transformed> >::type>
+    {
+        typedef Transformed const& type;
+        static Transformed const& pre(boost::optional<Exposed> const& val)
+        {
+            return boost::get<Transformed>(val);
+        }
+    };
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const, Attribute>
+    {
+        typedef Attribute const& type;
+        static Attribute const& pre(Attribute const& val) { return val; }
+        // Karma only, no post() and no fail() required
+    };
+
+    // reference types need special handling
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed&, Transformed>
+      : transform_attribute<Exposed, Transformed>
+    {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed const&, Transformed>
+      : transform_attribute<Exposed const, Transformed>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const&, Attribute>
+      : transform_attribute<Attribute const, Attribute>
+    {};
+
+    // unused_type needs some special handling as well
+    template <>
+    struct transform_attribute<unused_type, unused_type>
+    {
+        typedef unused_type type;
+        static unused_type pre(unused_type) { return unused; }
+    };
+
+    template <>
+    struct transform_attribute<unused_type const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type const, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed, Transformed, karma::domain>
+      : karma::transform_attribute<Exposed, Transformed>
+    {};
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/default_width.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/default_width.hpp
new file mode 100644 (file)
index 0000000..52f5583
--- /dev/null
@@ -0,0 +1,75 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DEFAULT_WIDTH_APR_07_2009_0912PM)
+#define BOOST_SPIRIT_KARMA_DEFAULT_WIDTH_APR_07_2009_0912PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The BOOST_KARMA_DEFAULT_FIELD_LENGTH specifies the default field length
+//  to be used for padding.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_KARMA_DEFAULT_FIELD_LENGTH)
+#define BOOST_KARMA_DEFAULT_FIELD_LENGTH 10
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH specifies the default maximal field 
+//  length to be used for the maxwidth directive.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH)
+#define BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH 10
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The BOOST_KARMA_DEFAULT_COLUMNS specifies the default number of columns to
+//  be used with the columns directive.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_KARMA_DEFAULT_COLUMNS)
+#define BOOST_KARMA_DEFAULT_COLUMNS 5
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_width
+    {
+        operator int() const
+        {
+            return BOOST_KARMA_DEFAULT_FIELD_LENGTH;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_max_width
+    {
+        operator int() const
+        {
+            return BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_columns
+    {
+        operator int() const
+        {
+            return BOOST_KARMA_DEFAULT_COLUMNS;
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/enable_lit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/enable_lit.hpp
new file mode 100644 (file)
index 0000000..2153582
--- /dev/null
@@ -0,0 +1,30 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DETAIL_ENABLE_LIT_JAN_06_2011_1009PM)
+#define BOOST_SPIRIT_KARMA_DETAIL_ENABLE_LIT_JAN_06_2011_1009PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    // enables lazy lit(...) for karma
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::lit, 1> 
+      : mpl::true_ {};
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/extract_from.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/extract_from.hpp
new file mode 100644 (file)
index 0000000..558d056
--- /dev/null
@@ -0,0 +1,274 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_EXTRACT_FROM_SEP_30_2009_0732AM)
+#define BOOST_SPIRIT_KARMA_EXTRACT_FROM_SEP_30_2009_0732AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+
+#include <boost/ref.hpp>
+#include <boost/optional.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains attribute extraction utilities. The utilities
+    //  provided also accept spirit's unused_type; all no-ops. Compiler
+    //  optimization will easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // extract first and second element of a fusion sequence
+        template <typename T>
+        struct add_const_ref
+          : add_reference<typename add_const<T>::type>
+        {};
+
+        template <typename T, int N>
+        struct value_at_c
+          : add_const_ref<typename fusion::result_of::value_at_c<T, N>::type>
+        {};
+    }
+
+    // This is the default case: the plain attribute values
+    template <typename Attribute, typename Exposed, typename Enable/*= void*/>
+    struct extract_from_attribute
+    {
+        typedef typename traits::one_element_sequence<Attribute>::type
+            is_one_element_sequence;
+
+        typedef typename mpl::eval_if<
+            is_one_element_sequence
+          , detail::value_at_c<Attribute, 0>
+          , mpl::identity<Attribute const&>
+        >::type type;
+
+        template <typename Context>
+        static type call(Attribute const& attr, Context&, mpl::false_)
+        {
+            return attr;
+        }
+
+        // This handles the case where the attribute is a single element fusion
+        // sequence. We silently extract the only element and treat it as the
+        // attribute to generate output from.
+        template <typename Context>
+        static type call(Attribute const& attr, Context& ctx, mpl::true_)
+        {
+            return extract_from<Exposed>(fusion::at_c<0>(attr), ctx);
+        }
+
+        template <typename Context>
+        static type call(Attribute const& attr, Context& ctx)
+        {
+            return call(attr, ctx, is_one_element_sequence());
+        }
+    };
+
+    // This handles optional attributes.
+    template <typename Attribute, typename Exposed>
+    struct extract_from_attribute<boost::optional<Attribute>, Exposed>
+    {
+        typedef Attribute const& type;
+
+        template <typename Context>
+        static type call(boost::optional<Attribute> const& attr, Context& ctx)
+        {
+            return extract_from<Exposed>(boost::get<Attribute>(attr), ctx);
+        }
+    };
+
+    template <typename Attribute, typename Exposed>
+    struct extract_from_attribute<boost::optional<Attribute const>, Exposed>
+    {
+        typedef Attribute const& type;
+
+        template <typename Context>
+        static type call(boost::optional<Attribute const> const& attr, Context& ctx)
+        {
+            return extract_from<Exposed>(boost::get<Attribute const>(attr), ctx);
+        }
+    };
+
+    // This handles attributes wrapped inside a boost::ref().
+    template <typename Attribute, typename Exposed>
+    struct extract_from_attribute<reference_wrapper<Attribute>, Exposed>
+    {
+        typedef Attribute const& type;
+
+        template <typename Context>
+        static type call(reference_wrapper<Attribute> const& attr, Context& ctx)
+        {
+            return extract_from<Exposed>(attr.get(), ctx);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Exposed, typename Enable>
+    struct extract_from_container
+    {
+        typedef typename traits::container_value<Attribute const>::type
+            value_type;
+        typedef typename is_convertible<value_type, Exposed>::type
+            is_convertible_to_value_type;
+
+        typedef typename mpl::if_<
+           mpl::or_<
+                is_same<value_type, Exposed>, is_same<Attribute, Exposed> >
+          , Exposed const&, Exposed
+        >::type type;
+
+        // handle case where container value type is convertible to result type
+        // we simply return the front element of the container
+        template <typename Context, typename Pred>
+        static type call(Attribute const& attr, Context&, mpl::true_, Pred)
+        {
+            // return first element from container
+            typedef typename traits::container_iterator<Attribute const>::type
+                iterator_type;
+
+            iterator_type it = traits::begin(attr);
+            type result = *it;
+            ++it;
+            return result;
+        }
+
+        // handle strings
+        template <typename Iterator>
+        static void append_to_string(Exposed& result, Iterator begin, Iterator end)
+        {
+            for (Iterator i = begin; i != end; ++i)
+                push_back(result, *i);
+        }
+
+        template <typename Context>
+        static type call(Attribute const& attr, Context&, mpl::false_, mpl::true_)
+        {
+            typedef typename char_type_of<Attribute>::type char_type;
+
+            Exposed result;
+            append_to_string(result, traits::get_begin<char_type>(attr)
+              , traits::get_end<char_type>(attr));
+            return result;
+        }
+
+        // everything else gets just passed through
+        template <typename Context>
+        static type call(Attribute const& attr, Context&, mpl::false_, mpl::false_)
+        {
+            return type(attr);
+        }
+
+        template <typename Context>
+        static type call(Attribute const& attr, Context& ctx)
+        {
+            typedef typename mpl::and_<
+                traits::is_string<Exposed>, traits::is_string<Attribute>
+            >::type handle_strings;
+
+            // return first element from container
+            return call(attr, ctx, is_convertible_to_value_type()
+              , handle_strings());
+        }
+    };
+
+    template <typename Attribute>
+    struct extract_from_container<Attribute, Attribute>
+    {
+        typedef Attribute const& type;
+
+        template <typename Context>
+        static type call(Attribute const& attr, Context&)
+        {
+            return attr;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        // overload for non-container attributes
+        template <typename Exposed, typename Attribute, typename Context>
+        inline typename spirit::result_of::extract_from<Exposed, Attribute>::type
+        extract_from(Attribute const& attr, Context& ctx, mpl::false_)
+        {
+            return extract_from_attribute<Attribute, Exposed>::call(attr, ctx);
+        }
+
+        // overload for containers (but not for variants or optionals
+        // holding containers)
+        template <typename Exposed, typename Attribute, typename Context>
+        inline typename spirit::result_of::extract_from<Exposed, Attribute>::type
+        extract_from(Attribute const& attr, Context& ctx, mpl::true_)
+        {
+            return extract_from_container<Attribute, Exposed>::call(attr, ctx);
+        }
+    }
+
+    template <typename Exposed, typename Attribute, typename Context>
+    inline typename spirit::result_of::extract_from<Exposed, Attribute>::type
+    extract_from(Attribute const& attr, Context& ctx
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || \
+    (defined(__APPLE__) && defined(__INTEL_COMPILER))
+      , typename enable_if<traits::not_is_unused<Attribute> >::type*
+#endif
+    )
+    {
+        typedef typename mpl::and_<
+            traits::is_container<Attribute>
+          , traits::not_is_variant<Attribute>
+          , traits::not_is_optional<Attribute>
+        >::type is_not_wrapped_container;
+
+        return detail::extract_from<Exposed>(attr, ctx
+          , is_not_wrapped_container());
+    }
+
+    template <typename Exposed, typename Context>
+    inline unused_type extract_from(unused_type, Context&)
+    {
+        return unused;
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename Exposed, typename Attribute>
+    struct extract_from
+      : mpl::if_<
+            mpl::and_<
+                traits::is_container<Attribute>
+              , traits::not_is_variant<Attribute>
+              , traits::not_is_optional<Attribute> >
+          , traits::extract_from_container<Attribute, Exposed>
+          , traits::extract_from_attribute<Attribute, Exposed> >::type
+    {};
+
+    template <typename Exposed>
+    struct extract_from<Exposed, unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    template <typename Exposed>
+    struct extract_from<Exposed, unused_type const>
+    {
+        typedef unused_type type;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/fail_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/fail_function.hpp
new file mode 100644 (file)
index 0000000..5310d54
--- /dev/null
@@ -0,0 +1,60 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_SEQUENCE_FEB_28_2007_0249PM)
+#define SPIRIT_KARMA_SEQUENCE_FEB_28_2007_0249PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/config.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    template <typename OutputIterator, typename Context, typename Delimiter>
+    struct fail_function
+    {
+        typedef Context context_type;
+
+        fail_function(OutputIterator& sink_, Context& context_
+            , Delimiter const& delim_)
+          : sink(sink_), ctx(context_), delim(delim_) 
+        {}
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, Attribute const& attr) const
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))  
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            // return true if any of the generators fail
+            return !component.generate(sink, ctx, delim, attr);
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))  
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            // return true if any of the generators fail
+            return !component.generate(sink, ctx, delim, unused);
+        }
+
+        OutputIterator& sink;
+        Context& ctx;
+        Delimiter const& delim;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        fail_function& operator= (fail_function const&);
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate.hpp
new file mode 100644 (file)
index 0000000..7c8b9f4
--- /dev/null
@@ -0,0 +1,131 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DETAIL_GENERATE_FEB_20_2007_0959AM)
+#define BOOST_SPIRIT_KARMA_DETAIL_GENERATE_FEB_20_2007_0959AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/delimit_flag.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct generate_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (Expr) is not a valid spirit karma expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/karma_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct generate_impl<Expr
+      , typename enable_if<traits::matches<karma::domain, Expr> >::type>
+    {
+        template <typename OutputIterator>
+        static bool call(
+            OutputIterator& target_sink
+          , Expr const& expr)
+        {
+            typedef traits::properties_of<
+                typename result_of::compile<karma::domain, Expr>::type
+            > properties;
+
+            // wrap user supplied iterator into our own output iterator
+            output_iterator<OutputIterator
+              , mpl::int_<properties::value> > sink(target_sink);
+            return compile<karma::domain>(expr).
+                generate(sink, unused, unused, unused);
+        }
+
+        template <typename OutputIterator, typename Properties>
+        static bool call(
+            detail::output_iterator<OutputIterator, Properties>& sink
+          , Expr const& expr)
+        {
+            return compile<karma::domain>(expr).
+                generate(sink, unused, unused, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct generate_delimited_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (Expr) is not a valid spirit karma expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/karma_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct generate_delimited_impl<Expr
+      , typename enable_if<traits::matches<karma::domain, Expr> >::type>
+    {
+        template <typename OutputIterator, typename Delimiter>
+        static bool call(
+            OutputIterator& target_sink
+          , Expr const& expr
+          , Delimiter const& delimiter
+          , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
+        {
+            typedef traits::properties_of<
+                typename result_of::compile<karma::domain, Expr>::type
+            > properties;
+            typedef traits::properties_of<
+                typename result_of::compile<karma::domain, Delimiter>::type
+            > delimiter_properties;
+
+            // wrap user supplied iterator into our own output iterator
+            detail::output_iterator<OutputIterator
+              , mpl::int_<properties::value | delimiter_properties::value>
+            > sink(target_sink);
+            return call(sink, expr, delimiter, pre_delimit);
+        }
+
+        template <typename OutputIterator, typename Properties
+          , typename Delimiter>
+        static bool call(
+            detail::output_iterator<OutputIterator, Properties>& sink
+          , Expr const& expr
+          , Delimiter const& delimiter
+          , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the delimiter is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+
+            typename result_of::compile<karma::domain, Delimiter>::type const 
+                delimiter_ = compile<karma::domain>(delimiter);
+
+            if (pre_delimit == delimit_flag::predelimit &&
+                !karma::delimit_out(sink, delimiter_))
+            {
+                return false;
+            }
+            return compile<karma::domain>(expr).
+                generate(sink, unused, delimiter_, unused);
+        }
+    };
+
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_auto.hpp
new file mode 100644 (file)
index 0000000..c11803f
--- /dev/null
@@ -0,0 +1,63 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DETAIL_GENERATE_AUTO_DEC_01_2009_0743PM)
+#define BOOST_SPIRIT_KARMA_DETAIL_GENERATE_AUTO_DEC_01_2009_0743PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/karma/auto/create_generator.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct generate_impl<Expr
+      , typename enable_if<
+            mpl::and_<
+                traits::meta_create_exists<karma::domain, Expr>
+              , mpl::not_<traits::matches<karma::domain, Expr> > >
+        >::type>
+    {
+        template <typename OutputIterator>
+        static bool call(
+            OutputIterator& sink
+          , Expr const& expr)
+        {
+            return karma::generate(sink, create_generator<Expr>(), expr);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct generate_delimited_impl<Expr
+      , typename enable_if<
+            mpl::and_<
+                traits::meta_create_exists<karma::domain, Expr>
+              , mpl::not_<traits::matches<karma::domain, Expr> > >
+        >::type>
+    {
+        template <typename OutputIterator, typename Delimiter>
+        static bool call(
+            OutputIterator& sink
+          , Expr const& expr
+          , Delimiter const& delimiter
+          , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
+        {
+            return karma::generate_delimited(
+                sink, create_generator<Expr>(), delimiter, pre_delimit, expr);
+        }
+    };
+
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_to.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/generate_to.hpp
new file mode 100644 (file)
index 0000000..05c7157
--- /dev/null
@@ -0,0 +1,67 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DETAIL_GENERATE_TO_FEB_20_2007_0417PM)
+#define BOOST_SPIRIT_KARMA_DETAIL_GENERATE_TO_FEB_20_2007_0417PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  These utility functions insert the given parameter into the supplied 
+    //  output iterator.
+    //  If the attribute is spirit's unused_type, this is a no_op.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename OutputIterator, typename Attribute, typename CharEncoding
+      , typename Tag>
+    inline bool 
+    generate_to(OutputIterator& sink, Attribute const& p, CharEncoding, Tag)
+    {
+        *sink = spirit::char_class::convert<CharEncoding>::to(Tag(), p);
+        ++sink;
+        return detail::sink_is_good(sink);
+    }
+
+    template <typename OutputIterator, typename Attribute>
+    inline bool 
+    generate_to(OutputIterator& sink, Attribute const& p, unused_type, unused_type)
+    {
+        *sink = p;
+        ++sink;
+        return detail::sink_is_good(sink);
+    }
+
+    template <typename OutputIterator, typename CharEncoding, typename Tag>
+    inline bool generate_to(OutputIterator&, unused_type, CharEncoding, Tag)
+    {
+        return true;
+    }
+
+    template <typename OutputIterator, typename Attribute>
+    inline bool 
+    generate_to(OutputIterator& sink, Attribute const& p)
+    {
+        *sink = p;
+        ++sink;
+        return detail::sink_is_good(sink);
+    }
+
+    template <typename OutputIterator>
+    inline bool generate_to(OutputIterator&, unused_type)
+    {
+        return true;
+    }
+
+}}}}   // namespace boost::spirit::karma::detail
+
+#endif  // KARMA_CORE_DETAIL_INSERT_TO_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_casetag.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_casetag.hpp
new file mode 100644 (file)
index 0000000..1d5a464
--- /dev/null
@@ -0,0 +1,29 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_GET_CASETAG_JANUARY_19_2009_1107AM)
+#define BOOST_SPIRIT_KARMA_GET_CASETAG_JANUARY_19_2009_1107AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    template <typename Modifiers, bool case_modifier = false>
+    struct get_casetag : mpl::identity<unused_type> {};
+
+    template <typename Modifiers>
+    struct get_casetag<Modifiers, true>
+      : mpl::if_<has_modifier<Modifiers, tag::char_code_base<tag::lower> >
+          , tag::lower, tag::upper> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_stricttag.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/get_stricttag.hpp
new file mode 100644 (file)
index 0000000..5f03c21
--- /dev/null
@@ -0,0 +1,33 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_GET_STRICTTAG_APR_22_2010_1007AM)
+#define BOOST_SPIRIT_KARMA_GET_STRICTTAG_APR_22_2010_1007AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    // the default mode for Karma is 'relaxed'
+    template <
+        typename Modifiers
+      , typename StrictModifier = typename mpl::or_<
+            has_modifier<Modifiers, tag::strict>
+          , has_modifier<Modifiers, tag::relaxed> >::type>
+    struct get_stricttag : mpl::false_ {};
+
+    // strict mode is enforced only when tag::strict is on the modifiers list
+    template <typename Modifiers>
+    struct get_stricttag<Modifiers, mpl::true_>
+      : has_modifier<Modifiers, tag::strict> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/indirect_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/indirect_iterator.hpp
new file mode 100644 (file)
index 0000000..a9f3cc8
--- /dev/null
@@ -0,0 +1,98 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_INDIRECT_ITERATOR_JAN_19_2011_0814PM)
+#define SPIRIT_KARMA_INDIRECT_ITERATOR_JAN_19_2011_0814PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////
+    // This is a wrapper for any iterator allowing to pass a reference of it
+    // to the components of the sequence
+    template <typename Iterator>
+    class indirect_iterator
+      : public boost::iterator_facade<
+            indirect_iterator<Iterator>
+          , typename boost::detail::iterator_traits<Iterator>::value_type
+          , boost::forward_traversal_tag
+          , typename boost::detail::iterator_traits<Iterator>::reference>
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type
+            base_value_type;
+        typedef typename boost::detail::iterator_traits<Iterator>::reference
+            base_reference_type;
+
+        typedef boost::iterator_facade<
+            indirect_iterator<Iterator>, base_value_type
+          , boost::forward_traversal_tag, base_reference_type
+        > base_type;
+
+    public:
+        indirect_iterator(Iterator& iter)
+          : iter_(&iter)
+        {}
+        indirect_iterator(indirect_iterator const& iter)
+          : iter_(iter.iter_)
+        {}
+
+    private:
+        friend class boost::iterator_core_access;
+
+        void increment()
+        {
+            ++*iter_;
+        }
+
+        bool equal(indirect_iterator const& other) const
+        {
+            return *iter_ == *other.iter_;
+        }
+
+        base_reference_type dereference() const
+        {
+            return **iter_;
+        }
+
+    private:
+        Iterator* iter_;
+    };
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Iterator>
+    struct make_indirect_iterator
+    {
+        typedef karma::detail::indirect_iterator<Iterator> type;
+    };
+
+    template <typename Iterator>
+    struct make_indirect_iterator<karma::detail::indirect_iterator<Iterator> >
+    {
+        typedef karma::detail::indirect_iterator<Iterator> type;
+    };
+
+    template <>
+    struct make_indirect_iterator<unused_type const*>
+    {
+        typedef unused_type const* type;
+    };
+
+    template <typename Iterator>
+    struct make_indirect_iterator<Iterator const&>
+      : make_indirect_iterator<Iterator const>
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/output_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/output_iterator.hpp
new file mode 100644 (file)
index 0000000..f49c8a0
--- /dev/null
@@ -0,0 +1,632 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_OUTPUT_ITERATOR_MAY_26_2007_0506PM)
+#define BOOST_SPIRIT_KARMA_OUTPUT_ITERATOR_MAY_26_2007_0506PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <iterator>
+#include <vector>
+#include <algorithm>
+
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/mpl/if.hpp>
+
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/support/iterators/ostream_iterator.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+#if defined(BOOST_MSVC) && defined(BOOST_SPIRIT_UNICODE)
+#include <boost/spirit/home/support/char_encoding/unicode.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace karma { namespace detail 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This class is used to keep track of the current position in the output.
+    ///////////////////////////////////////////////////////////////////////////
+    class position_sink 
+    {
+    public:
+        position_sink() : count(0), line(1), column(1) {}
+        void tidy() { count = 0; line = 1; column = 1; }
+
+        template <typename T>
+        void output(T const& value) 
+        {
+            ++count; 
+            if (value == '\n') {
+                ++line;
+                column = 1;
+            }
+            else {
+                ++column;
+            }
+        }
+        std::size_t get_count() const { return count; }
+        std::size_t get_line() const { return line; }
+        std::size_t get_column() const { return column; }
+
+    private:
+        std::size_t count;
+        std::size_t line;
+        std::size_t column;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct position_policy
+    {
+        position_policy() {}
+        position_policy(position_policy const& rhs) 
+          : track_position_data(rhs.track_position_data) {}
+
+        template <typename T>
+        void output(T const& value) 
+        {
+            // track position in the output 
+            track_position_data.output(value);
+        }
+
+        // return the current count in the output
+        std::size_t get_out_count() const
+        {
+            return track_position_data.get_count();
+        }
+
+    private:
+        position_sink track_position_data;            // for position tracking
+    };
+
+    struct no_position_policy
+    {
+        no_position_policy() {}
+        no_position_policy(no_position_policy const&) {}
+
+        template <typename T>
+        void output(T const& /*value*/) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This class is used to count the number of characters streamed into the 
+    //  output.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator>
+    class counting_sink : boost::noncopyable
+    {
+    public:
+        counting_sink(OutputIterator& sink_, std::size_t count_ = 0
+              , bool enabled = true) 
+          : count(count_), initial_count(count), prev_count(0), sink(sink_)
+        {
+            prev_count = sink.chain_counting(enabled ? this : NULL);
+        }
+        ~counting_sink() 
+        {
+            if (prev_count)           // propagate count 
+                prev_count->update_count(count-initial_count);
+            sink.chain_counting(prev_count);
+        }
+
+        void output() 
+        {
+            ++count; 
+        }
+        std::size_t get_count() const { return count; }
+
+        // propagate count from embedded counters
+        void update_count(std::size_t c)
+        {
+            count += c;
+        }
+
+    private:
+        std::size_t count;
+        std::size_t initial_count;
+        counting_sink* prev_count;                // previous counter in chain
+        OutputIterator& sink;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator>
+    struct counting_policy
+    {
+    public:
+        counting_policy() : count(NULL) {}
+        counting_policy(counting_policy const& rhs) : count(rhs.count) {}
+
+        // functions related to counting
+        counting_sink<OutputIterator>* chain_counting(
+            counting_sink<OutputIterator>* count_data)
+        {
+            counting_sink<OutputIterator>* prev_count = count;
+            count = count_data;
+            return prev_count;
+        }
+
+        template <typename T>
+        void output(T const&) 
+        {
+            // count characters, if appropriate
+            if (NULL != count)
+                count->output();
+        }
+
+    private:
+        counting_sink<OutputIterator>* count;      // for counting
+    };
+
+    struct no_counting_policy
+    {
+        no_counting_policy() {}
+        no_counting_policy(no_counting_policy const&) {}
+
+        template <typename T>
+        void output(T const& /*value*/) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The following classes are used to intercept the output into a buffer
+    //  allowing to do things like alignment, character escaping etc.
+    ///////////////////////////////////////////////////////////////////////////
+    class buffer_sink : boost::noncopyable
+    {
+       // wchar_t is only 16-bits on Windows. If BOOST_SPIRIT_UNICODE is
+       // defined, the character type is 32-bits wide so we need to make
+       // sure the buffer is at least that wide.
+#if defined(BOOST_MSVC) && defined(BOOST_SPIRIT_UNICODE)
+       typedef spirit::char_encoding::unicode::char_type buffer_char_type;
+#else
+       typedef wchar_t buffer_char_type;
+#endif
+
+    public:
+        buffer_sink()
+          : width(0) {}
+
+        ~buffer_sink() 
+        {
+            tidy(); 
+        }
+
+        void enable(std::size_t width_) 
+        {
+            tidy();             // release existing buffer
+            width = (width_ == std::size_t(-1)) ? 0 : width_;
+            buffer.reserve(width); 
+        }
+
+        void tidy() 
+        {
+            buffer.clear(); 
+            width = 0; 
+        }
+
+        template <typename T>
+        void output(T const& value)
+        {
+            BOOST_STATIC_ASSERT(sizeof(T) <= sizeof(buffer_char_type));
+            buffer.push_back(value);
+        }
+
+        template <typename OutputIterator_>
+        bool copy(OutputIterator_& sink, std::size_t maxwidth) const 
+        {
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable: 4267)
+#endif
+            typename std::basic_string<buffer_char_type>::const_iterator end = 
+                buffer.begin() + (std::min)(buffer.size(), maxwidth);
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+            std::copy(buffer.begin(), end, sink);
+            return true;
+        }
+        template <typename RestIterator>
+        bool copy_rest(RestIterator& sink, std::size_t start_at) const 
+        {
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable: 4267)
+#endif
+            typename std::basic_string<buffer_char_type>::const_iterator begin = 
+                buffer.begin() + (std::min)(buffer.size(), start_at);
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+            std::copy(begin, buffer.end(), sink);
+            return true;
+        }
+
+        std::size_t buffer_size() const 
+        {
+            return buffer.size();
+        }
+
+    private:
+        std::size_t width;
+        std::basic_string<buffer_char_type> buffer;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct buffering_policy
+    {
+    public:
+        buffering_policy() : buffer(NULL) {}
+        buffering_policy(buffering_policy const& rhs) : buffer(rhs.buffer) {}
+
+        // functions related to buffering
+        buffer_sink* chain_buffering(buffer_sink* buffer_data)
+        {
+            buffer_sink* prev_buffer = buffer;
+            buffer = buffer_data;
+            return prev_buffer;
+        }
+
+        template <typename T>
+        bool output(T const& value) 
+        { 
+            // buffer characters, if appropriate
+            if (NULL != buffer) {
+                buffer->output(value);
+                return false;
+            }
+            return true;
+        }
+
+        bool has_buffer() const { return NULL != buffer; }
+
+    private:
+        buffer_sink* buffer;
+    };
+
+    struct no_buffering_policy
+    {
+        no_buffering_policy() {}
+        no_buffering_policy(no_counting_policy const&) {}
+
+        template <typename T>
+        bool output(T const& /*value*/) 
+        {
+            return true;
+        }
+
+        bool has_buffer() const { return false; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  forward declaration only
+    template <typename OutputIterator> 
+    struct enable_buffering;
+
+    template <typename OutputIterator, typename Properties
+      , typename Derived = unused_type>
+    class output_iterator;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Buffering, typename Counting, typename Tracking>
+    struct output_iterator_base : Buffering, Counting, Tracking
+    {
+        typedef Buffering buffering_policy;
+        typedef Counting counting_policy;
+        typedef Tracking tracking_policy;
+
+        output_iterator_base() {}
+        output_iterator_base(output_iterator_base const& rhs) 
+          : buffering_policy(rhs), counting_policy(rhs), tracking_policy(rhs)
+        {}
+
+        template <typename T>
+        bool output(T const& value) 
+        { 
+            this->counting_policy::output(value);
+            this->tracking_policy::output(value);
+            return this->buffering_policy::output(value);
+        }
+    };
+
+    template <typename Buffering, typename Counting, typename Tracking>
+    struct disabling_output_iterator : Buffering, Counting, Tracking
+    {
+        typedef Buffering buffering_policy;
+        typedef Counting counting_policy;
+        typedef Tracking tracking_policy;
+
+        disabling_output_iterator() : do_output(true) {}
+        disabling_output_iterator(disabling_output_iterator const& rhs) 
+          : buffering_policy(rhs), counting_policy(rhs), tracking_policy(rhs)
+          , do_output(rhs.do_output)
+        {}
+
+        template <typename T>
+        bool output(T const& value) 
+        { 
+            if (!do_output) 
+                return false;
+
+            this->counting_policy::output(value);
+            this->tracking_policy::output(value);
+            return this->buffering_policy::output(value);
+        }
+
+        bool do_output;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Properties, typename Derived>
+    struct make_output_iterator
+    {
+        // get the most derived type of this class
+        typedef typename mpl::if_<
+            traits::not_is_unused<Derived>, Derived
+          , output_iterator<OutputIterator, Properties, Derived>
+        >::type most_derived_type;
+
+        enum { properties = Properties::value };
+
+        typedef typename mpl::if_c<
+            (properties & generator_properties::tracking) ? true : false
+          , position_policy, no_position_policy
+        >::type tracking_type;
+
+        typedef typename mpl::if_c<
+            (properties & generator_properties::buffering) ? true : false
+          , buffering_policy, no_buffering_policy
+        >::type buffering_type;
+
+        typedef typename mpl::if_c<
+            (properties & generator_properties::counting) ? true : false
+          , counting_policy<most_derived_type>, no_counting_policy
+        >::type counting_type;
+
+        typedef typename mpl::if_c<
+            (properties & generator_properties::disabling) ? true : false
+          , disabling_output_iterator<buffering_type, counting_type, tracking_type>
+          , output_iterator_base<buffering_type, counting_type, tracking_type>
+        >::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Karma uses an output iterator wrapper for all output operations. This
+    //  is necessary to avoid the dreaded 'scanner business' problem, i.e. the
+    //  dependency of rules and grammars on the used output iterator. 
+    //
+    //  By default the user supplied output iterator is wrapped inside an 
+    //  instance of this internal output_iterator class. 
+    //
+    //  This output_iterator class normally just forwards to the embedded user
+    //  supplied iterator. But it is possible to enable additional functionality
+    //  on demand, such as counting, buffering, and position tracking.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Properties, typename Derived>
+    class output_iterator 
+      : public make_output_iterator<OutputIterator, Properties, Derived>::type
+    {
+    private:
+        // base iterator type
+        typedef typename make_output_iterator<
+            OutputIterator, Properties, Derived>::type base_iterator;
+
+    public:
+        typedef std::output_iterator_tag iterator_category;
+        typedef void value_type;
+        typedef void difference_type;
+        typedef void pointer;
+        typedef void reference;
+
+        explicit output_iterator(OutputIterator& sink_)
+          : sink(&sink_)
+        {}
+        output_iterator(output_iterator const& rhs)
+          : base_iterator(rhs), sink(rhs.sink)
+        {}
+
+        output_iterator& operator*() { return *this; }
+        output_iterator& operator++() 
+        { 
+            if (!this->base_iterator::has_buffer())
+                ++(*sink);           // increment only if not buffering
+            return *this; 
+        } 
+        output_iterator operator++(int) 
+        {
+            if (!this->base_iterator::has_buffer()) {
+                output_iterator t(*this);
+                ++(*sink); 
+                return t; 
+            }
+            return *this;
+        }
+
+#if defined(BOOST_MSVC)
+// 'argument' : conversion from '...' to '...', possible loss of data
+#pragma warning (push)
+#pragma warning (disable: 4244)
+#endif
+        template <typename T>
+        void operator=(T const& value) 
+        { 
+            if (this->base_iterator::output(value))
+                *(*sink) = value; 
+        }
+#if defined(BOOST_MSVC)
+#pragma warning (pop)
+#endif
+
+        // plain output iterators are considered to be good all the time
+        bool good() const { return true; }
+
+        // allow to access underlying output iterator
+        OutputIterator& base() { return *sink; }
+
+    protected:
+        // this is the wrapped user supplied output iterator
+        OutputIterator* sink;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Elem, typename Traits, typename Properties>
+    class output_iterator<karma::ostream_iterator<T, Elem, Traits>, Properties>
+      : public output_iterator<karma::ostream_iterator<T, Elem, Traits>, Properties
+          , output_iterator<karma::ostream_iterator<T, Elem, Traits>, Properties> >
+    {
+    private:
+        typedef output_iterator<karma::ostream_iterator<T, Elem, Traits>, Properties
+          , output_iterator<karma::ostream_iterator<T, Elem, Traits>, Properties> 
+        > base_type;
+        typedef karma::ostream_iterator<T, Elem, Traits> base_iterator_type;
+        typedef std::basic_ostream<Elem, Traits> ostream_type;
+
+    public:
+        output_iterator(base_iterator_type& sink)
+          : base_type(sink) {}
+
+        ostream_type& get_ostream() { return (*this->sink).get_ostream(); }
+        ostream_type const& get_ostream() const { return (*this->sink).get_ostream(); }
+
+        // expose good bit of underlying stream object
+        bool good() const { return (*this->sink).get_ostream().good(); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Helper class for exception safe enabling of character counting in the
+    //  output iterator
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator>
+    struct enable_counting
+    {
+        enable_counting(OutputIterator& sink_, std::size_t count = 0)
+          : count_data(sink_, count) {}
+
+        // get number of characters counted since last enable
+        std::size_t count() const
+        {
+            return count_data.get_count();
+        }
+
+    private:
+        counting_sink<OutputIterator> count_data;              // for counting
+    };
+
+    template <typename OutputIterator>
+    struct disable_counting
+    {
+        disable_counting(OutputIterator& sink_)
+          : count_data(sink_, 0, false) {}
+
+    private:
+        counting_sink<OutputIterator> count_data;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Helper class for exception safe enabling of character buffering in the
+    //  output iterator
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator>
+    struct enable_buffering
+    {
+        enable_buffering(OutputIterator& sink_
+              , std::size_t width = std::size_t(-1))
+          : sink(sink_), prev_buffer(NULL), enabled(false)
+        {
+            buffer_data.enable(width);
+            prev_buffer = sink.chain_buffering(&buffer_data);
+            enabled = true;
+        }
+        ~enable_buffering()
+        {
+            disable();
+        }
+
+        // reset buffer chain to initial state
+        void disable()
+        {
+            if (enabled) {
+                BOOST_VERIFY(&buffer_data == sink.chain_buffering(prev_buffer));
+                enabled = false;
+            }
+        }
+
+        // copy to the underlying sink whatever is in the local buffer
+        bool buffer_copy(std::size_t maxwidth = std::size_t(-1)
+          , bool disable_ = true)
+        {
+            if (disable_)
+                disable();
+            return buffer_data.copy(sink, maxwidth) && sink.good();
+        }
+
+        // return number of characters stored in the buffer
+        std::size_t buffer_size() const
+        {
+            return buffer_data.buffer_size();
+        }
+
+        // copy to the remaining characters to the specified sink
+        template <typename RestIterator>
+        bool buffer_copy_rest(RestIterator& sink, std::size_t start_at = 0) const
+        {
+            return buffer_data.copy_rest(sink, start_at);
+        }
+
+        // copy the contents to the given output iterator
+        template <typename OutputIterator_>
+        bool buffer_copy_to(OutputIterator_& sink
+          , std::size_t maxwidth = std::size_t(-1)) const
+        {
+            return buffer_data.copy(sink, maxwidth);
+        }
+
+    private:
+        OutputIterator& sink;
+        buffer_sink buffer_data;    // for buffering
+        buffer_sink* prev_buffer;   // previous buffer in chain
+        bool enabled;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Helper class for exception safe disabling of output
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator>
+    struct disable_output
+    {
+        disable_output(OutputIterator& sink_)
+          : sink(sink_), prev_do_output(sink.do_output)
+        {
+            sink.do_output = false;
+        }
+        ~disable_output()
+        {
+            sink.do_output = prev_do_output;
+        }
+
+        OutputIterator& sink;
+        bool prev_do_output;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sink>
+    bool sink_is_good(Sink const&)
+    {
+        return true;      // the general case is always good
+    }
+
+    template <typename OutputIterator, typename Derived>
+    bool sink_is_good(output_iterator<OutputIterator, Derived> const& sink)
+    {
+        return sink.good(); // our own output iterators are handled separately
+    }
+
+}}}}
+
+#endif 
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/pass_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/pass_container.hpp
new file mode 100644 (file)
index 0000000..41c253d
--- /dev/null
@@ -0,0 +1,392 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PASS_CONTAINER_MAR_15_2009_0114PM)
+#define SPIRIT_PASS_CONTAINER_MAR_15_2009_0114PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/deduce_sequence.hpp>
+
+#include <boost/mpl/print.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    // Helper meta-function allowing to evaluate weak substitutability and
+    // negate the result if the predicate (Sequence) is not true
+    template <typename Sequence, typename Attribute, typename ValueType>
+    struct negate_weak_substitute_if_not
+      : mpl::if_<
+            Sequence
+          , typename traits::is_weak_substitute<Attribute, ValueType>::type
+          , typename mpl::not_<
+                traits::is_weak_substitute<Attribute, ValueType>
+            >::type>
+    {};
+
+    // pass_through_container: utility to check decide whether a provided
+    // container attribute needs to be passed through to the current component
+    // or of we need to split the container by passing along instances of its
+    // value type
+
+    // if the expected attribute of the current component is neither a Fusion
+    // sequence nor a container, we will pass through the provided container
+    // only if its value type is not compatible with the component
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename Enable = void>
+    struct pass_through_container_base
+      : negate_weak_substitute_if_not<Sequence, ValueType, Attribute>
+    {};
+
+    // Specialization for fusion sequences, in this case we check whether all
+    // the types in the sequence are convertible to the lhs attribute.
+    //
+    // We return false if the rhs attribute itself is a fusion sequence, which
+    // is compatible with the LHS sequence (we want to pass through this
+    // attribute without it being split apart).
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence = mpl::true_>
+    struct not_compatible_element
+      : mpl::and_<
+            negate_weak_substitute_if_not<Sequence, Container, Attribute>
+          , negate_weak_substitute_if_not<Sequence, ValueType, Attribute> >
+    {};
+
+    // If the value type of the container is not a Fusion sequence, we pass
+    // through the container if each of the elements of the Attribute
+    // sequence is compatible with either the container or its value type.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence
+      , bool IsSequence = fusion::traits::is_sequence<ValueType>::value>
+    struct pass_through_container_fusion_sequence
+    {
+        typedef typename mpl::find_if<
+            Attribute, not_compatible_element<Container, ValueType, mpl::_1>
+        >::type iter;
+        typedef typename mpl::end<Attribute>::type end;
+
+        typedef typename is_same<iter, end>::type type;
+    };
+
+    // If both, the Attribute and the value type of the provided container
+    // are Fusion sequences, we pass the container only if the two
+    // sequences are not compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence, true>
+    {
+        typedef typename mpl::find_if<
+            Attribute
+          , not_compatible_element<Container, ValueType, mpl::_1, Sequence>
+        >::type iter;
+        typedef typename mpl::end<Attribute>::type end;
+
+        typedef typename is_same<iter, end>::type type;
+    };
+
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_base<Container, ValueType, Attribute
+          , Sequence
+          , typename enable_if<fusion::traits::is_sequence<Attribute> >::type>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    // Specialization for containers
+    //
+    // If the value type of the attribute of the current component is not
+    // a Fusion sequence, we have to pass through the provided container if
+    // both are compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename AttributeValueType
+      , bool IsSequence = fusion::traits::is_sequence<AttributeValueType>::value>
+    struct pass_through_container_container
+      : mpl::or_<
+            traits::is_weak_substitute<Container, Attribute>
+          , traits::is_weak_substitute<Container, AttributeValueType> >
+    {};
+
+    // If the value type of the exposed container attribute is a Fusion
+    // sequence, we use the already existing logic for those.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename AttributeValueType>
+    struct pass_through_container_container<
+            Container, ValueType, Attribute, Sequence, AttributeValueType, true>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, AttributeValueType, Sequence>
+    {};
+
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_base<Container, ValueType, Attribute
+          , Sequence
+          , typename enable_if<traits::is_container<Attribute> >::type>
+      : detail::pass_through_container_container<
+          Container, ValueType, Attribute, Sequence
+        , typename traits::container_value<Attribute>::type>
+    {};
+
+    // Specialization for exposed optional attributes
+    //
+    // If the type embedded in the exposed optional is not a Fusion
+    // sequence we pass through the container attribute if it is compatible
+    // either to the optionals embedded type or to the containers value
+    // type.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence
+      , bool IsSequence = fusion::traits::is_sequence<Attribute>::value>
+    struct pass_through_container_optional
+      : mpl::or_<
+            traits::is_weak_substitute<Container, Attribute>
+          , traits::is_weak_substitute<ValueType, Attribute> >
+    {};
+
+    // If the embedded type of the exposed optional attribute is a Fusion
+    // sequence, we use the already existing logic for those.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_optional<
+            Container, ValueType, Attribute, Sequence, true>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container
+      : pass_through_container_base<Container, ValueType, Attribute, Sequence>
+    {};
+
+    // Handle optional attributes
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+            Container, ValueType, boost::optional<Attribute>, Sequence>
+      : pass_through_container_optional<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    // If both, the containers value type and the exposed attribute type are
+    // optionals we are allowed to pass through the container only if the
+    // embedded types of those optionals are not compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+            Container, boost::optional<ValueType>, boost::optional<Attribute>
+          , Sequence>
+      : mpl::not_<traits::is_weak_substitute<ValueType, Attribute> >
+    {};
+
+    // Specialization for exposed variant attributes
+    //
+    // We pass through the container attribute if at least one of the embedded
+    // types in the variant requires to pass through the attribute
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+    template <typename Container, typename ValueType, typename Sequence
+      , typename T>
+    struct pass_through_container<Container, ValueType, boost::variant<T>
+          , Sequence>
+      : pass_through_container<Container, ValueType, T, Sequence>
+    {};
+
+    template <typename Container, typename ValueType, typename Sequence
+      , typename T0, typename ...TN>
+    struct pass_through_container<Container, ValueType
+          , boost::variant<T0, TN...>, Sequence>
+      : mpl::bool_<pass_through_container<
+            Container, ValueType, T0, Sequence
+            >::type::value || pass_through_container<
+                Container, ValueType, boost::variant<TN...>, Sequence
+            >::type::value>
+    {};
+#else
+#define BOOST_SPIRIT_PASS_THROUGH_CONTAINER(z, N, _)                          \
+    pass_through_container<Container, ValueType,                              \
+        BOOST_PP_CAT(T, N), Sequence>::type::value ||                         \
+    /***/
+
+    // make sure unused variant parameters do not affect the outcome
+    template <typename Container, typename ValueType, typename Sequence>
+    struct pass_through_container<Container, ValueType
+          , boost::detail::variant::void_, Sequence>
+      : mpl::false_
+    {};
+
+    template <typename Container, typename ValueType, typename Sequence
+      , BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct pass_through_container<Container, ValueType
+          , boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Sequence>
+      : mpl::bool_<BOOST_PP_REPEAT(BOOST_VARIANT_LIMIT_TYPES
+          , BOOST_SPIRIT_PASS_THROUGH_CONTAINER, _) false>
+    {};
+
+#undef BOOST_SPIRIT_PASS_THROUGH_CONTAINER
+#endif
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // forwarding customization point for domain karma::domain
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+            Container, ValueType, Attribute, Sequence, karma::domain>
+      : karma::detail::pass_through_container<
+            Container, ValueType, Attribute, Sequence>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    template <typename Iterator>
+    struct pass_container_base
+    {
+        pass_container_base(Iterator begin, Iterator end)
+          : iter(begin), end(end)
+        {}
+
+        mutable Iterator iter;
+        mutable Iterator end;
+    };
+
+    template <typename Iterator>
+    struct pass_container_base<Iterator&>
+    {
+        pass_container_base(Iterator& begin, Iterator& end)
+          : iter(begin), end(end)
+        {}
+
+        Iterator& iter;
+        Iterator& end;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This function handles the case where the attribute (Attr) given
+    // to the sequence is an STL container. This is a wrapper around F.
+    // The function F does the actual generating.
+    template <typename F, typename Attr, typename Iterator, typename Sequence>
+    struct pass_container : pass_container_base<Iterator>
+    {
+        typedef pass_container_base<Iterator> base_type;
+        typedef typename F::context_type context_type;
+
+        pass_container(F const& f, Iterator begin, Iterator end)
+          : base_type(begin, end)
+          , f(f)
+        {}
+
+        bool is_at_end() const
+        {
+            return traits::compare(this->iter, this->end);
+        }
+
+        void next()
+        {
+            traits::next(this->iter);
+        }
+
+        // this is for the case when the current element expects an attribute
+        // which is taken from the next entry in the container
+        template <typename Component>
+        bool dispatch_container(Component const& component, mpl::false_) const
+        {
+            // get the next value to generate from container
+            if (!is_at_end() && !f(component, traits::deref(this->iter)))
+            {
+                // needs to return false as long as everything is ok
+                traits::next(this->iter);
+                return false;
+            }
+
+            // either no elements available any more or generation failed
+            return true;
+        }
+
+        // this is for the case when the current element is able to handle an
+        // attribute which is a container itself, this element will push its
+        // data directly into the attribute container
+        template <typename Component>
+        bool dispatch_container(Component const& component, mpl::true_) const
+        {
+            return f(component, make_iterator_range(this->iter, this->end));
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // this is for the case when the current element doesn't expect an
+        // attribute
+        template <typename Component>
+        bool dispatch_attribute(Component const& component, mpl::false_) const
+        {
+            return f(component, unused);
+        }
+
+        // the current element expects an attribute
+        template <typename Component>
+        bool dispatch_attribute(Component const& component, mpl::true_) const
+        {
+            typedef typename traits::container_value<Attr>::type value_type;
+            typedef typename
+                traits::attribute_of<Component, context_type>::type
+            lhs_attribute;
+
+            // this predicate detects, whether the value type of the container
+            // attribute is a substitute for the attribute of the current
+            // element
+            typedef mpl::and_<
+                traits::handles_container<Component, Attr, context_type>
+              , traits::pass_through_container<
+                    Attr, value_type, lhs_attribute, Sequence, karma::domain>
+            > predicate;
+
+            return dispatch_container(component, predicate());
+        }
+
+        // Dispatches to dispatch_main depending on the attribute type
+        // of the Component
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // we need to dispatch depending on the type of the attribute
+            // of the current element (component). If this is has no attribute
+            // we shouldn't use an element of the container but unused_type
+            // instead
+            typedef traits::not_is_unused<
+                typename traits::attribute_of<Component, context_type>::type
+            > predicate;
+
+            return dispatch_attribute(component, predicate());
+        }
+
+        F f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        pass_container& operator= (pass_container const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_compare.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_compare.hpp
new file mode 100644 (file)
index 0000000..311920a
--- /dev/null
@@ -0,0 +1,76 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_STRING_COMPARE_AUG_08_2009_0756PM)
+#define BOOST_SPIRIT_KARMA_STRING_COMPARE_AUG_08_2009_0756PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    template <typename Char>
+    bool string_compare(Char const* attr, Char const* lit)
+    {
+        Char ch_attr = *attr;
+        Char ch_lit = *lit;
+
+        while (!!ch_lit && !!ch_attr)
+        {
+            if (ch_attr != ch_lit)
+                return false;
+
+            ch_attr = *++attr;
+            ch_lit = *++lit;
+        }
+
+        return !ch_lit && !ch_attr;
+    }
+
+    template <typename Char>
+    bool string_compare(Char const* attr, Char const* lit, unused_type, unused_type)
+    {
+        return string_compare(attr, lit);
+    }
+
+    template <typename Char>
+    bool string_compare(unused_type, Char const*, unused_type, unused_type)
+    {
+        return true;
+    }
+
+    template <typename Char, typename CharEncoding, typename Tag>
+    bool string_compare(Char const* attr, Char const* lit, CharEncoding, Tag)
+    {
+        Char ch_attr = *attr;
+        Char ch_lit = spirit::char_class::convert<CharEncoding>::to(Tag(), *lit);
+
+        while (!!ch_lit && !!ch_attr)
+        {
+            if (ch_attr != ch_lit)
+                return false;
+
+            ch_attr = *++attr;
+            ch_lit = spirit::char_class::convert<CharEncoding>::to(Tag(), *++lit);
+        }
+
+        return !ch_lit && !ch_attr;
+    }
+
+    template <typename Char, typename CharEncoding, typename Tag>
+    bool string_compare(unused_type, Char const*, CharEncoding, Tag)
+    {
+        return true;
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_generate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/string_generate.hpp
new file mode 100644 (file)
index 0000000..d0f8a73
--- /dev/null
@@ -0,0 +1,155 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_STRING_GENERATE_FEB_23_2007_1232PM)
+#define BOOST_SPIRIT_KARMA_STRING_GENERATE_FEB_23_2007_1232PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/range/const_iterator.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // pass through character transformation
+    struct pass_through_filter
+    {
+        template <typename Char>
+        Char operator()(Char ch) const
+        {
+            return ch;
+        }
+    };
+
+    template <typename CharEncoding, typename Tag>
+    struct encoding_filter
+    {
+        template <typename Char>
+        Char operator()(Char ch) const
+        {
+            return spirit::char_class::convert<CharEncoding>::to(Tag(), ch);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  generate a string given by a std::string, applying the given filter
+    template <typename OutputIterator, typename Char, typename Filter>
+    inline bool string_generate(OutputIterator& sink, Char const* str
+      , Filter filter)
+    {
+        for (Char ch = *str; ch != 0; ch = *++str)
+        {
+            *sink = filter(ch);
+            ++sink;
+        }
+        return detail::sink_is_good(sink);
+    }
+
+    template <typename OutputIterator, typename Container, typename Filter>
+    inline bool string_generate(OutputIterator& sink
+      , Container const& c, Filter filter)
+    {
+        typedef typename traits::container_iterator<Container const>::type 
+            iterator;
+
+        iterator end = boost::end(c);
+        for (iterator it = boost::begin(c); it != end; ++it)
+        {
+            *sink = filter(*it);
+            ++sink;
+        }
+        return detail::sink_is_good(sink);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  generate a string without any transformation
+    template <typename OutputIterator, typename Char>
+    inline bool string_generate(OutputIterator& sink, Char const* str)
+    {
+        return string_generate(sink, str, pass_through_filter());
+    }
+
+    template <typename OutputIterator, typename Char, typename Traits
+      , typename Allocator>
+    inline bool string_generate(OutputIterator& sink
+      , std::basic_string<Char, Traits, Allocator> const& str)
+    {
+        return string_generate(sink, str.c_str(), pass_through_filter());
+    }
+
+    template <typename OutputIterator, typename Container>
+    inline bool string_generate(OutputIterator& sink
+      , Container const& c)
+    {
+        return string_generate(sink, c, pass_through_filter());
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  generate a string given by a pointer, converting according using a 
+    //  given character class and case tag
+    template <typename OutputIterator, typename Char, typename CharEncoding
+      , typename Tag>
+    inline bool string_generate(OutputIterator& sink
+      , Char const* str
+      , CharEncoding, Tag)
+    {
+        return string_generate(sink, str, encoding_filter<CharEncoding, Tag>());
+    }
+
+    template <typename OutputIterator, typename Char
+      , typename CharEncoding, typename Tag
+      , typename Traits, typename Allocator>
+    inline bool string_generate(OutputIterator& sink
+      , std::basic_string<Char, Traits, Allocator> const& str
+      , CharEncoding, Tag)
+    {
+        return string_generate(sink, str.c_str()
+          , encoding_filter<CharEncoding, Tag>());
+    }
+
+    template <typename OutputIterator, typename Container
+      , typename CharEncoding, typename Tag>
+    inline bool 
+    string_generate(OutputIterator& sink
+      , Container const& c
+      , CharEncoding, Tag)
+    {
+        return string_generate(sink, c, encoding_filter<CharEncoding, Tag>());
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Char>
+    inline bool string_generate(OutputIterator& sink
+      , Char const* str
+      , unused_type, unused_type)
+    {
+        return string_generate(sink, str, pass_through_filter());
+    }
+
+    template <typename OutputIterator, typename Char, typename Traits
+      , typename Allocator>
+    inline bool string_generate(OutputIterator& sink
+      , std::basic_string<Char, Traits, Allocator> const& str
+      , unused_type, unused_type)
+    {
+        return string_generate(sink, str.c_str(), pass_through_filter());
+    }
+
+    template <typename OutputIterator, typename Container>
+    inline bool string_generate(OutputIterator& sink
+      , Container const& c
+      , unused_type, unused_type)
+    {
+        return string_generate(sink, c, pass_through_filter());
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/unused_delimiter.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/detail/unused_delimiter.hpp
new file mode 100644 (file)
index 0000000..793c8f0
--- /dev/null
@@ -0,0 +1,51 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_UNUSED_DELIMITER_MAR_15_2009_0923PM)
+#define BOOST_SPIRIT_KARMA_UNUSED_DELIMITER_MAR_15_2009_0923PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    template <typename Delimiter>
+    struct unused_delimiter : unused_type
+    {
+        unused_delimiter(Delimiter const& delim)
+          : delimiter(delim) {}
+        Delimiter const& delimiter;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        unused_delimiter& operator= (unused_delimiter const&);
+    };
+
+    // If a surrounding verbatim[] directive was specified, the current
+    // delimiter is of the type unused_delimiter. In this case we 
+    // re-activate the delimiter which was active before the verbatim[]
+    // directive.
+    template <typename Delimiter, typename Default>
+    inline Delimiter const& 
+    get_delimiter(unused_delimiter<Delimiter> const& u, Default const&)
+    {
+        return u.delimiter;
+    }
+
+    // If no surrounding verbatim[] directive was specified we activate
+    // a single space as the delimiter to use.
+    template <typename Delimiter, typename Default>
+    inline Default const& 
+    get_delimiter(Delimiter const&, Default const& d)
+    {
+        return d;
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive.hpp
new file mode 100644 (file)
index 0000000..56ef87c
--- /dev/null
@@ -0,0 +1,75 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DIRECTIVE_FEB_21_2007_0833PM)
+#define BOOST_SPIRIT_KARMA_DIRECTIVE_FEB_21_2007_0833PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/encoding.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  directives related to alignment 
+//  left_align[...], right_align[...], center[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/left_alignment.hpp>
+#include <boost/spirit/home/karma/directive/right_alignment.hpp>
+#include <boost/spirit/home/karma/directive/center_alignment.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  directives related to truncating length
+//  maxwidth[...], columns[]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/maxwidth.hpp>
+#include <boost/spirit/home/karma/directive/columns.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  directives related to character case
+//  lower[...] and upper[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/upper_lower_case.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  directives related to delimiting generators 
+//  delimit[...] and verbatim[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/verbatim.hpp>
+#include <boost/spirit/home/karma/directive/delimit.hpp>
+#include <boost/spirit/home/karma/directive/no_delimit.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  repeat directives
+//  repeat[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/repeat.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  omit, skip, and duplicate directives
+//  omit[...], skip[...], duplicate[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/omit.hpp>
+#include <boost/spirit/home/karma/directive/duplicate.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  buffer directive
+//  buffer[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/buffer.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  strict and relaxed directives
+//  strict[...], relaxed[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/strict_relaxed.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  as_string and as_wstring directives
+//  as_string[...], as_wstring[...]
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/home/karma/directive/as.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/as.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/as.hpp
new file mode 100644 (file)
index 0000000..2a42b24
--- /dev/null
@@ -0,0 +1,165 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2010 Bryce Lelbach
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_AS_DEC_18_0510PM)
+#define SPIRIT_KARMA_AS_DEC_18_0510PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/as.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename T>
+    struct as
+      : stateful_tag_type<T, tag::as>
+    {
+        BOOST_SPIRIT_ASSERT_MSG(
+            (traits::is_container<T>::type::value),
+            error_type_must_be_a_container,
+            (T));
+    };
+}}}
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    // enables as_string[...]
+    template <>
+    struct use_directive<karma::domain, tag::as_string> 
+      : mpl::true_ {};
+
+    // enables as_wstring[...]
+    template <>
+    struct use_directive<karma::domain, tag::as_wstring> 
+      : mpl::true_ {};
+
+    // enables as<T>[...]
+    template <typename T>
+    struct use_directive<karma::domain, tag::stateful_tag<T, tag::as> > 
+      : mpl::true_ 
+    {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::as_string;
+    using spirit::as_wstring;
+#endif
+    using spirit::as_string_type;
+    using spirit::as_wstring_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // as_directive allows to hook custom conversions to string into the
+    // output generation process
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T>
+    struct as_directive 
+      : unary_generator<as_directive<Subject, T> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        as_directive(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            if (!traits::valid_as<T>(attr))
+                return false;
+
+            return subject.generate(sink, ctx, d, traits::as<T>(attr)) &&
+                    karma::delimit_out(sink, d); // always do post-delimiting
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("as", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::as_string, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, std::string> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::as_wstring, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, std::basic_string<wchar_t> > result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+    
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<tag::stateful_tag<T, tag::as>, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, T> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T>
+    struct has_semantic_action<karma::as_directive<Subject, T> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<karma::as_directive<Subject, T>, Attribute
+      , Context, Iterator>
+      : mpl::false_ {};   // always dereference attribute if used in sequences
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/buffer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/buffer.hpp
new file mode 100644 (file)
index 0000000..b92f57b
--- /dev/null
@@ -0,0 +1,132 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_BUFFER_AUG_03_2009_0949AM)
+#define SPIRIT_KARMA_BUFFER_AUG_03_2009_0949AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::buffer> // enables buffer
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::buffer;
+#endif
+    using spirit::buffer_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // buffer_directive buffers all generated output of the embedded generator
+    // and flushes it only if the whole embedded generator succeeds
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct buffer_directive : unary_generator<buffer_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef mpl::int_<
+            subject_type::properties::value | 
+            generator_properties::countingbuffer
+        > properties;
+
+        buffer_directive(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            // wrap the given output iterator to avoid output as long as the
+            // embedded generator (subject) fails
+            detail::enable_buffering<OutputIterator> buffering(sink);
+            bool r = false;
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = subject.generate(sink, ctx, d, attr);
+            }
+            if (r) 
+                buffering.buffer_copy();
+            return r;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("buffer", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::buffer, Subject, Modifiers>
+    {
+        typedef buffer_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    // make sure buffer[buffer[...]] does not result in double buffering
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::buffer, buffer_directive<Subject>, Modifiers>
+    {
+        typedef buffer_directive<Subject> result_type;
+        result_type operator()(unused_type
+          , buffer_directive<Subject> const& subject, unused_type) const
+        {
+            return subject;
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::buffer_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::buffer_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/center_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/center_alignment.hpp
new file mode 100644 (file)
index 0000000..75e64d1
--- /dev/null
@@ -0,0 +1,335 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_CENTER_ALIGNMENT_FEB_27_2007_1216PM)
+#define BOOST_SPIRIT_KARMA_CENTER_ALIGNMENT_FEB_27_2007_1216PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/default_width.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/detail/workaround.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables center[]
+    template <>
+    struct use_directive<karma::domain, tag::center>
+      : mpl::true_ {};
+
+    // enables center(d)[g] and center(w)[g], where d is a generator
+    // and w is a maximum width
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::center, fusion::vector1<T> > >
+      : mpl::true_ {};
+
+    // enables *lazy* center(d)[g], where d provides a generator
+    template <>
+    struct use_lazy_directive<karma::domain, tag::center, 1>
+      : mpl::true_ {};
+
+    // enables center(w, d)[g], where d is a generator and w is a maximum
+    // width
+    template <typename Width, typename Padding>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::center, fusion::vector2<Width, Padding> > >
+      : spirit::traits::matches<karma::domain, Padding> {};
+
+    // enables *lazy* center(w, d)[g], where d provides a generator and w is
+    // a maximum width
+    template <>
+    struct use_lazy_directive<karma::domain, tag::center, 2>
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::center;
+#endif
+    using spirit::center_type;
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  The center_generate template function is used for all the
+        //  different flavors of the center[] directive.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter,
+            typename Attribute, typename Embedded, typename Padding>
+        inline static bool
+        center_generate(OutputIterator& sink, Context& ctx,
+            Delimiter const& d, Attribute const& attr, Embedded const& e,
+            unsigned int const width, Padding const& p)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            e; // suppresses warning: C4100: 'e' : unreferenced formal parameter
+#endif
+            // wrap the given output iterator to allow left padding
+            detail::enable_buffering<OutputIterator> buffering(sink, width);
+            bool r = false;
+
+            // first generate the embedded output
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = e.generate(sink, ctx, d, attr);
+            }   // re-enable counting
+
+            buffering.disable();    // do not perform buffering any more
+
+            // generate the left padding
+            detail::enable_counting<OutputIterator> counting(sink);
+
+            std::size_t const pre = width - (buffering.buffer_size() + width)/2;
+            while (r && counting.count() < pre)
+                r = p.generate(sink, ctx, unused, unused);
+
+            if (r) {
+                // copy the embedded output to the target output iterator
+                buffering.buffer_copy();
+
+                // generate the right padding
+                while (r && counting.count() < width)
+                    r = p.generate(sink, ctx, unused, unused);
+            }
+            return r;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The simple left alignment directive is used for center[...]
+    //  generators. It uses default values for the generated width (defined via
+    //  the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant) and for the padding
+    //  generator (always spaces).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width = detail::default_width>
+    struct simple_center_alignment
+      : unary_generator<simple_center_alignment<Subject, Width> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::countingbuffer | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        simple_center_alignment(Subject const& subject, Width width = Width())
+          : subject(subject), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::center_generate(sink, ctx, d, attr,
+                subject, width, compile<karma::domain>(' '));
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("center", subject.what(context));
+        }
+
+        Subject subject;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The left alignment directive with padding, is used for generators like
+    //  center(padding)[...], where padding is a arbitrary generator
+    //  expression. It uses a default value for the generated width (defined
+    //  via the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Padding
+      , typename Width = detail::default_width>
+    struct padding_center_alignment
+      : unary_generator<padding_center_alignment<Subject, Padding, Width> >
+    {
+        typedef Subject subject_type;
+        typedef Padding padding_type;
+
+        typedef mpl::int_<
+            generator_properties::countingbuffer |
+            subject_type::properties::value | padding_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<Subject, Context, Iterator>
+        {};
+
+        padding_center_alignment(Subject const& subject, Padding const& padding
+              , Width width = Width())
+          : subject(subject), padding(padding), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::center_generate(sink, ctx, d, attr,
+                subject, width, padding);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("center", subject.what(context));
+        }
+
+        Subject subject;
+        Padding padding;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates center[] directive generator
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::center, Subject, Modifiers>
+    {
+        typedef simple_center_alignment<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    // creates center(width)[] directive generator
+    template <typename Width, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::center, fusion::vector1<Width> >
+      , Subject, Modifiers
+      , typename enable_if_c< integer_traits<Width>::is_integral >::type>
+    {
+        typedef simple_center_alignment<Subject, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+
+    // creates center(pad)[] directive generator
+    template <typename Padding, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::center, fusion::vector1<Padding> >
+      , Subject, Modifiers
+      , typename enable_if<
+            mpl::and_<
+                spirit::traits::matches<karma::domain, Padding>,
+                mpl::not_<mpl::bool_<integer_traits<Padding>::is_integral> >
+            >
+        >::type>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_center_alignment<Subject, padding_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<0>(term.args), modifiers));
+        }
+    };
+
+    // creates center(width, pad)[] directive generator
+    template <typename Width, typename Padding, typename Subject
+      , typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::center, fusion::vector2<Width, Padding> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_center_alignment<Subject, padding_type, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<1>(term.args), modifiers)
+              , fusion::at_c<0>(term.args));
+        }
+    };
+
+}}} // namespace boost::spirit::karma
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width>
+    struct has_semantic_action<karma::simple_center_alignment<Subject, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename Padding, typename Width>
+    struct has_semantic_action<
+            karma::padding_center_alignment<Subject, Padding, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::simple_center_alignment<Subject, Width>, Attribute
+          , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename Padding, typename Width
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<
+            karma::padding_center_alignment<Subject, Padding, Width>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/columns.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/columns.hpp
new file mode 100644 (file)
index 0000000..78010db
--- /dev/null
@@ -0,0 +1,293 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_COLUMNS_DEC_03_2009_0736AM)
+#define BOOST_SPIRIT_KARMA_COLUMNS_DEC_03_2009_0736AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/detail/default_width.hpp>
+#include <boost/spirit/home/karma/auxiliary/eol.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/integer_traits.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::columns>   // enables columns[]
+      : mpl::true_ {};
+
+    // enables columns(c)[g], where c provides the number of require columns
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::columns, fusion::vector1<T> > > 
+      : mpl::true_ {};
+
+    // enables *lazy* columns(c)[g]
+    template <>
+    struct use_lazy_directive<karma::domain, tag::columns, 1> 
+      : mpl::true_ {};
+
+    // enables columns(c, d)[g], where c provides the number of require columns
+    // and d is the custom column-delimiter (default is karma::endl)
+    template <typename T1, typename T2>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::columns, fusion::vector2<T1, T2> > > 
+      : boost::spirit::traits::matches<karma::domain, T2> {};
+
+    // enables *lazy* columns(c, d)[g]
+    template <>
+    struct use_lazy_directive<karma::domain, tag::columns, 2> 
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::columns;
+#endif
+    using spirit::columns_type;
+
+    namespace detail
+    {
+        template <typename Delimiter, typename ColumnDelimiter>
+        struct columns_delimiter 
+        {
+            columns_delimiter(Delimiter const& delim
+                  , ColumnDelimiter const& cdelim, unsigned int const numcols)
+              : delimiter(delim), column_delimiter(cdelim)
+              , numcolumns(numcols), count(0) {}
+
+            template <typename OutputIterator, typename Context
+              , typename Delimiter_, typename Attribute>
+            bool generate(OutputIterator& sink, Context&, Delimiter_ const&
+              , Attribute const&) const
+            {
+                // first invoke the embedded delimiter
+                if (!karma::delimit_out(sink, delimiter))
+                    return false;
+
+                // now we count the number of invocations and emit the column 
+                // delimiter if needed
+                if ((++count % numcolumns) == 0)
+                    return karma::delimit_out(sink, column_delimiter);
+                return true;
+            }
+
+            // generate a final column delimiter if the last invocation didn't 
+            // emit one
+            template <typename OutputIterator>
+            bool delimit_out(OutputIterator& sink) const
+            {
+                if (count % numcolumns)
+                    return karma::delimit_out(sink, column_delimiter);
+                return true;
+            }
+
+            Delimiter const& delimiter;
+            ColumnDelimiter const& column_delimiter;
+            unsigned int const numcolumns;
+            mutable unsigned int count;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            columns_delimiter& operator= (columns_delimiter const&);
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The columns_generator is used for columns(c, d)[...] directives.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename NumColumns, typename ColumnsDelimiter>
+    struct columns_generator 
+      : unary_generator<columns_generator<Subject, NumColumns, ColumnsDelimiter> >
+    {
+        typedef Subject subject_type;
+        typedef ColumnsDelimiter delimiter_type;
+
+        typedef mpl::int_<
+            subject_type::properties::value | delimiter_type::properties::value 
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        columns_generator(Subject const& subject, NumColumns const& cols
+              , ColumnsDelimiter const& cdelimiter)
+          : subject(subject), numcolumns(cols), column_delimiter(cdelimiter) 
+        {
+            // having zero number of columns doesn't make any sense
+            BOOST_ASSERT(numcolumns > 0);
+        }
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& delimiter, Attribute const& attr) const
+        {
+            //  The columns generator dispatches to the embedded generator 
+            //  while supplying a new delimiter to use, wrapping the outer 
+            //  delimiter.
+            typedef detail::columns_delimiter<
+                Delimiter, ColumnsDelimiter
+            > columns_delimiter_type;
+
+            columns_delimiter_type d(delimiter, column_delimiter, numcolumns);
+            return subject.generate(sink, ctx, d, attr) && d.delimit_out(sink);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("columns", subject.what(context));
+        }
+
+        Subject subject;
+        NumColumns numcolumns;
+        ColumnsDelimiter column_delimiter;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates columns[] directive
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::columns, Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, eol_type, Modifiers>::type
+        columns_delimiter_type;
+        typedef columns_generator<
+            Subject, detail::default_columns, columns_delimiter_type> 
+        result_type;
+
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+#if defined(BOOST_SPIRIT_NO_PREDEFINED_TERMINALS)
+            eol_type const eol = eol_type();
+#endif
+            return result_type(subject, detail::default_columns()
+              , compile<karma::domain>(eol));
+        }
+    };
+
+    // creates columns(c)[] directive generator (c is the number of columns)
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::columns, fusion::vector1<T> >
+      , Subject, Modifiers
+      , typename enable_if_c<integer_traits<T>::is_integral>::type>
+    {
+        typedef typename
+            result_of::compile<karma::domain, eol_type, Modifiers>::type
+        columns_delimiter_type;
+        typedef columns_generator<
+            Subject, T, columns_delimiter_type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+#if defined(BOOST_SPIRIT_NO_PREDEFINED_TERMINALS)
+            eol_type const eol = eol_type();
+#endif
+            return result_type(subject, fusion::at_c<0>(term.args)
+              , compile<karma::domain>(eol));
+        }
+    };
+
+    // creates columns(d)[] directive generator (d is the column delimiter)
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::columns, fusion::vector1<T> >
+      , Subject, Modifiers
+      , typename enable_if<
+            mpl::and_<
+                spirit::traits::matches<karma::domain, T>,
+                mpl::not_<mpl::bool_<integer_traits<T>::is_integral> >
+            >
+        >::type>
+    {
+        typedef typename
+            result_of::compile<karma::domain, T, Modifiers>::type
+        columns_delimiter_type;
+        typedef columns_generator<
+            Subject, detail::default_columns, columns_delimiter_type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, detail::default_columns()
+              , compile<karma::domain>(fusion::at_c<0>(term.args)));
+        }
+    };
+
+    // creates columns(c, d)[] directive generator (c is the number of columns
+    // and d is the column delimiter)
+    template <typename T1, typename T2, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::columns, fusion::vector2<T1, T2> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, T2, Modifiers>::type
+        columns_delimiter_type;
+        typedef columns_generator<
+            Subject, T1, columns_delimiter_type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type (subject, fusion::at_c<0>(term.args)
+              , compile<karma::domain>(fusion::at_c<1>(term.args)));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T1, typename T2>
+    struct has_semantic_action<karma::columns_generator<Subject, T1, T2> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T1, typename T2, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::columns_generator<Subject, T1, T2>, Attribute
+          , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/delimit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/delimit.hpp
new file mode 100644 (file)
index 0000000..e21de18
--- /dev/null
@@ -0,0 +1,200 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DELIMIT_MAR_02_2007_0217PM)
+#define BOOST_SPIRIT_KARMA_DELIMIT_MAR_02_2007_0217PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/unused_delimiter.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::delimit>   // enables delimit[]
+      : mpl::true_ {};
+
+    // enables delimit(d)[g], where d is a generator
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::delimit, fusion::vector1<T> > > 
+      : boost::spirit::traits::matches<karma::domain, T> {};
+
+    // enables *lazy* delimit(d)[g]
+    template <>
+    struct use_lazy_directive<karma::domain, tag::delimit, 1> 
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::delimit;
+#endif
+    using spirit::delimit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The redelimit_generator generator is used for delimit[...] directives.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct redelimit_generator : unary_generator<redelimit_generator<Subject> >
+    {
+        typedef Subject subject_type;
+
+        typedef typename subject_type::properties properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        redelimit_generator(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            //  The delimit_space generator simply dispatches to the embedded
+            //  generator while supplying either the delimiter which has been 
+            //  used before a surrounding verbatim[] directive or a single 
+            //  space as the new delimiter to use (if no surrounding verbatim[]
+            //  was specified).
+            return subject.generate(sink, ctx
+              , detail::get_delimiter(d, compile<karma::domain>(' ')), attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("delimit", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The delimit_generator is used for delimit(d)[...] directives.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Delimiter>
+    struct delimit_generator 
+      : unary_generator<delimit_generator<Subject, Delimiter> >
+    {
+        typedef Subject subject_type;
+        typedef Delimiter delimiter_type;
+
+        typedef typename subject_type::properties properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        delimit_generator(Subject const& subject, Delimiter const& delimiter)
+          : subject(subject), delimiter(delimiter) {}
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter_, typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter_ const&
+          , Attribute const& attr) const
+        {
+            //  the delimit generator simply dispatches to the embedded
+            //  generator while supplying it's argument as the new delimiter
+            //  to use
+            return subject.generate(sink, ctx, delimiter, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("delimit", subject.what(context));
+        }
+
+        Subject subject;
+        Delimiter delimiter;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::delimit, Subject, Modifiers>
+    {
+        typedef redelimit_generator<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename Delimiter, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::delimit, fusion::vector1<Delimiter> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Delimiter, Modifiers>::type
+        delimiter_type;
+
+        typedef delimit_generator<Subject, delimiter_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<0>(term.args)));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::redelimit_generator<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename Delimiter>
+    struct has_semantic_action<karma::delimit_generator<Subject, Delimiter> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute
+            , typename Context, typename Iterator>
+    struct handles_container<karma::redelimit_generator<Subject>, Attribute
+      , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename Delimiter, typename Attribute
+            , typename Context, typename Iterator>
+    struct handles_container<karma::delimit_generator<Subject, Delimiter>
+      , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/duplicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/duplicate.hpp
new file mode 100644 (file)
index 0000000..8d9f372
--- /dev/null
@@ -0,0 +1,230 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_DUPLICATE_JUL_11_2010_0954AM)
+#define SPIRIT_KARMA_DUPLICATE_JUL_11_2010_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/make_cons.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at_c.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::duplicate> // enables duplicate
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::duplicate;
+#endif
+    using spirit::duplicate_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T
+          , bool IsSequence = fusion::traits::is_sequence<T>::value>
+        struct attribute_count
+          : fusion::result_of::size<T>
+        {};
+
+        template <>
+        struct attribute_count<unused_type, false>
+          : mpl::int_<0>
+        {};
+
+        template <typename T>
+        struct attribute_count<T, false>
+          : mpl::int_<1>
+        {};
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T
+          , bool IsSequence = fusion::traits::is_sequence<T>::value>
+        struct first_attribute_of_subject
+          : fusion::result_of::at_c<T, 0>
+        {};
+
+        template <typename T>
+        struct first_attribute_of_subject<T, false>
+          : mpl::identity<T>
+        {};
+
+        template <typename T, typename Context, typename Iterator>
+        struct first_attribute_of
+          : first_attribute_of_subject<
+                typename traits::attribute_of<T, Context, Iterator>::type>
+        {};
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Attribute, typename T, int N>
+        struct duplicate_sequence_attribute
+        {
+            typedef typename fusion::result_of::make_cons<
+                reference_wrapper<T const>
+              , typename duplicate_sequence_attribute<Attribute, T, N-1>::type
+            >::type type;
+
+            static type call(T const& t)
+            {
+                return fusion::make_cons(boost::cref(t)
+                  , duplicate_sequence_attribute<Attribute, T, N-1>::call(t));
+            }
+        };
+
+        template <typename Attribute, typename T>
+        struct duplicate_sequence_attribute<Attribute, T, 1>
+        {
+            typedef typename fusion::result_of::make_cons<
+                reference_wrapper<T const> >::type type;
+
+            static type call(T const& t)
+            {
+                return fusion::make_cons(boost::cref(t));
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Attribute, typename T
+          , int N = attribute_count<Attribute>::value
+          , bool IsSequence = fusion::traits::is_sequence<Attribute>::value>
+        struct duplicate_attribute
+        {
+            BOOST_SPIRIT_ASSERT_MSG(N > 0, invalid_duplication_count, (Attribute));
+
+            typedef typename duplicate_sequence_attribute<Attribute, T, N>::type
+                cons_type;
+            typedef typename fusion::result_of::as_vector<cons_type>::type type;
+
+            static type call(T const& t)
+            {
+                return fusion::as_vector(
+                    duplicate_sequence_attribute<Attribute, T, N>::call(t));
+            }
+        };
+
+        template <typename Attribute, typename T>
+        struct duplicate_attribute<Attribute, T, 0, false>
+        {
+            typedef unused_type type;
+
+            static type call(T const&)
+            {
+                return unused;
+            }
+        };
+
+        template <typename Attribute, typename T, int N>
+        struct duplicate_attribute<Attribute, T, N, false>
+        {
+            typedef Attribute const& type;
+
+            static type call(T const& t)
+            {
+                return t;
+            }
+        };
+    }
+
+    template <typename Attribute, typename T>
+    inline typename detail::duplicate_attribute<Attribute, T>::type
+    duplicate_attribute(T const& t)
+    {
+        return detail::duplicate_attribute<Attribute, T>::call(t);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // duplicate_directive duplicate its attribute for all elements of the
+    // subject generator without generating anything itself
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct duplicate_directive : unary_generator<duplicate_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        duplicate_directive(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename Context, typename Iterator = unused_type>
+        struct attribute
+          : detail::first_attribute_of<Subject, Context, Iterator>
+        {};
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            typedef typename traits::attribute_of<Subject, Context>::type
+                subject_attr_type;
+            return subject.generate(sink, ctx, d
+              , duplicate_attribute<subject_attr_type>(attr));
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("duplicate", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::duplicate, Subject, Modifiers>
+    {
+        typedef duplicate_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::duplicate_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::duplicate_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/encoding.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/encoding.hpp
new file mode 100644 (file)
index 0000000..987f7ec
--- /dev/null
@@ -0,0 +1,35 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_ENCODING_MARCH_05_2010_0550PM)
+#define SPIRIT_KARMA_ENCODING_MARCH_05_2010_0550PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables encoding
+    template <typename CharEncoding>
+    struct use_directive<
+            karma::domain, tag::char_code<tag::encoding, CharEncoding> > 
+      : mpl::true_ {};
+
+    template <typename CharEncoding>
+    struct is_modifier_directive<
+            karma::domain, tag::char_code<tag::encoding, CharEncoding> >
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/left_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/left_alignment.hpp
new file mode 100644 (file)
index 0000000..40b5d24
--- /dev/null
@@ -0,0 +1,318 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_LEFT_ALIGNMENT_FEB_27_2007_1216PM)
+#define BOOST_SPIRIT_KARMA_LEFT_ALIGNMENT_FEB_27_2007_1216PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/default_width.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/detail/workaround.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables left_align[]
+    template <>
+    struct use_directive<karma::domain, tag::left_align>
+      : mpl::true_ {};
+
+    // enables left_align(d)[g] and left_align(w)[g], where d is a generator
+    // and w is a maximum width
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::left_align, fusion::vector1<T> > >
+      : mpl::true_ {};
+
+    // enables *lazy* left_align(d)[g], where d provides a generator
+    template <>
+    struct use_lazy_directive<karma::domain, tag::left_align, 1> 
+      : mpl::true_ {};
+
+    // enables left_align(w, d)[g], where d is a generator and w is a maximum 
+    // width
+    template <typename Width, typename Padding>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::left_align, fusion::vector2<Width, Padding> > >
+      : spirit::traits::matches<karma::domain, Padding> {};
+
+    // enables *lazy* left_align(w, d)[g], where d provides a generator and w 
+    // is a maximum width
+    template <>
+    struct use_lazy_directive<karma::domain, tag::left_align, 2> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::left_align;
+#endif
+    using spirit::left_align_type;
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  The left_align_generate template function is used for all the 
+        //  different flavors of the left_align[] directive. 
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter, 
+            typename Attribute, typename Embedded, typename Padding>
+        inline static bool 
+        left_align_generate(OutputIterator& sink, Context& ctx, 
+            Delimiter const& d, Attribute const& attr, Embedded const& e, 
+            unsigned int const width, Padding const& p) 
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            e; // suppresses warning: C4100: 'e' : unreferenced formal parameter
+#endif
+            // wrap the given output iterator to allow counting
+            detail::enable_counting<OutputIterator> counting(sink);
+
+            // first generate the underlying output 
+            bool r = e.generate(sink, ctx, d, attr);
+
+            // pad the output until the max width is reached
+            while(r && counting.count() < width) 
+                r = p.generate(sink, ctx, unused, unused);
+
+            return r;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The simple left alignment directive is used for left_align[...]
+    //  generators. It uses default values for the generated width (defined via
+    //  the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant) and for the padding
+    //  generator (always spaces).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width = detail::default_width>
+    struct simple_left_alignment 
+      : unary_generator<simple_left_alignment<Subject, Width> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::counting | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        simple_left_alignment(Subject const& subject, Width width = Width())
+          : subject(subject), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::left_align_generate(sink, ctx, d, attr,
+                subject, width, compile<karma::domain>(' '));
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("left_align", subject.what(context));
+        }
+
+        Subject subject;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The left alignment directive with padding, is used for generators like
+    //  left_align(padding)[...], where padding is a arbitrary generator
+    //  expression. It uses a default value for the generated width (defined
+    //  via the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Padding
+      , typename Width = detail::default_width>
+    struct padding_left_alignment 
+      : unary_generator<padding_left_alignment<Subject, Padding, Width> >
+    {
+        typedef Subject subject_type;
+        typedef Padding padding_type;
+
+        typedef mpl::int_<
+            generator_properties::counting | 
+            subject_type::properties::value | padding_type::properties::value 
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        padding_left_alignment(Subject const& subject, Padding const& padding
+              , Width width = Width())
+          : subject(subject), padding(padding), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::left_align_generate(sink, ctx, d, attr,
+                subject, width, padding);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("left_align", subject.what(context));
+        }
+
+        Subject subject;
+        Padding padding;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates left_align[] directive generator
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::left_align, Subject, Modifiers>
+    {
+        typedef simple_left_alignment<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    // creates left_align(width)[] directive generator
+    template <typename Width, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::left_align, fusion::vector1<Width> >
+      , Subject, Modifiers
+      , typename enable_if_c< integer_traits<Width>::is_integral >::type>
+    {
+        typedef simple_left_alignment<Subject, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+
+    // creates left_align(pad)[] directive generator
+    template <typename Padding, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::left_align, fusion::vector1<Padding> >
+      , Subject, Modifiers
+      , typename enable_if<
+            mpl::and_<
+                spirit::traits::matches<karma::domain, Padding>,
+                mpl::not_<mpl::bool_<integer_traits<Padding>::is_integral> >
+            >
+        >::type>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_left_alignment<Subject, padding_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<0>(term.args), modifiers));
+        }
+    };
+
+    // creates left_align(width, pad)[] directive generator
+    template <typename Width, typename Padding, typename Subject
+      , typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::left_align, fusion::vector2<Width, Padding> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_left_alignment<Subject, padding_type, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<1>(term.args))
+              , fusion::at_c<0>(term.args));
+        }
+    };
+
+}}} // namespace boost::spirit::karma
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width>
+    struct has_semantic_action<karma::simple_left_alignment<Subject, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename Padding, typename Width>
+    struct has_semantic_action<
+            karma::padding_left_alignment<Subject, Padding, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::simple_left_alignment<Subject, Width>, Attribute
+          , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename Padding, typename Width
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<
+            karma::padding_left_alignment<Subject, Padding, Width>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/maxwidth.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/maxwidth.hpp
new file mode 100644 (file)
index 0000000..e1a271f
--- /dev/null
@@ -0,0 +1,246 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_MAXWIDTH_MAR_18_2009_0827AM)
+#define BOOST_SPIRIT_KARMA_MAXWIDTH_MAR_18_2009_0827AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/default_width.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/detail/workaround.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables maxwidth[]
+    template <>
+    struct use_directive<karma::domain, tag::maxwidth>
+      : mpl::true_ {};
+
+    // enables maxwidth(w)[g], where w provides a maxwidth
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::maxwidth, fusion::vector1<T> > > 
+      : mpl::true_ {};
+
+    // enables *lazy* maxwidth(w)[g], where w provides a maxwidth
+    template <>
+    struct use_lazy_directive<karma::domain, tag::maxwidth, 1> 
+      : mpl::true_ {};
+
+    // enables maxwidth(w, r)[g], where w provides a maxwidth and r is an output
+    // iterator used to receive the rest of the output not fitting into the 
+    // maxwidth limit
+    template <typename T, typename RestIter>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::maxwidth, fusion::vector2<T, RestIter> > > 
+      : mpl::true_ {};
+
+    // enables *lazy* maxwidth(w, r)[g], where w provides a maxwidth and r is 
+    // an output iterator used to receive the rest of the output not fitting 
+    // into the maxwidth limit
+    template <>
+    struct use_lazy_directive<karma::domain, tag::maxwidth, 2> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::maxwidth;
+#endif
+    using spirit::maxwidth_type;
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename RestIterator>
+        bool buffer_copy_rest(detail::enable_buffering<OutputIterator>& buff
+          , std::size_t start_at, RestIterator& dest)
+        {
+            return buff.buffer_copy_rest(dest, start_at);
+        }
+
+        template <typename OutputIterator>
+        bool buffer_copy_rest(detail::enable_buffering<OutputIterator>&
+          , std::size_t, unused_type)
+        {
+            return true;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The maxwidth_generate template function is used for all the 
+        //  different flavors of the maxwidth[] directive. 
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter, 
+            typename Attribute, typename Embedded, typename Rest>
+        inline static bool 
+        maxwidth_generate(OutputIterator& sink, Context& ctx, 
+            Delimiter const& d, Attribute const& attr, Embedded const& e, 
+            unsigned int const maxwidth, Rest& restdest) 
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            e; // suppresses warning: C4100: 'e' : unreferenced formal parameter
+#endif
+            // wrap the given output iterator to allow buffering, but disable 
+            // counting
+            detail::enable_buffering<OutputIterator> buffering(sink);
+
+            // generate the underlying output and copy the embedded 
+            // output to the target output iterator applying the given 
+            // maxwidth
+            bool r = false;
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = e.generate(sink, ctx, d, attr);
+            }   // re-enable counting
+
+            return r && buffering.buffer_copy(maxwidth) &&
+                   buffer_copy_rest(buffering, maxwidth, restdest);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The maxwidth directive is used for maxwidth[...]
+    //  generators. It uses default values for the generated width (defined via
+    //  the BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH constant).
+    // 
+    //  The maxwidth with width directive, is used for generators
+    //  like maxwidth(width)[...]. 
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width = detail::default_max_width
+      , typename Rest = unused_type>
+    struct maxwidth_width
+      : unary_generator<maxwidth_width<Subject, Width, Rest> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::countingbuffer | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        maxwidth_width(Subject const& subject, Width const& w = Width()
+            , Rest const& r = Rest())
+          : subject(subject), width(w), rest(r) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::maxwidth_generate(sink, ctx, d, attr, subject
+              , width, rest);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("maxwidth", subject.what(context));
+        }
+
+        Subject subject;
+        Width width;
+        Rest rest;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates maxwidth[] directive generator
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::maxwidth, Subject, Modifiers>
+    {
+        typedef maxwidth_width<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    // creates maxwidth(width)[] directive generator
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::maxwidth, fusion::vector1<T> >
+      , Subject, Modifiers>
+    {
+        typedef maxwidth_width<Subject, T> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args), unused);
+        }
+    };
+
+    // creates maxwidth(width, restiter)[] directive generator
+    template <
+        typename T, typename RestIter, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::maxwidth, fusion::vector2<T, RestIter> >
+      , Subject, Modifiers>
+    {
+        typedef maxwidth_width<Subject, T, RestIter> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args)
+              , fusion::at_c<1>(term.args));
+        }
+    };
+
+}}} // namespace boost::spirit::karma
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width, typename Rest>
+    struct has_semantic_action<karma::maxwidth_width<Subject, Width, Rest> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::maxwidth_width<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/no_delimit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/no_delimit.hpp
new file mode 100644 (file)
index 0000000..a1c8126
--- /dev/null
@@ -0,0 +1,116 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_NO_DELIMIT_JAN_19_2010_0920AM)
+#define BOOST_SPIRIT_KARMA_NO_DELIMIT_JAN_19_2010_0920AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/unused_delimiter.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::no_delimit>   // enables no_delimit[]
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::no_delimit;
+#endif
+    using spirit::no_delimit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The no_delimit generator is used for no_delimit[...] directives.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct no_delimit_generator 
+      : unary_generator<no_delimit_generator<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        no_delimit_generator(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            //  the no_delimit generator simply dispatches to the embedded 
+            //  generator while supplying unused_delimiter as the new delimiter
+            //  to avoid delimiting down the generator stream
+            typedef detail::unused_delimiter<Delimiter> unused_delimiter;
+
+            // the difference to verbatim[] is that this does not post-delimit
+            return subject.generate(sink, ctx, unused_delimiter(d), attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("no_delimit", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::no_delimit, Subject, Modifiers>
+    {
+        typedef no_delimit_generator<Subject> result_type;
+
+        result_type 
+        operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::no_delimit_generator<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::no_delimit_generator<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/omit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/omit.hpp
new file mode 100644 (file)
index 0000000..d07769e
--- /dev/null
@@ -0,0 +1,135 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_OMIT_JUL_20_2009_1008AM)
+#define SPIRIT_KARMA_OMIT_JUL_20_2009_1008AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::omit> // enables omit
+      : mpl::true_ {};
+
+    template <>
+    struct use_directive<karma::domain, tag::skip> // enables skip
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::omit;
+    using spirit::skip;
+#endif
+    using spirit::omit_type;
+    using spirit::skip_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // omit_directive consumes the attribute of subject generator without
+    // generating anything
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, bool Execute>
+    struct omit_directive : unary_generator<omit_directive<Subject, Execute> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::disabling | subject_type::properties::value
+        > properties;
+
+        omit_directive(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename Context, typename Iterator = unused_type>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            // We need to actually compile the output operation as we don't 
+            // have any other means to verify, whether the passed attribute is 
+            // compatible with the subject. 
+
+            // omit[] will execute the code, while skip[] doesn't execute it
+            if (Execute) {
+                // wrap the given output iterator to avoid output
+                detail::disable_output<OutputIterator> disable(sink);
+                return subject.generate(sink, ctx, d, attr);
+            }
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info(Execute ? "omit" : "skip", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::omit, Subject, Modifiers>
+    {
+        typedef omit_directive<Subject, true> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::skip, Subject, Modifiers>
+    {
+        typedef omit_directive<Subject, false> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, bool Execute>
+    struct has_semantic_action<karma::omit_directive<Subject, Execute> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, bool Execute, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<karma::omit_directive<Subject, Execute>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/repeat.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/repeat.hpp
new file mode 100644 (file)
index 0000000..f6b4378
--- /dev/null
@@ -0,0 +1,397 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_REPEAT_MAY_18_2009_0926AM)
+#define SPIRIT_KARMA_REPEAT_MAY_18_2009_0926AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/operator/kleene.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::repeat>   // enables repeat[p]
+      : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<karma::domain
+      , terminal_ex<tag::repeat                     // enables repeat(exact)[p]
+        , fusion::vector1<T> >
+    > : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<karma::domain
+      , terminal_ex<tag::repeat                     // enables repeat(min, max)[p]
+        , fusion::vector2<T, T> >
+    > : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<karma::domain
+      , terminal_ex<tag::repeat                     // enables repeat(min, inf)[p]
+        , fusion::vector2<T, inf_type> >
+    > : mpl::true_ {};
+
+    template <>                                     // enables *lazy* repeat(exact)[p]
+    struct use_lazy_directive<
+        karma::domain
+      , tag::repeat
+      , 1 // arity
+    > : mpl::true_ {};
+
+    template <>                                     // enables *lazy* repeat(min, max)[p]
+    struct use_lazy_directive<                      // and repeat(min, inf)[p]
+        karma::domain
+      , tag::repeat
+      , 2 // arity
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::repeat;
+    using spirit::inf;
+#endif
+    using spirit::repeat_type;
+    using spirit::inf_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // handles repeat(exact)[p]
+    template <typename T>
+    struct exact_iterator
+    {
+        exact_iterator(T const exact)
+          : exact(exact) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T i) const { return i >= exact; }
+        bool got_min(T i) const { return i >= exact; }
+
+        T const exact;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        exact_iterator& operator= (exact_iterator const&);
+    };
+
+    // handles repeat(min, max)[p]
+    template <typename T>
+    struct finite_iterator
+    {
+        finite_iterator(T const min, T const max)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min)
+          , max BOOST_PREVENT_MACRO_SUBSTITUTION (max) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T i) const { return i >= max; }
+        bool got_min(T i) const { return i >= min; }
+
+        T const min;
+        T const max;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        finite_iterator& operator= (finite_iterator const&);
+    };
+
+    // handles repeat(min, inf)[p]
+    template <typename T>
+    struct infinite_iterator
+    {
+        infinite_iterator(T const min)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T /*i*/) const { return false; }
+        bool got_min(T i) const { return i >= min; }
+
+        T const min;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        infinite_iterator& operator= (infinite_iterator const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename LoopIter, typename Strict
+      , typename Derived>
+    struct base_repeat_generator : unary_generator<Derived>
+    {
+    private:
+        // iterate over the given container until its exhausted or the embedded
+        // generator succeeds
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, mpl::false_) const
+        {
+            // Failing subject generators are just skipped. This allows to 
+            // selectively generate items in the provided attribute.
+            while (!f.is_at_end())
+            {
+                bool r = !f(subject);
+                if (r) 
+                    return true;
+                if (!f.is_at_end())
+                    f.next();
+            }
+            return false;
+        }
+
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, mpl::true_) const
+        {
+            return !f(subject);
+        }
+
+        // There is no way to distinguish a failed generator from a 
+        // generator to be skipped. We assume the user takes responsibility
+        // for ending the loop if no attribute is specified.
+        template <typename F>
+        bool generate_subject(F f, unused_type, mpl::false_) const
+        {
+            return !f(subject);
+        }
+
+    public:
+        typedef Subject subject_type;
+
+        typedef mpl::int_<subject_type::properties::value> properties;
+
+        // Build a std::vector from the subject's attribute. Note
+        // that build_std_vector may return unused_type if the
+        // subject's attribute is an unused_type.
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::build_std_vector<
+                typename traits::attribute_of<Subject, Context, Iterator>::type
+            >
+        {};
+
+        base_repeat_generator(Subject const& subject, LoopIter const& iter)
+          : subject(subject), iter(iter) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter
+            > fail_function;
+
+            typedef typename traits::container_iterator<
+                typename add_const<Attribute>::type
+            >::type iterator_type;
+
+            typedef 
+                typename traits::make_indirect_iterator<iterator_type>::type 
+            indirect_iterator_type;
+
+            typedef detail::pass_container<
+                fail_function, Attribute, indirect_iterator_type, mpl::false_>
+            pass_container;
+
+            iterator_type it = traits::begin(attr);
+            iterator_type end = traits::end(attr);
+
+            pass_container pass(fail_function(sink, ctx, d), 
+                indirect_iterator_type(it), indirect_iterator_type(end));
+
+            // generate the minimal required amount of output
+            typename LoopIter::type i = iter.start();
+            for (/**/; !pass.is_at_end() && !iter.got_min(i); ++i)
+            {
+                if (!generate_subject(pass, attr, Strict()))
+                {
+                    // if we fail before reaching the minimum iteration
+                    // required, do not output anything and return false
+                    return false;
+                }
+            }
+
+            if (pass.is_at_end() && !iter.got_min(i))
+                return false;   // insufficient attribute elements
+
+            // generate some more up to the maximum specified
+            for (/**/; !pass.is_at_end() && !iter.got_max(i); ++i)
+            {
+                if (!generate_subject(pass, attr, Strict()))
+                    break;
+            }
+            return detail::sink_is_good(sink);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("repeat", subject.what(context));
+        }
+
+        Subject subject;
+        LoopIter iter;
+    };
+
+    template <typename Subject, typename LoopIter>
+    struct repeat_generator 
+      : base_repeat_generator<
+            Subject, LoopIter, mpl::false_
+          , repeat_generator<Subject, LoopIter> >
+    {
+        typedef base_repeat_generator<
+            Subject, LoopIter, mpl::false_, repeat_generator
+        > base_repeat_generator_;
+
+        repeat_generator(Subject const& subject, LoopIter const& iter)
+          : base_repeat_generator_(subject, iter) {}
+    };
+
+    template <typename Subject, typename LoopIter>
+    struct strict_repeat_generator 
+      : base_repeat_generator<
+            Subject, LoopIter, mpl::true_
+          , strict_repeat_generator<Subject, LoopIter> >
+    {
+        typedef base_repeat_generator<
+            Subject, LoopIter, mpl::true_, strict_repeat_generator
+        > base_repeat_generator_;
+
+        strict_repeat_generator(Subject const& subject, LoopIter const& iter)
+          : base_repeat_generator_(subject, iter) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::repeat, Subject, Modifiers>
+    {
+        typedef typename mpl::if_<
+            detail::get_stricttag<Modifiers>
+          , strict_kleene<Subject>, kleene<Subject>
+        >::type result_type;
+
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat, fusion::vector1<T> >, Subject, Modifiers>
+    {
+        typedef exact_iterator<T> iterator_type;
+
+        typedef typename mpl::if_<
+            detail::get_stricttag<Modifiers>
+          , strict_repeat_generator<Subject, iterator_type>
+          , repeat_generator<Subject, iterator_type>
+        >::type result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat, fusion::vector2<T, T> >, Subject, Modifiers>
+    {
+        typedef finite_iterator<T> iterator_type;
+
+        typedef typename mpl::if_<
+            detail::get_stricttag<Modifiers>
+          , strict_repeat_generator<Subject, iterator_type>
+          , repeat_generator<Subject, iterator_type>
+        >::type result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject,
+                iterator_type(
+                    fusion::at_c<0>(term.args)
+                  , fusion::at_c<1>(term.args)
+                )
+            );
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat
+        , fusion::vector2<T, inf_type> >, Subject, Modifiers>
+    {
+        typedef infinite_iterator<T> iterator_type;
+
+        typedef typename mpl::if_<
+            detail::get_stricttag<Modifiers>
+          , strict_repeat_generator<Subject, iterator_type>
+          , repeat_generator<Subject, iterator_type>
+        >::type result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename LoopIter>
+    struct has_semantic_action<karma::repeat_generator<Subject, LoopIter> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename LoopIter>
+    struct has_semantic_action<karma::strict_repeat_generator<Subject, LoopIter> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename LoopIter, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::repeat_generator<Subject, LoopIter>, Attribute
+          , Context, Iterator> 
+      : mpl::true_ {};
+
+    template <typename Subject, typename LoopIter, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::strict_repeat_generator<Subject, LoopIter>, Attribute
+          , Context, Iterator> 
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/right_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/right_alignment.hpp
new file mode 100644 (file)
index 0000000..50563f9
--- /dev/null
@@ -0,0 +1,327 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_RIGHT_ALIGNMENT_FEB_27_2007_1216PM)
+#define BOOST_SPIRIT_KARMA_RIGHT_ALIGNMENT_FEB_27_2007_1216PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/default_width.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/detail/workaround.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables right_align[]
+    template <>
+    struct use_directive<karma::domain, tag::right_align>
+      : mpl::true_ {};
+
+    // enables right_align(d)[g] and right_align(w)[g], where d is a generator
+    // and w is a maximum width
+    template <typename T>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::right_align, fusion::vector1<T> > >
+      : mpl::true_ {};
+
+    // enables *lazy* right_align(d)[g], where d provides a generator
+    template <>
+    struct use_lazy_directive<karma::domain, tag::right_align, 1> 
+      : mpl::true_ {};
+
+    // enables right_align(w, d)[g], where d is a generator and w is a maximum 
+    // width
+    template <typename Width, typename Padding>
+    struct use_directive<karma::domain
+          , terminal_ex<tag::right_align, fusion::vector2<Width, Padding> > >
+      : spirit::traits::matches<karma::domain, Padding> {};
+
+    // enables *lazy* right_align(w, d)[g], where d provides a generator and w 
+    // is a maximum width
+    template <>
+    struct use_lazy_directive<karma::domain, tag::right_align, 2> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::right_align;
+#endif
+    using spirit::right_align_type;
+
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  The right_align_generate template function is used for all the 
+        //  different flavors of the right_align[] directive. 
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter, 
+            typename Attribute, typename Embedded, typename Padding>
+        inline static bool 
+        right_align_generate(OutputIterator& sink, Context& ctx, 
+            Delimiter const& d, Attribute const& attr, Embedded const& e, 
+            unsigned int const width, Padding const& p) 
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            e; // suppresses warning: C4100: 'e' : unreferenced formal parameter
+#endif
+            // wrap the given output iterator to allow left padding
+            detail::enable_buffering<OutputIterator> buffering(sink, width);
+            bool r = false;
+
+            // first generate the embedded output 
+            {
+                detail::disable_counting<OutputIterator> nocounting(sink);
+                r = e.generate(sink, ctx, d, attr);
+            }   // re-enable counting
+
+            buffering.disable();    // do not perform buffering any more
+
+            // generate the left padding
+            detail::enable_counting<OutputIterator> counting(sink, buffering.buffer_size());
+            while(r && counting.count() < width) 
+                r = p.generate(sink, ctx, unused, unused);
+
+            // copy the buffered output to the target output iterator
+            if (r) 
+                buffering.buffer_copy();
+            return r;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The simple left alignment directive is used for right_align[...]
+    //  generators. It uses default values for the generated width (defined via
+    //  the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant) and for the padding
+    //  generator (always spaces).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width = detail::default_width>
+    struct simple_right_alignment 
+      : unary_generator<simple_right_alignment<Subject, Width> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::countingbuffer | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        simple_right_alignment(Subject const& subject, Width width = Width())
+          : subject(subject), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::right_align_generate(sink, ctx, d, attr,
+                subject, width, compile<karma::domain>(' '));
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("right_align", subject.what(context));
+        }
+
+        Subject subject;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The left alignment directive with padding, is used for generators like
+    //  right_align(padding)[...], where padding is a arbitrary generator
+    //  expression. It uses a default value for the generated width (defined
+    //  via the BOOST_KARMA_DEFAULT_FIELD_LENGTH constant).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Padding
+      , typename Width = detail::default_width>
+    struct padding_right_alignment 
+      : unary_generator<padding_right_alignment<Subject, Padding, Width> >
+    {
+        typedef Subject subject_type;
+        typedef Padding padding_type;
+
+        typedef mpl::int_<
+            generator_properties::countingbuffer |
+            subject_type::properties::value | padding_type::properties::value 
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        padding_right_alignment(Subject const& subject, Padding const& padding
+              , Width width = Width())
+          : subject(subject), padding(padding), width(width) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            return detail::right_align_generate(sink, ctx, d, attr,
+                subject, width, padding);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("right_align", subject.what(context));
+        }
+
+        Subject subject;
+        Padding padding;
+        Width width;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates right_align[] directive generator
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::right_align, Subject, Modifiers>
+    {
+        typedef simple_right_alignment<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    // creates right_align(width)[] directive generator
+    template <typename Width, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::right_align, fusion::vector1<Width> >
+      , Subject, Modifiers
+      , typename enable_if_c< integer_traits<Width>::is_integral >::type>
+    {
+        typedef simple_right_alignment<Subject, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+
+    // creates right_align(pad)[] directive generator
+    template <typename Padding, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::right_align, fusion::vector1<Padding> >
+      , Subject, Modifiers
+      , typename enable_if<
+            mpl::and_<
+                spirit::traits::matches<karma::domain, Padding>,
+                mpl::not_<mpl::bool_<integer_traits<Padding>::is_integral> >
+            >
+        >::type>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_right_alignment<Subject, padding_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<0>(term.args), modifiers));
+        }
+    };
+
+    // creates right_align(width, pad)[] directive generator
+    template <typename Width, typename Padding, typename Subject
+      , typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::right_align, fusion::vector2<Width, Padding> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Padding, Modifiers>::type
+        padding_type;
+
+        typedef padding_right_alignment<Subject, padding_type, Width> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<1>(term.args), modifiers)
+              , fusion::at_c<0>(term.args));
+        }
+    };
+
+}}} // namespace boost::spirit::karma
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width>
+    struct has_semantic_action<karma::simple_right_alignment<Subject, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename Padding, typename Width>
+    struct has_semantic_action<
+            karma::padding_right_alignment<Subject, Padding, Width> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Width, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+            karma::simple_right_alignment<Subject, Width>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename Padding, typename Width
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<
+            karma::padding_right_alignment<Subject, Padding, Width>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/strict_relaxed.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/strict_relaxed.hpp
new file mode 100644 (file)
index 0000000..88d6202
--- /dev/null
@@ -0,0 +1,78 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_STRICT_RELAXED_APR_22_2010_0959AM)
+#define SPIRIT_STRICT_RELAXED_APR_22_2010_0959AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::strict>  // enables strict[]
+      : mpl::true_ {};
+
+    template <>
+    struct use_directive<karma::domain, tag::relaxed> // enables relaxed[]
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct is_modifier_directive<karma::domain, tag::strict>
+      : mpl::true_ {};
+
+    template <>
+    struct is_modifier_directive<karma::domain, tag::relaxed>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Don't add tag::strict or tag::relaxed if there is already one of those 
+    // in the modifier list
+    template <typename Current>
+    struct compound_modifier<Current, tag::strict
+          , typename enable_if<has_modifier<Current, tag::relaxed> >::type>
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, tag::strict const&)
+          : Current(current) {}
+    };
+
+    template <typename Current>
+    struct compound_modifier<Current, tag::relaxed
+          , typename enable_if<has_modifier<Current, tag::strict> >::type>
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, tag::relaxed const&)
+          : Current(current) {}
+    };
+
+    namespace karma
+    {
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+        using boost::spirit::strict;
+        using boost::spirit::relaxed;
+#endif
+        using boost::spirit::strict_type;
+        using boost::spirit::relaxed_type;
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/upper_lower_case.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/upper_lower_case.hpp
new file mode 100644 (file)
index 0000000..684fa5f
--- /dev/null
@@ -0,0 +1,85 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM)
+#define SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_directive<
+        karma::domain, tag::char_code<tag::upper, CharEncoding> > // enables upper
+      : mpl::true_ {};
+
+    template <typename CharEncoding>
+    struct use_directive<
+        karma::domain, tag::char_code<tag::lower, CharEncoding> > // enables lower
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct is_modifier_directive<karma::domain
+        , tag::char_code<tag::upper, CharEncoding> >
+      : mpl::true_ {};
+
+    template <typename CharEncoding>
+    struct is_modifier_directive<karma::domain
+        , tag::char_code<tag::lower, CharEncoding> >
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Don't add tag::upper or tag::lower if there is already one of those in
+    // the modifier list
+    template <typename Current, typename CharEncoding>
+    struct compound_modifier<
+            Current
+          , tag::char_code<tag::upper, CharEncoding>
+          , typename enable_if<
+                has_modifier<Current, tag::char_code<tag::lower, CharEncoding> > 
+            >::type
+          >
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, 
+                tag::char_code<tag::upper, CharEncoding> const&)
+          : Current(current) {}
+    };
+
+    template <typename Current, typename CharEncoding>
+    struct compound_modifier<
+            Current
+          , tag::char_code<tag::lower, CharEncoding>
+          , typename enable_if<
+                has_modifier<Current, tag::char_code<tag::upper, CharEncoding> > 
+            >::type
+          >
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, 
+                tag::char_code<tag::lower, CharEncoding> const&)
+          : Current(current) {}
+    };
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/verbatim.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/directive/verbatim.hpp
new file mode 100644 (file)
index 0000000..b6b1680
--- /dev/null
@@ -0,0 +1,114 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_VERBATIM_MAR_02_2007_0303PM)
+#define BOOST_SPIRIT_KARMA_VERBATIM_MAR_02_2007_0303PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/detail/unused_delimiter.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<karma::domain, tag::verbatim>   // enables verbatim[]
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::verbatim;
+#endif
+    using spirit::verbatim_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The verbatim generator is used for verbatim[...] directives.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct verbatim_generator : unary_generator<verbatim_generator<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        verbatim_generator(Subject const& subject)
+          : subject(subject) {}
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            //  the verbatim generator simply dispatches to the embedded 
+            //  generator while supplying unused_delimiter as the new delimiter
+            //  to avoid delimiting down the generator stream
+            typedef detail::unused_delimiter<Delimiter> unused_delimiter;
+
+            return subject.generate(sink, ctx, unused_delimiter(d), attr) &&
+                   karma::delimit_out(sink, d);     // always do post-delimiting 
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("verbatim", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::verbatim, Subject, Modifiers>
+    {
+        typedef verbatim_generator<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::verbatim_generator<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::verbatim_generator<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/domain.hpp
new file mode 100644 (file)
index 0000000..8ef771d
--- /dev/null
@@ -0,0 +1,74 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DOMAIN_FEB_20_2007_0943AM)
+#define BOOST_SPIRIT_KARMA_DOMAIN_FEB_20_2007_0943AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    // karma's domain
+    struct domain {};
+
+    // bring in some of spirit parts into spirit::karma
+    using spirit::unused;
+    using spirit::unused_type;
+    using spirit::compile;
+    using spirit::info;
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+        BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+        using spirit::_pass_type;
+        using spirit::_val_type;
+        using spirit::_a_type;
+        using spirit::_b_type;
+        using spirit::_c_type;
+        using spirit::_d_type;
+        using spirit::_e_type;
+        using spirit::_f_type;
+        using spirit::_g_type;
+        using spirit::_h_type;
+        using spirit::_i_type;
+        using spirit::_j_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+        using spirit::_pass;
+        using spirit::_val;
+        using spirit::_a;
+        using spirit::_b;
+        using spirit::_c;
+        using spirit::_d;
+        using spirit::_e;
+        using spirit::_f;
+        using spirit::_g;
+        using spirit::_h;
+        using spirit::_i;
+        using spirit::_j;
+
+#endif
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/format.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/format.hpp
new file mode 100644 (file)
index 0000000..a6aaa3f
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_DEC_01_2009_0716AM)
+#define BOOST_SPIRIT_KARMA_FORMAT_DEC_01_2009_0716AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/stream/format_manip.hpp>
+#include <boost/spirit/home/karma/stream/format_manip_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/format_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/format_auto.hpp
new file mode 100644 (file)
index 0000000..183ea7e
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_AUTO_DEC_02_2009_1248PM)
+#define BOOST_SPIRIT_KARMA_FORMAT_AUTO_DEC_02_2009_1248PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/stream/format_manip.hpp>
+#include <boost/spirit/home/karma/stream/detail/format_manip_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/generate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/generate.hpp
new file mode 100644 (file)
index 0000000..68f9b18
--- /dev/null
@@ -0,0 +1,232 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_GENERATE_DEC_01_2009_0734PM)
+#define BOOST_SPIRIT_KARMA_GENERATE_DEC_01_2009_0734PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/karma/detail/generate.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Expr>
+    inline bool
+    generate(
+        OutputIterator& sink
+      , Expr const& expr)
+    {
+        return detail::generate_impl<Expr>::call(sink, expr);
+    }
+
+    template <typename OutputIterator, typename Expr>
+    inline bool
+    generate(
+        OutputIterator const& sink_
+      , Expr const& expr)
+    {
+        OutputIterator sink = sink_;
+        return karma::generate(sink, expr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct make_context
+        {
+            typedef context<fusion::cons<T const&>, locals<> > type;
+        };
+
+        template <>
+        struct make_context<unused_type>
+        {
+            typedef unused_type type;
+        };
+    }
+
+    template <typename OutputIterator, typename Properties, typename Expr
+      , typename Attr>
+    inline bool
+    generate(
+        detail::output_iterator<OutputIterator, Properties>& sink
+      , Expr const& expr
+      , Attr const& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+
+        typename detail::make_context<Attr>::type context(attr);
+        return compile<karma::domain>(expr).generate(sink, context, unused, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Attr>
+    inline bool
+    generate(
+        OutputIterator& sink_
+      , Expr const& expr
+      , Attr const& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Expr>::type
+        > properties;
+
+        // wrap user supplied iterator into our own output iterator
+        detail::output_iterator<OutputIterator
+          , mpl::int_<properties::value> > sink(sink_);
+        return karma::generate(sink, expr, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Attr>
+    inline bool
+    generate(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Attr const& attr)
+    {
+        OutputIterator sink = sink_;
+        return karma::generate(sink, expr, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Expr, typename Delimiter>
+    inline bool
+    generate_delimited(
+        OutputIterator& sink
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit = 
+            delimit_flag::dont_predelimit)
+    {
+        return detail::generate_delimited_impl<Expr>::call(
+            sink, expr, delimiter, pre_delimit);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter>
+    inline bool
+    generate_delimited(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit = 
+            delimit_flag::dont_predelimit)
+    {
+        OutputIterator sink = sink_;
+        return karma::generate_delimited(sink, expr, delimiter, pre_delimit);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Properties, typename Expr
+      , typename Delimiter, typename Attribute>
+    inline bool
+    generate_delimited(
+        detail::output_iterator<OutputIterator, Properties>& sink
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , Attribute const& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+
+        typename result_of::compile<karma::domain, Delimiter>::type const 
+            delimiter_ = compile<karma::domain>(delimiter);
+
+        if (pre_delimit == delimit_flag::predelimit &&
+            !karma::delimit_out(sink, delimiter_))
+        {
+            return false;
+        }
+
+        typename detail::make_context<Attribute>::type context(attr);
+        return compile<karma::domain>(expr).
+            generate(sink, context, delimiter_, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , typename Attribute>
+    inline bool
+    generate_delimited(
+        OutputIterator& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , Attribute const& attr)
+    {
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Expr>::type
+        > properties;
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Delimiter>::type
+        > delimiter_properties;
+
+        // wrap user supplied iterator into our own output iterator
+        detail::output_iterator<OutputIterator
+          , mpl::int_<properties::value | delimiter_properties::value>
+        > sink(sink_);
+        return karma::generate_delimited(sink, expr, delimiter, pre_delimit, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , typename Attribute>
+    inline bool
+    generate_delimited(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , Attribute const& attr)
+    {
+        OutputIterator sink = sink_;
+        return karma::generate_delimited(sink, expr, delimiter, pre_delimit, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , typename Attribute>
+    inline bool
+    generate_delimited(
+        OutputIterator& sink
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , Attribute const& attr)
+    {
+        return karma::generate_delimited(sink, expr, delimiter
+          , delimit_flag::dont_predelimit, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , typename Attribute>
+    inline bool
+    generate_delimited(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , Attribute const& attr)
+    {
+        OutputIterator sink = sink_;
+        return karma::generate_delimited(sink, expr, delimiter
+          , delimit_flag::dont_predelimit, attr);
+    }
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/generate_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/generate_attr.hpp
new file mode 100644 (file)
index 0000000..e2b6e18
--- /dev/null
@@ -0,0 +1,212 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_KARMA_GENERATE_ATTR_APR_23_2009_0541PM)
+#define BOOST_SPIRIT_KARMA_GENERATE_ATTR_APR_23_2009_0541PM
+
+#include <boost/spirit/home/karma/generate.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/karma/generate_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE(z, n, A)                       \
+    BOOST_PP_CAT(A, n) const&
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Properties, typename Expr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate(
+        detail::output_iterator<OutputIterator, Properties>& sink
+      , Expr const& expr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return compile<karma::domain>(expr).generate(sink, unused, unused, attr);
+    }
+
+    template <typename OutputIterator, typename Expr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate(
+        OutputIterator& sink_
+      , Expr const& expr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Expr>::type
+        > properties;
+
+        // wrap user supplied iterator into our own output iterator
+        detail::output_iterator<OutputIterator
+          , mpl::int_<properties::value> > sink(sink_);
+        return karma::generate(sink, expr, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    template <typename OutputIterator, typename Expr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        OutputIterator sink = sink_;
+        return karma::generate(sink, expr, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Properties, typename Expr
+      , typename Delimiter, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate_delimited(
+        detail::output_iterator<OutputIterator, Properties>& sink
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+
+        typename result_of::compile<karma::domain, Delimiter>::type const 
+            delimiter_ = compile<karma::domain>(delimiter);
+
+        if (pre_delimit == delimit_flag::predelimit &&
+            !karma::delimit_out(sink, delimiter_))
+        {
+            return false;
+        }
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return compile<karma::domain>(expr).
+            generate(sink, unused, delimiter_, attr);
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate_delimited(
+        OutputIterator& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Expr>::type
+        > properties;
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Delimiter>::type
+        > delimiter_properties;
+
+        // wrap user supplied iterator into our own output iterator
+        detail::output_iterator<OutputIterator
+          , mpl::int_<properties::value | delimiter_properties::value>
+        > sink(sink_);
+        return karma::generate_delimited(sink, expr, delimiter, pre_delimit
+          , BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate_delimited(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        OutputIterator sink = sink_;
+        return karma::generate_delimited(sink, expr, delimiter, pre_delimit
+          , BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate_delimited(
+        OutputIterator& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Expr>::type
+        > properties;
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Delimiter>::type
+        > delimiter_properties;
+
+        // wrap user supplied iterator into our own output iterator
+        detail::output_iterator<OutputIterator
+          , mpl::int_<properties::value | delimiter_properties::value>
+        > sink(sink_);
+        return karma::generate_delimited(sink, expr, delimiter
+          , delimit_flag::dont_predelimit, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    template <typename OutputIterator, typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    generate_delimited(
+        OutputIterator const& sink_
+      , Expr const& expr
+      , Delimiter const& delimiter
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        OutputIterator sink = sink_;
+        return karma::generate_delimited(sink, expr, delimiter 
+          , delimit_flag::dont_predelimit, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+}}}
+
+#undef BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/generator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/generator.hpp
new file mode 100644 (file)
index 0000000..a8f06c6
--- /dev/null
@@ -0,0 +1,159 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_GENERATOR_JANUARY_13_2009_1002AM)
+#define BOOST_SPIRIT_GENERATOR_JANUARY_13_2009_1002AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    struct generator_properties
+    {
+        enum enum_type {
+            no_properties = 0,
+            buffering = 0x01,        // generator requires buffering
+            counting = 0x02,         // generator requires counting
+            tracking = 0x04,         // generator requires position tracking
+            disabling = 0x08,        // generator requires disabling of output
+
+            countingbuffer = 0x03,   // buffering | counting
+            all_properties = 0x0f    // buffering | counting | tracking | disabling
+        };
+    };
+
+    template <typename Derived>
+    struct generator
+    {
+        struct generator_id;
+        typedef mpl::int_<generator_properties::no_properties> properties;
+        typedef Derived derived_type;
+        typedef karma::domain domain;
+
+        // Requirement: g.generate(o, context, delimiter, attr) -> bool
+        //
+        //  g:          a generator
+        //  o:          output iterator
+        //  context:    enclosing rule context (can be unused_type)
+        //  delimit:    delimiter (can be unused_type)
+        //  attr:       attribute (can be unused_type)
+
+        // Requirement: g.what(context) -> info
+        //
+        //  g:          a generator
+        //  context:    enclosing rule context (can be unused_type)
+
+        // Requirement: G::template attribute<Ctx, Iter>::type
+        //
+        //  G:          a generator type
+        //  Ctx:        A context type (can be unused_type)
+        //  Iter:       An iterator type (always unused_type)
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+
+    template <typename Derived>
+    struct primitive_generator : generator<Derived>
+    {
+        struct primitive_generator_id;
+    };
+
+    template <typename Derived>
+    struct nary_generator : generator<Derived>
+    {
+        struct nary_generator_id;
+
+        // Requirement: g.elements -> fusion sequence
+        //
+        // g:   a composite generator
+
+        // Requirement: G::elements_type -> fusion sequence
+        //
+        // G:   a composite generator type
+    };
+
+    template <typename Derived>
+    struct unary_generator : generator<Derived>
+    {
+        struct unary_generator_id;
+
+        // Requirement: g.subject -> subject generator
+        //
+        // g:   a unary generator
+
+        // Requirement: G::subject_type -> subject generator type
+        //
+        // G:   a unary generator type
+    };
+
+    template <typename Derived>
+    struct binary_generator : generator<Derived>
+    {
+        struct binary_generator_id;
+
+        // Requirement: g.left -> left generator
+        //
+        // g:   a binary generator
+
+        // Requirement: G::left_type -> left generator type
+        //
+        // G:   a binary generator type
+
+        // Requirement: g.right -> right generator
+        //
+        // g:   a binary generator
+
+        // Requirement: G::right_type -> right generator type
+        //
+        // G:   a binary generator type
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        // generator tags
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(generator_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_generator_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_generator_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_generator_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(binary_generator_id)
+    }
+
+    // check for generator tags
+    template <typename T>
+    struct is_generator : detail::has_generator_id<T> {};
+
+    template <typename T>
+    struct is_primitive_generator : detail::has_primitive_generator_id<T> {};
+
+    template <typename T>
+    struct is_nary_generator : detail::has_nary_generator_id<T> {};
+
+    template <typename T>
+    struct is_unary_generator : detail::has_unary_generator_id<T> {};
+
+    template <typename T>
+    struct is_binary_generator : detail::has_binary_generator_id<T> {};
+
+    // check for generator properties
+    template <typename T>
+    struct properties_of : T::properties {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/meta_compiler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/meta_compiler.hpp
new file mode 100644 (file)
index 0000000..9928579
--- /dev/null
@@ -0,0 +1,177 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_META_COMPILER_JANUARY_13_2009_1011AM)
+#define BOOST_SPIRIT_KARMA_META_COMPILER_JANUARY_13_2009_1011AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename T>
+    struct use_terminal<karma::domain, T
+      , typename enable_if<traits::is_generator<T> >::type> // enables generators
+      : mpl::true_ {};
+
+    namespace karma
+    {
+        template <typename T, typename Modifiers, typename Enable = void>
+        struct make_primitive // by default, return it as-is
+        {
+            typedef T result_type;
+
+            template <typename T_>
+            T_& operator()(T_& val, unused_type) const
+            {
+                return val;
+            }
+
+            template <typename T_>
+            T_ const& operator()(T_ const& val, unused_type) const
+            {
+                return val;
+            }
+        };
+
+        template <typename Tag, typename Elements
+          , typename Modifiers, typename Enable = void>
+        struct make_composite;
+
+        template <typename Directive, typename Body
+          , typename Modifiers, typename Enable = void>
+        struct make_directive
+        {
+            typedef Body result_type;
+            result_type operator()(unused_type, Body const& body, unused_type) const
+            {
+                return body; // By default, a directive simply returns its subject
+            }
+        };
+    }
+
+    // Karma primitive meta-compiler
+    template <>
+    struct make_component<karma::domain, proto::tag::terminal>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename karma::make_primitive<
+                typename remove_const<typename Elements::car_type>::type
+              , typename remove_reference<Modifiers>::type
+            >::result_type type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            typedef typename remove_const<typename Elements::car_type>::type term;
+            return karma::make_primitive<term, Modifiers>()(elements.car, modifiers);
+        }
+    };
+
+    // Karma composite meta-compiler
+    template <typename Tag>
+    struct make_component<karma::domain, Tag>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                karma::make_composite<Tag, Elements
+                  , typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return karma::make_composite<Tag, Elements, Modifiers>()(
+                elements, modifiers);
+        }
+    };
+
+    // Karma function meta-compiler
+    template <>
+    struct make_component<karma::domain, proto::tag::function>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                karma::make_composite<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename Elements::cdr_type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return karma::make_composite<
+                typename remove_const<typename Elements::car_type>::type,
+                typename Elements::cdr_type,
+                Modifiers>()(elements.cdr, modifiers);
+        }
+    };
+
+    // Karma directive meta-compiler
+    template <>
+    struct make_component<karma::domain, tag::directive>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                karma::make_directive<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename remove_const<typename Elements::cdr_type::car_type>::type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return karma::make_directive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_const<typename Elements::cdr_type::car_type>::type,
+                Modifiers>()(elements.car, elements.cdr.car, modifiers);
+        }
+    };
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal.hpp
new file mode 100644 (file)
index 0000000..3425bf3
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_NONTERMINAL_MAR_05_2007_0539PM)
+#define BOOST_SPIRIT_KARMA_NONTERMINAL_MAR_05_2007_0539PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/nonterminal/rule.hpp>
+#include <boost/spirit/home/karma/nonterminal/grammar.hpp>
+#include <boost/spirit/home/karma/nonterminal/debug_handler.hpp>
+#include <boost/spirit/home/karma/nonterminal/simple_trace.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler.hpp
new file mode 100644 (file)
index 0000000..07d5a3e
--- /dev/null
@@ -0,0 +1,134 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DEBUG_HANDLER_APR_21_2010_0148PM)
+#define BOOST_SPIRIT_KARMA_DEBUG_HANDLER_APR_21_2010_0148PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/nonterminal/rule.hpp>
+#include <boost/spirit/home/karma/nonterminal/debug_handler_state.hpp>
+#include <boost/function.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <iostream>
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <
+        typename OutputIterator, typename Context, typename Delimiter
+      , typename Properties, typename F>
+    struct debug_handler
+    {
+        typedef detail::output_iterator<OutputIterator, Properties> 
+            output_iterator;
+        typedef detail::enable_buffering<output_iterator> buffer_type;
+
+        typedef function<bool(output_iterator&, Context&, Delimiter const&)>
+            function_type;
+
+        debug_handler(function_type subject, F f, std::string const& rule_name)
+          : subject(subject)
+          , f(f)
+          , rule_name(rule_name)
+        {}
+
+        bool operator()(output_iterator& sink, Context& context
+          , Delimiter const& delim) const
+        {
+            buffer_type buffer(sink);
+            bool r = false;
+
+            f (sink, context, pre_generate, rule_name, buffer);
+            {
+                detail::disable_counting<output_iterator> nocount(sink);
+                r = subject(sink, context, delim);
+            }
+
+            if (r) 
+            {
+                f (sink, context, successful_generate, rule_name, buffer);
+                buffer.buffer_copy();
+                return true;
+            }
+            f (sink, context, failed_generate, rule_name, buffer);
+            return false;
+        }
+
+        function_type subject;
+        F f;
+        std::string rule_name;
+    };
+
+    template <typename OutputIterator
+      , typename T1, typename T2, typename T3, typename T4, typename F>
+    void debug(rule<OutputIterator, T1, T2, T3, T4>& r, F f)
+    {
+        typedef rule<OutputIterator, T1, T2, T3, T4> rule_type;
+
+        typedef
+            debug_handler<
+                OutputIterator
+              , typename rule_type::context_type
+              , typename rule_type::delimiter_type
+              , typename rule_type::properties
+              , F>
+        debug_handler;
+        r.f = debug_handler(r.f, f, r.name());
+    }
+
+    struct simple_trace;
+
+    namespace detail 
+    {
+        // This class provides an extra level of indirection through a
+        // template to produce the simple_trace type. This way, the use
+        // of simple_trace below is hidden behind a dependent type, so
+        // that compilers eagerly type-checking template definitions
+        // won't complain that simple_trace is incomplete.
+        template<typename T>
+        struct get_simple_trace 
+        {
+            typedef simple_trace type;
+        };
+    }
+
+    template <typename OutputIterator
+      , typename T1, typename T2, typename T3, typename T4>
+    void debug(rule<OutputIterator, T1, T2, T3, T4>& r)
+    {
+        typedef rule<OutputIterator, T1, T2, T3, T4> rule_type;
+
+        typedef
+            debug_handler<
+                OutputIterator
+              , typename rule_type::context_type
+              , typename rule_type::delimiter_type
+              , typename rule_type::properties
+              , simple_trace>
+        debug_handler;
+        typedef typename karma::detail::get_simple_trace<OutputIterator>::type 
+          trace;
+        r.f = debug_handler(r.f, trace(), r.name());
+    }
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+//  Utility macro for easy enabling of rule and grammar debugging
+#if !defined(BOOST_SPIRIT_DEBUG_NODE)
+  #if defined(BOOST_SPIRIT_KARMA_DEBUG)
+    #define BOOST_SPIRIT_DEBUG_NODE(r)  r.name(#r); debug(r)
+  #else
+    #define BOOST_SPIRIT_DEBUG_NODE(r)  r.name(#r);
+  #endif
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler_state.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/debug_handler_state.hpp
new file mode 100644 (file)
index 0000000..cffe9d1
--- /dev/null
@@ -0,0 +1,23 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_DEBUG_HANDLER_STATE_APR_21_2010_0736PM)
+#define BOOST_SPIRIT_KARMA_DEBUG_HANDLER_STATE_APR_21_2010_0736PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace karma
+{
+    enum debug_handler_state
+    {
+        pre_generate
+      , successful_generate
+      , failed_generate
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/fcall.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/fcall.hpp
new file mode 100644 (file)
index 0000000..8a5cf17
--- /dev/null
@@ -0,0 +1,53 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+    <boost/spirit/home/karma/nonterminal/detail/fcall.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+    typename lazy_enable_if_c<
+        (params_size == N)
+      , proto::terminal<
+            spirit::karma::parameterized_nonterminal<
+                parameterized_subject_type
+              , fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> >
+        >
+    >::type
+    operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& f)) const
+    {
+        typedef fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> vector_type;
+        typedef spirit::karma::parameterized_nonterminal<
+            parameterized_subject_type, vector_type> parameterized_type;
+        typedef typename proto::terminal<parameterized_type>::type result_type;
+
+        return result_type::make(
+            parameterized_type(
+                this->get_parameterized_subject()
+              , fusion::make_vector(BOOST_PP_ENUM_PARAMS(N, f)))
+        );
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp
new file mode 100644 (file)
index 0000000..ea9516f
--- /dev/null
@@ -0,0 +1,86 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_GENERATOR_BINDER_APR_17_2009_0952PM)
+#define BOOST_SPIRIT_GENERATOR_BINDER_APR_17_2009_0952PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    // generator_binder for plain rules
+    template <typename Generator, typename Auto>
+    struct generator_binder
+    {
+        generator_binder(Generator const& g)
+          : g(g) {}
+
+        template <typename OutputIterator, typename Delimiter, typename Context>
+        bool call(OutputIterator& sink, Context& context
+          , Delimiter const& delim, mpl::true_) const
+        {
+            // If DeducedAuto is false (semantic actions is present), the 
+            // component's attribute is unused.
+            return g.generate(sink, context, delim, unused);
+        }
+
+        template <typename OutputIterator, typename Delimiter, typename Context>
+        bool call(OutputIterator& sink, Context& context
+          , Delimiter const& delim, mpl::false_) const
+        {
+            // If DeducedAuto is true (no semantic action), we pass the rule's 
+            // attribute on to the component.
+            return g.generate(sink, context, delim
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        template <typename OutputIterator, typename Delimiter, typename Context>
+        bool operator()(OutputIterator& sink, Context& context
+          , Delimiter const& delim) const
+        {
+            // If Auto is false, we need to deduce whether to apply auto rule
+            typedef typename traits::has_semantic_action<Generator>::type auto_rule;
+            return call(sink, context, delim, auto_rule());
+        }
+
+        Generator g;
+    };
+
+    // generator_binder for auto rules
+    template <typename Generator>
+    struct generator_binder<Generator, mpl::true_>
+    {
+        generator_binder(Generator const& g)
+          : g(g) {}
+
+        template <typename OutputIterator, typename Delimiter, typename Context>
+        bool operator()(OutputIterator& sink, Context& context
+          , Delimiter const& delim) const
+        {
+            // If Auto is true, the component's attribute is unused.
+            return g.generate(sink, context, delim
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        Generator g;
+    };
+
+    template <typename Auto, typename Generator>
+    inline generator_binder<Generator, Auto>
+    bind_generator(Generator const& g)
+    {
+        return generator_binder<Generator, Auto>(g);
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/parameterized.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/detail/parameterized.hpp
new file mode 100644 (file)
index 0000000..1d70808
--- /dev/null
@@ -0,0 +1,76 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2009 Francois Barel
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_PARAMETERIZED_AUGUST_09_2009_0601AM)
+#define BOOST_SPIRIT_KARMA_PARAMETERIZED_AUGUST_09_2009_0601AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/ref.hpp>
+
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // parameterized_nonterminal: generator representing the invocation of a
+    // nonterminal, passing inherited attributes
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Params>
+    struct parameterized_nonterminal
+      : generator<parameterized_nonterminal<Subject, Params> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        parameterized_nonterminal(Subject const& subject, Params const& params)
+          : ref(subject), params(params)
+        {
+        }
+
+        template <typename Context, typename Unused>
+        struct attribute
+            // Forward to subject.
+          : Subject::template attribute<Context, Unused> {};
+
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& delim, Attribute const& attr) const
+        {
+            // Forward to subject, passing the additional
+            // params argument to generate.
+            return ref.get().generate(sink, context, delim, attr, params);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // Forward to subject.
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject const> ref;
+        Params params;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Params, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<karma::parameterized_nonterminal<Subject, Params>
+          , Attribute, Context, Iterator>
+      : handles_container<typename remove_const<Subject>::type
+        , Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/grammar.hpp
new file mode 100644 (file)
index 0000000..c5392e5
--- /dev/null
@@ -0,0 +1,134 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_GRAMMAR_MAR_05_2007_0542PM)
+#define BOOST_SPIRIT_KARMA_GRAMMAR_MAR_05_2007_0542PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/nonterminal/rule.hpp>
+#include <boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/karma/reference.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <
+        typename OutputIterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct grammar
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<OutputIterator, T1, T2, T3, T4> const>
+            >::type
+          , grammar<OutputIterator, T1, T2, T3, T4>
+        >
+      , generator<grammar<OutputIterator, T1, T2, T3, T4> >
+      , noncopyable
+    {
+        typedef OutputIterator iterator_type;
+        typedef rule<OutputIterator, T1, T2, T3, T4> start_type;
+        typedef typename start_type::properties properties;
+        typedef typename start_type::sig_type sig_type;
+        typedef typename start_type::locals_type locals_type;
+        typedef typename start_type::delimiter_type delimiter_type;
+        typedef typename start_type::encoding_type encoding_type;
+        typedef grammar<OutputIterator, T1, T2, T3, T4> base_type;
+        typedef reference<start_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+
+        static size_t const params_size = start_type::params_size;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef typename start_type::attr_type type;
+        };
+
+        // the output iterator is always wrapped by karma
+        typedef detail::output_iterator<OutputIterator, properties> 
+            output_iterator;
+
+        grammar(start_type const& start
+              , std::string const& name_ = "unnamed-grammar")
+          : proto::extends<terminal, base_type>(terminal::make(reference_(start)))
+          , name_(name_)
+        {}
+
+        // This constructor is used to catch if the start rule is not 
+        // compatible with the grammar. 
+        template <typename Iterator_, typename T1_, typename T2_, typename T3_,
+            typename T4_>
+        grammar(rule<Iterator_, T1_, T2_, T3_, T4_> const&
+              , std::string const& = "unnamed-grammar")
+        {
+            // If you see the assertion below failing then the start rule 
+            // passed to the constructor of the grammar is not compatible with 
+            // the grammar (i.e. it uses different template parameters).
+            BOOST_SPIRIT_ASSERT_MSG(
+                (is_same<start_type, rule<Iterator_, T1_, T2_, T3_, T4_> >::value)
+              , incompatible_start_rule, (rule<Iterator_, T1_, T2_, T3_, T4_>));
+        }
+
+        std::string name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Context, typename Delimiter, typename Attribute>
+        bool generate(output_iterator& sink, Context& context
+          , Delimiter const& delim, Attribute const& attr) const
+        {
+            return this->proto_base().child0.generate(
+                sink, context, delim, attr);
+        }
+
+        template <typename Context>
+        info what(Context&) const
+        {
+            return info(name_);
+        }
+
+        // bring in the operator() overloads
+        start_type const& get_parameterized_subject() const
+        { return this->proto_base().child0.ref.get(); }
+        typedef start_type parameterized_subject_type;
+        #include <boost/spirit/home/karma/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+            karma::grammar<IteratorA, T1, T2, T3, T4>, Attribute, Context
+          , IteratorB>
+      : detail::nonterminal_handles_container< 
+            typename attribute_of<
+                karma::grammar<IteratorA, T1, T2, T3, T4>
+              , Context, IteratorB
+          >::type, Attribute>
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp
new file mode 100644 (file)
index 0000000..bc974f2
--- /dev/null
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_NONTERMINAL_FWD_DEC_18_2010_0913PM)
+#define BOOST_SPIRIT_KARMA_NONTERMINAL_FWD_DEC_18_2010_0913PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    // forward declaration only
+    template <
+        typename OutputIterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type>
+    struct rule;
+
+    template <
+        typename OutputIterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type> 
+    struct grammar;
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/rule.hpp
new file mode 100644 (file)
index 0000000..8660f44
--- /dev/null
@@ -0,0 +1,447 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_RULE_MAR_05_2007_0455PM)
+#define BOOST_SPIRIT_KARMA_RULE_MAR_05_2007_0455PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/function.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/make_vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/nonterminal/extract_param.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/karma/reference.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp>
+#include <boost/spirit/home/karma/nonterminal/detail/parameterized.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace karma
+{
+    BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+    using spirit::_pass_type;
+    using spirit::_val_type;
+    using spirit::_a_type;
+    using spirit::_b_type;
+    using spirit::_c_type;
+    using spirit::_d_type;
+    using spirit::_e_type;
+    using spirit::_f_type;
+    using spirit::_g_type;
+    using spirit::_h_type;
+    using spirit::_i_type;
+    using spirit::_j_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+    using spirit::_pass;
+    using spirit::_val;
+    using spirit::_a;
+    using spirit::_b;
+    using spirit::_c;
+    using spirit::_d;
+    using spirit::_e;
+    using spirit::_f;
+    using spirit::_g;
+    using spirit::_h;
+    using spirit::_i;
+    using spirit::_j;
+
+#endif
+
+    using spirit::info;
+    using spirit::locals;
+
+    template <
+        typename OutputIterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct rule
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<OutputIterator, T1, T2, T3, T4> const>
+            >::type
+          , rule<OutputIterator, T1, T2, T3, T4>
+        >
+      , generator<rule<OutputIterator, T1, T2, T3, T4> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        typedef OutputIterator iterator_type;
+        typedef rule<OutputIterator, T1, T2, T3, T4> this_type;
+        typedef reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+        typedef mpl::vector<T1, T2, T3, T4> template_params;
+
+        // the output iterator is always wrapped by karma
+        typedef detail::output_iterator<OutputIterator, properties>
+            output_iterator;
+
+        // locals_type is a sequence of types to be used as local variables
+        typedef typename
+            spirit::detail::extract_locals<template_params>::type
+        locals_type;
+
+        // The delimiter-generator type
+        typedef typename
+            spirit::detail::extract_component<
+                karma::domain, template_params>::type
+        delimiter_type;
+
+        // The rule's signature
+        typedef typename
+            spirit::detail::extract_sig<template_params>::type
+        sig_type;
+
+        // The rule's encoding type
+        typedef typename
+            spirit::detail::extract_encoding<template_params>::type
+        encoding_type;
+
+        // This is the rule's attribute type
+        typedef typename
+            spirit::detail::attr_from_sig<sig_type>::type
+        attr_type;
+        typedef typename add_reference<
+            typename add_const<attr_type>::type>::type
+        attr_reference_type;
+
+        // parameter_types is a sequence of types passed as parameters to the rule
+        typedef typename
+            spirit::detail::params_from_sig<sig_type>::type
+        parameter_types;
+
+        static size_t const params_size =
+            fusion::result_of::size<parameter_types>::type::value;
+
+        // the context passed to the right hand side of a rule contains
+        // the attribute and the parameters for this particular rule invocation
+        typedef context<
+            fusion::cons<attr_reference_type, parameter_types>
+          , locals_type>
+        context_type;
+
+        typedef function<
+            bool(output_iterator&, context_type&, delimiter_type const&)>
+        function_type;
+
+        typedef typename
+            mpl::if_<
+                is_same<encoding_type, unused_type>
+              , unused_type
+              , tag::char_code<tag::encoding, encoding_type>
+            >::type
+        encoding_modifier_type;
+
+        explicit rule(std::string const& name_ = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+        }
+
+        rule(rule const& rhs)
+          : base_type(terminal::make(reference_(*this)))
+          , name_(rhs.name_)
+          , f(rhs.f)
+        {
+        }
+
+        template <typename Auto, typename Expr>
+        static void define(rule& lhs, Expr const& expr, mpl::false_)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        }
+
+        template <typename Auto, typename Expr>
+        static void define(rule& lhs, Expr const& expr, mpl::true_)
+        {
+            lhs.f = detail::bind_generator<Auto>(
+                compile<karma::domain>(expr, encoding_modifier_type()));
+        }
+
+        template <typename Expr>
+        rule (Expr const& expr, std::string const& name_ = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+            define<mpl::false_>(*this, expr, traits::matches<karma::domain, Expr>());
+        }
+
+        rule& operator=(rule const& rhs)
+        {
+            // The following assertion fires when you try to initialize a rule
+            // from an uninitialized one. Did you mean to refer to the right
+            // hand side rule instead of assigning from it? In this case you
+            // should write lhs = rhs.alias();
+            BOOST_ASSERT(rhs.f && "Did you mean rhs.alias() instead of rhs?");
+
+            f = rhs.f;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        std::string const& name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Expr>
+        rule& operator=(Expr const& expr)
+        {
+            define<mpl::false_>(*this, expr, traits::matches<karma::domain, Expr>());
+            return *this;
+        }
+
+// VC7.1 has problems to resolve 'rule' without explicit template parameters
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        // g++ 3.3 barfs if this is a member function :(
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr const& expr)
+        {
+            define<mpl::true_>(r, expr, traits::matches<karma::domain, Expr>());
+            return r;
+        }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr& expr)
+        {
+            return r %= static_cast<Expr const&>(expr);
+        }
+#else
+        // for rvalue references
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr&& expr)
+        {
+            define<mpl::true_>(r, expr, traits::matches<karma::domain, Expr>());
+            return r;
+        }
+#endif
+
+#else
+        // both friend functions have to be defined out of class as VC7.1
+        // will complain otherwise
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>&r, Expr const& expr);
+
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr& expr);
+#endif
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef attr_type type;
+        };
+
+        template <typename Context, typename Delimiter, typename Attribute>
+        bool generate(output_iterator& sink, Context&, Delimiter const& delim
+          , Attribute const& attr) const
+        {
+            if (f)
+            {
+                // Create an attribute if none is supplied.
+                typedef traits::make_attribute<attr_type, Attribute>
+                    make_attribute;
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain>
+                transform;
+
+                typename transform::type attr_ =
+                    traits::pre_transform<domain, attr_type>(
+                        make_attribute::call(attr));
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, without passing values for them.
+                context_type context(attr_);
+
+                // If you are seeing a compilation error here stating that the
+                // third parameter can't be converted to a karma::reference
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible delimiter type.
+                if (f(sink, context, delim))
+                {
+                    // do a post-delimit if this is an implied verbatim
+                    if (is_same<delimiter_type, unused_type>::value)
+                        karma::delimit_out(sink, delim);
+
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context, typename Delimiter, typename Attribute
+          , typename Params>
+        bool generate(output_iterator& sink, Context& caller_context
+          , Delimiter const& delim, Attribute const& attr
+          , Params const& params) const
+        {
+            if (f)
+            {
+                // Create an attribute if none is supplied.
+                typedef traits::make_attribute<attr_type, Attribute>
+                    make_attribute;
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain>
+                transform;
+
+                typename transform::type attr_ =
+                    traits::pre_transform<domain, attr_type>(
+                        make_attribute::call(attr));
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, passing values of incompatible types for them.
+                context_type context(attr_, params, caller_context);
+
+                // If you are seeing a compilation error here stating that the
+                // third parameter can't be converted to a karma::reference
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible delimiter type.
+                if (f(sink, context, delim))
+                {
+                    // do a post-delimit if this is an implied verbatim
+                    if (is_same<delimiter_type, unused_type>::value)
+                        karma::delimit_out(sink, delim);
+
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        reference_ alias() const
+        {
+            return reference_(*this);
+        }
+
+        typename proto::terminal<this_type>::type copy() const
+        {
+            typename proto::terminal<this_type>::type result = {*this};
+            return result;
+        }
+
+        // bring in the operator() overloads
+        rule const& get_parameterized_subject() const { return *this; }
+        typedef rule parameterized_subject_type;
+        #include <boost/spirit/home/karma/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+        function_type f;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+    template <typename OutputIterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<OutputIterator_, T1_, T2_, T3_, T4_>&r, Expr const& expr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here, then
+        // the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+
+        typedef typename
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>::encoding_modifier_type
+        encoding_modifier_type;
+
+        r.f = detail::bind_generator<mpl::true_>(
+            compile<karma::domain>(expr, encoding_modifier_type()));
+        return r;
+    }
+
+    // non-const version needed to suppress proto's %= kicking in
+    template <typename OutputIterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr& expr)
+    {
+        return r %= static_cast<Expr const&>(expr);
+    }
+#endif
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    namespace detail
+    {
+        template <typename RuleAttribute, typename Attribute>
+        struct nonterminal_handles_container
+          : mpl::and_<
+                traits::is_container<RuleAttribute>
+              , is_convertible<Attribute, RuleAttribute> >
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+            karma::rule<IteratorA, T1, T2, T3, T4>, Attribute, Context
+          , IteratorB>
+      : detail::nonterminal_handles_container<
+            typename attribute_of<
+                karma::rule<IteratorA, T1, T2, T3, T4>
+              , Context, IteratorB
+            >::type, Attribute>
+    {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/simple_trace.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/nonterminal/simple_trace.hpp
new file mode 100644 (file)
index 0000000..97c768f
--- /dev/null
@@ -0,0 +1,134 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_SIMPLE_TRACE_APR_21_2010_0155PM)
+#define BOOST_SPIRIT_KARMA_SIMPLE_TRACE_APR_21_2010_0155PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/nonterminal/debug_handler_state.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <iostream>
+
+//  The stream to use for debug output
+#if !defined(BOOST_SPIRIT_DEBUG_OUT)
+#define BOOST_SPIRIT_DEBUG_OUT std::cerr
+#endif
+
+//  number of tokens to print while debugging
+#if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+#endif
+
+//  number of spaces to indent
+#if !defined(BOOST_SPIRIT_DEBUG_INDENT)
+#define BOOST_SPIRIT_DEBUG_INDENT 2
+#endif
+
+namespace boost { namespace spirit { namespace karma
+{
+    struct simple_trace
+    {
+        int& get_indent() const
+        {
+            static int indent = 0;
+            return indent;
+        }
+
+        void print_indent() const
+        {
+            int n = get_indent();
+            n *= BOOST_SPIRIT_DEBUG_INDENT;
+            for (int i = 0; i != n; ++i)
+                BOOST_SPIRIT_DEBUG_OUT << ' ';
+        }
+
+        template <typename Buffer>
+        void print_some(char const* tag, Buffer const& buffer) const
+        {
+            print_indent();
+            BOOST_SPIRIT_DEBUG_OUT << '<' << tag << '>' << std::flush;
+            {
+                std::ostreambuf_iterator<char> out(BOOST_SPIRIT_DEBUG_OUT);
+                buffer.buffer_copy_to(out, BOOST_SPIRIT_DEBUG_PRINT_SOME);
+            }
+            BOOST_SPIRIT_DEBUG_OUT << "</" << tag << '>' << std::endl;
+        }
+
+        template <typename OutputIterator, typename Context, typename State
+          , typename Buffer>
+        void operator()(
+            OutputIterator&, Context const& context
+          , State state, std::string const& rule_name
+          , Buffer const& buffer) const
+        {
+            switch (state)
+            {
+                case pre_generate:
+                    print_indent();
+                    ++get_indent();
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << '<' << rule_name << '>' << std::endl;
+                    print_indent();
+                    ++get_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "<try>" << std::endl;;
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "<attributes>";
+                    traits::print_attribute(
+                        BOOST_SPIRIT_DEBUG_OUT,
+                        context.attributes
+                    );
+                    BOOST_SPIRIT_DEBUG_OUT << "</attributes>" << std::endl;
+                    if (!fusion::empty(context.locals))
+                    {
+                        print_indent();
+                        BOOST_SPIRIT_DEBUG_OUT
+                            << "<locals>" << context.locals << "</locals>"
+                            << std::endl;
+                    }
+                    --get_indent();
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "</try>" << std::endl;;
+                    break;
+
+                case successful_generate:
+                    print_indent();
+                    ++get_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "<success>" << std::endl;
+                    print_some("result", buffer);
+                    if (!fusion::empty(context.locals))
+                    {
+                        print_indent();
+                        BOOST_SPIRIT_DEBUG_OUT
+                            << "<locals>" << context.locals << "</locals>"
+                            << std::endl;
+                    }
+                    --get_indent();
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "</success>" << std::endl;
+                    --get_indent();
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT 
+                        << "</" << rule_name << '>' << std::endl;
+                    break;
+
+                case failed_generate:
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT << "<fail/>" << std::endl;
+                    --get_indent();
+                    print_indent();
+                    BOOST_SPIRIT_DEBUG_OUT 
+                        << "</" << rule_name << '>' << std::endl;
+                    break;
+            }
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric.hpp
new file mode 100644 (file)
index 0000000..474fe8e
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_NUMERIC_FEB_23_2007_0507PM)
+#define BOOST_SPIRIT_KARMA_NUMERIC_FEB_23_2007_0507PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric/bool.hpp>
+#include <boost/spirit/home/karma/numeric/int.hpp>
+#include <boost/spirit/home/karma/numeric/uint.hpp>
+#include <boost/spirit/home/karma/numeric/real.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool.hpp
new file mode 100644 (file)
index 0000000..bb04180
--- /dev/null
@@ -0,0 +1,424 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_BOOL_SEP_28_2009_1113AM)
+#define BOOST_SPIRIT_KARMA_BOOL_SEP_28_2009_1113AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/numeric/bool_policies.hpp>
+#include <boost/spirit/home/karma/numeric/detail/bool_utils.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    namespace karma
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // forward declaration only
+        template <typename T>
+        struct bool_policies;
+
+        ///////////////////////////////////////////////////////////////////////
+        // This is the class that the user can instantiate directly in
+        // order to create a customized bool generator
+        template <typename T = bool, typename Policies = bool_policies<T> >
+        struct bool_generator
+          : spirit::terminal<tag::stateful_tag<Policies, tag::bool_, T> >
+        {
+            typedef tag::stateful_tag<Policies, tag::bool_, T> tag_type;
+
+            bool_generator() {}
+            bool_generator(Policies const& data)
+              : spirit::terminal<tag_type>(data) {}
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::bool_>    // enables bool_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::true_>    // enables true_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::false_>    // enables false_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, bool>          // enables lit(true)
+      : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                 // enables bool_(...)
+      , terminal_ex<tag::bool_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <>                                       // enables *lazy* bool_(...)
+    struct use_lazy_terminal<karma::domain, tag::bool_, 1>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom bool_generator
+    template <typename Policies, typename T>
+    struct use_terminal<karma::domain
+          , tag::stateful_tag<Policies, tag::bool_, T> >
+      : mpl::true_ {};
+
+    // enables any custom bool_generator(...)
+    template <typename Policies, typename T, typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::stateful_tag<Policies, tag::bool_, T>
+          , fusion::vector1<A0> > >
+      : mpl::true_ {};
+
+    // enables *lazy* custom bool_generator
+    template <typename Policies, typename T>
+    struct use_lazy_terminal<karma::domain
+          , tag::stateful_tag<Policies, tag::bool_, T>, 1>
+      : mpl::true_ {};
+
+    // enables lit(bool)
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_bool<A0> >::type>
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::bool_;
+    using spirit::true_;
+    using spirit::false_;
+    using spirit::lit;    // lit(true) is equivalent to true
+#endif
+
+    using spirit::bool_type;
+    using spirit::true_type;
+    using spirit::false_type;
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for bool generators not having a direct
+    //  initializer: bool_. These generators must be used in conjunction with
+    //  an Attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename CharEncoding, typename Tag, typename Policies>
+    struct any_bool_generator
+      : primitive_generator<any_bool_generator<T, CharEncoding, Tag, Policies> >
+    {
+    public:
+        any_bool_generator(Policies const& p = Policies())
+          : p_(p) {}
+
+        typedef typename Policies::properties properties;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        // bool_ has a Attribute attached
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool
+        generate(OutputIterator& sink, Context& context, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            if (!traits::has_optional_value(attr))
+                return false;       // fail if it's an uninitialized optional
+
+            return bool_inserter<T, Policies, CharEncoding, Tag>::call(
+                        sink, traits::extract_from<T>(attr, context), p_) &&
+                   delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // this bool_ has no Attribute attached, it needs to have been
+        // initialized from a direct literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        generate(OutputIterator&, Context&, Delimiter const&, unused_type)
+        {
+            // It is not possible (doesn't make sense) to use boolean generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, bool_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("bool");
+        }
+
+        Policies p_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for bool generators having a direct
+    //  initializer: bool_(true), bool_(0) etc.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename CharEncoding, typename Tag
+      , typename Policies, bool no_attribute>
+    struct literal_bool_generator
+      : primitive_generator<literal_bool_generator<T, CharEncoding, Tag
+          , Policies, no_attribute> >
+    {
+    public:
+        typedef typename Policies::properties properties;
+
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        literal_bool_generator(typename add_const<T>::type n
+              , Policies const& p = Policies())
+          : n_(n), p_(p) {}
+
+        // A bool_() which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef typename attribute<Context>::type attribute_type;
+            if (!traits::has_optional_value(attr) ||
+                bool(n_) != bool(traits::extract_from<attribute_type>(attr, context)))
+            {
+                return false;
+            }
+            return bool_inserter<T, Policies, CharEncoding, Tag>::
+                      call(sink, n_, p_) && delimit_out(sink, d);
+        }
+
+        // A bool_() without any associated attribute just emits its
+        // immediate literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , unused_type) const
+        {
+            return bool_inserter<T, Policies, CharEncoding, Tag>::
+                      call(sink, n_) && delimit_out(sink, d);
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("bool");
+        }
+
+        T n_;
+        Policies p_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Modifiers, typename T = bool
+          , typename Policies = bool_policies<T> >
+        struct make_bool
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef any_bool_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Policies
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                typedef tag::stateful_tag<Policies, tag::bool_, T> tag_type;
+                using spirit::detail::get_stateful_data;
+                return result_type(get_stateful_data<tag_type>::call(term));
+            }
+        };
+
+        template <typename Modifiers, bool b>
+        struct make_bool_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_bool_generator<
+                bool
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , bool_policies<>, false
+            > result_type;
+
+            result_type operator()(unused_type, unused_type) const
+            {
+                return result_type(b);
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::bool_, Modifiers>
+      : detail::make_bool<Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::true_, Modifiers>
+      : detail::make_bool_literal<Modifiers, true> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::false_, Modifiers>
+      : detail::make_bool_literal<Modifiers, false> {};
+
+    template <typename T, typename Policies, typename Modifiers>
+    struct make_primitive<
+            tag::stateful_tag<Policies, tag::bool_, T>, Modifiers>
+      : detail::make_bool<Modifiers
+          , typename remove_const<T>::type, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Modifiers, typename T = bool
+          , typename Policies = bool_policies<T> >
+        struct make_bool_direct
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_bool_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Policies, false
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                typedef tag::stateful_tag<Policies, tag::bool_, T> tag_type;
+                using spirit::detail::get_stateful_data;
+                return result_type(fusion::at_c<0>(term.args)
+                  , get_stateful_data<tag_type>::call(term.term));
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::bool_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_bool_direct<Modifiers> {};
+
+    template <typename T, typename Policies, typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::stateful_tag<Policies, tag::bool_, T>
+          , fusion::vector1<A0> >
+          , Modifiers>
+      : detail::make_bool_direct<Modifiers
+          , typename remove_const<T>::type, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Modifiers>
+        struct basic_bool_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_bool_generator<
+                bool
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , bool_policies<>, true
+            > result_type;
+
+            template <typename T_>
+            result_type operator()(T_ i, unused_type) const
+            {
+                return result_type(i);
+            }
+        };
+    }
+
+    template <typename Modifiers>
+    struct make_primitive<bool, Modifiers>
+      : detail::basic_bool_literal<Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_bool<A0> >::type>
+      : detail::basic_bool_literal<Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef literal_bool_generator<
+            bool
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , bool_policies<>, true
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/bool_policies.hpp
new file mode 100644 (file)
index 0000000..5afc0b8
--- /dev/null
@@ -0,0 +1,117 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_BOOL_POLICIES_SEP_28_2009_1203PM)
+#define BOOST_SPIRIT_KARMA_BOOL_POLICIES_SEP_28_2009_1203PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/char.hpp>
+#include <boost/spirit/home/karma/numeric/detail/numeric_utils.hpp>
+
+namespace boost { namespace spirit { namespace karma 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  bool_policies, if you need special handling of your boolean output
+    //  just overload this policy class and use it as a template
+    //  parameter to the karma::bool_generator boolean generator
+    //
+    //      struct special_bool_policy : karma::bool_policies<>
+    //      {
+    //          //  we want to spell the names of false as eurt (true backwards)
+    //          template <typename CharEncoding, typename Tag
+    //            , typename OutputIterator>
+    //          static bool generate_false(OutputIterator& sink, bool)
+    //          {
+    //              return string_inserter<CharEncoding, Tag>::call(sink, "eurt");
+    //          }
+    //      };
+    //
+    //      typedef karma::bool_generator<special_bool_policy> backwards_bool;
+    //
+    //      karma::generate(sink, backwards_bool(), false); // will output: eurt
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T = bool>
+    struct bool_policies
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // Expose the data type the generator is targeted at
+        ///////////////////////////////////////////////////////////////////////
+        typedef T value_type;
+
+        ///////////////////////////////////////////////////////////////////////
+        //  By default the policy doesn't require any special iterator 
+        //  functionality. The boolean generator exposes its properties
+        //  from here, so this needs to be updated in case other properties
+        //  need to be implemented.
+        ///////////////////////////////////////////////////////////////////////
+        typedef mpl::int_<generator_properties::no_properties> properties;
+
+        ///////////////////////////////////////////////////////////////////////
+        //  This is the main function used to generate the output for a 
+        //  boolean. It is called by the boolean generator in order 
+        //  to perform the conversion. In theory all of the work can be 
+        //  implemented here, but it is the easiest to use existing 
+        //  functionality provided by the type specified by the template 
+        //  parameter `Inserter`. 
+        //
+        //      sink: the output iterator to use for generation
+        //      n:    the floating point number to convert 
+        //      p:    the instance of the policy type used to instantiate this 
+        //            floating point generator.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Inserter, typename OutputIterator, typename Policies>
+        static bool
+        call (OutputIterator& sink, T n, Policies const& p)
+        {
+            return Inserter::call_n(sink, n, p);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Print the textual representations of a true boolean value
+        //
+        //      sink       The output iterator to use for generation
+        //      b          The boolean value to convert. 
+        //
+        //  The CharEncoding and Tag template parameters are either of the type 
+        //  unused_type or describes the character class and conversion to be 
+        //  applied to any output possibly influenced by either the lower[...] 
+        //  or upper[...] directives.
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharEncoding, typename Tag, typename OutputIterator>
+        static bool generate_true(OutputIterator& sink, T)
+        {
+            return string_inserter<CharEncoding, Tag>::call(sink, "true");
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Print the textual representations of a false boolean value
+        //
+        //      sink       The output iterator to use for generation
+        //      b          The boolean value to convert. 
+        //
+        //  The CharEncoding and Tag template parameters are either of the type 
+        //  unused_type or describes the character class and conversion to be 
+        //  applied to any output possibly influenced by either the lower[...] 
+        //  or upper[...] directives.
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharEncoding, typename Tag, typename OutputIterator>
+        static bool generate_false(OutputIterator& sink, T)
+        {
+            return string_inserter<CharEncoding, Tag>::call(sink, "false");
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/bool_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/bool_utils.hpp
new file mode 100644 (file)
index 0000000..7747c75
--- /dev/null
@@ -0,0 +1,67 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_BOOL_UTILS_SEP_28_2009_0644PM)
+#define BOOST_SPIRIT_KARMA_BOOL_UTILS_SEP_28_2009_0644PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/string_generate.hpp>
+#include <boost/spirit/home/karma/numeric/detail/numeric_utils.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace spirit { namespace karma 
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The bool_inserter template takes care of the boolean to string 
+    //  conversion. The Policies template parameter is used to allow
+    //  customization of the formatting process
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct bool_policies;
+
+    template <typename T
+      , typename Policies = bool_policies<T>
+      , typename CharEncoding = unused_type
+      , typename Tag = unused_type>
+    struct bool_inserter
+    {
+        template <typename OutputIterator, typename U>
+        static bool
+        call (OutputIterator& sink, U b, Policies const& p = Policies())
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            p; // suppresses warning: C4100: 'p' : unreferenced formal parameter
+#endif
+            return p.template call<bool_inserter>(sink, T(b), p);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  This is the workhorse behind the real generator
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename U>
+        static bool
+        call_n (OutputIterator& sink, U b, Policies const& p)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            p; // suppresses warning: C4100: 'p' : unreferenced formal parameter
+#endif
+            if (b) 
+                return p.template generate_true<CharEncoding, Tag>(sink, b);
+            return p.template generate_false<CharEncoding, Tag>(sink, b);
+        }
+    };
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
new file mode 100644 (file)
index 0000000..2ce7b74
--- /dev/null
@@ -0,0 +1,774 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_NUMERIC_UTILS_FEB_23_2007_0841PM)
+#define BOOST_SPIRIT_KARMA_NUMERIC_UTILS_FEB_23_2007_0841PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/limits.hpp>
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/spirit/home/support/detail/pow10.hpp>
+#include <boost/spirit/home/support/detail/sign.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/string_generate.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  The value BOOST_KARMA_NUMERICS_LOOP_UNROLL specifies, how to unroll the
+//  integer string generation loop (see below).
+//
+//      Set the value to some integer in between 0 (no unrolling) and the
+//      largest expected generated integer string length (complete unrolling).
+//      If not specified, this value defaults to 6.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_KARMA_NUMERICS_LOOP_UNROLL)
+#define BOOST_KARMA_NUMERICS_LOOP_UNROLL 6
+#endif
+
+#if BOOST_KARMA_NUMERICS_LOOP_UNROLL < 0
+#error "Please set the BOOST_KARMA_NUMERICS_LOOP_UNROLL to a non-negative value!"
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////
+    //
+    //  return the absolute value from a given number, avoiding over- and
+    //  underflow
+    //
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct absolute_value
+    {
+        typedef T type;
+        static T call (T n)
+        {
+            // allow for ADL to find the correct overloads for fabs
+            using namespace std;
+            return fabs(n);
+        }
+    };
+
+#define BOOST_SPIRIT_ABSOLUTE_VALUE(signedtype, unsignedtype)                 \
+        template <>                                                           \
+        struct absolute_value<signedtype>                                     \
+        {                                                                     \
+            typedef unsignedtype type;                                        \
+            static type call(signedtype n)                                    \
+            {                                                                 \
+                return (n >= 0) ? n : (unsignedtype)(-n);                     \
+            }                                                                 \
+        }                                                                     \
+    /**/
+#define BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(unsignedtype)                    \
+        template <>                                                           \
+        struct absolute_value<unsignedtype>                                   \
+        {                                                                     \
+            typedef unsignedtype type;                                        \
+            static type call(unsignedtype n)                                  \
+            {                                                                 \
+                return n;                                                     \
+            }                                                                 \
+        }                                                                     \
+    /**/
+
+    BOOST_SPIRIT_ABSOLUTE_VALUE(signed char, unsigned char);
+    BOOST_SPIRIT_ABSOLUTE_VALUE(char, unsigned char);
+    BOOST_SPIRIT_ABSOLUTE_VALUE(short, unsigned short);
+    BOOST_SPIRIT_ABSOLUTE_VALUE(int, unsigned int);
+    BOOST_SPIRIT_ABSOLUTE_VALUE(long, unsigned long);
+    BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(unsigned char);
+    BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(unsigned short);
+    BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(unsigned int);
+    BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(unsigned long);
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_SPIRIT_ABSOLUTE_VALUE(boost::long_long_type, boost::ulong_long_type);
+    BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED(boost::ulong_long_type);
+#endif
+
+#undef BOOST_SPIRIT_ABSOLUTE_VALUE
+#undef BOOST_SPIRIT_ABSOLUTE_VALUE_UNSIGNED
+
+    template <>
+    struct absolute_value<float>
+    {
+        typedef float type;
+        static type call(float n)
+        {
+            return (spirit::detail::signbit)(n) ? -n : n;
+        }
+    };
+
+    template <>
+    struct absolute_value<double>
+    {
+        typedef double type;
+        static type call(double n)
+        {
+            return (spirit::detail::signbit)(n) ? -n : n;
+        }
+    };
+
+    template <>
+    struct absolute_value<long double>
+    {
+        typedef long double type;
+        static type call(long double n)
+        {
+            return (spirit::detail::signbit)(n) ? -n : n;
+        }
+    };
+
+    // specialization for pointers
+    template <typename T>
+    struct absolute_value<T*>
+    {
+        typedef std::size_t type;
+        static type call (T* p)
+        {
+            return std::size_t(p);
+        }
+    };
+
+    template <typename T>
+    inline typename absolute_value<T>::type
+    get_absolute_value(T n)
+    {
+        return absolute_value<T>::call(n);
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct is_negative
+    {
+        static bool call(T n)
+        {
+            return (n < 0) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_negative<float>
+    {
+        static bool call(float n)
+        {
+            return (spirit::detail::signbit)(n) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_negative<double>
+    {
+        static bool call(double n)
+        {
+            return (spirit::detail::signbit)(n) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_negative<long double>
+    {
+        static bool call(long double n)
+        {
+            return (spirit::detail::signbit)(n) ? true : false;
+        }
+    };
+
+    template <typename T>
+    inline bool test_negative(T n)
+    {
+        return is_negative<T>::call(n);
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct is_zero
+    {
+        static bool call(T n)
+        {
+            return (n == 0) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_zero<float>
+    {
+        static bool call(float n)
+        {
+            return (math::fpclassify)(n) == FP_ZERO;
+        }
+    };
+
+    template <>
+    struct is_zero<double>
+    {
+        static bool call(double n)
+        {
+            return (math::fpclassify)(n) == FP_ZERO;
+        }
+    };
+
+    template <>
+    struct is_zero<long double>
+    {
+        static bool call(long double n)
+        {
+            return (math::fpclassify)(n) == FP_ZERO;
+        }
+    };
+
+    template <typename T>
+    inline bool test_zero(T n)
+    {
+        return is_zero<T>::call(n);
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct is_nan
+    {
+        static bool call(T n)
+        {
+            // NaN numbers are not equal to anything
+            return (n != n) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_nan<float>
+    {
+        static bool call(float n)
+        {
+            return (math::fpclassify)(n) == FP_NAN;
+        }
+    };
+
+    template <>
+    struct is_nan<double>
+    {
+        static bool call(double n)
+        {
+            return (math::fpclassify)(n) == FP_NAN;
+        }
+    };
+
+    template <>
+    struct is_nan<long double>
+    {
+        static bool call(long double n)
+        {
+            return (math::fpclassify)(n) == FP_NAN;
+        }
+    };
+
+    template <typename T>
+    inline bool test_nan(T n)
+    {
+        return is_nan<T>::call(n);
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct is_infinite
+    {
+        static bool call(T n)
+        {
+            if (!std::numeric_limits<T>::has_infinity) 
+                return false;
+            return (n == std::numeric_limits<T>::infinity()) ? true : false;
+        }
+    };
+
+    template <>
+    struct is_infinite<float>
+    {
+        static bool call(float n)
+        {
+            return (math::fpclassify)(n) == FP_INFINITE;
+        }
+    };
+
+    template <>
+    struct is_infinite<double>
+    {
+        static bool call(double n)
+        {
+            return (math::fpclassify)(n) == FP_INFINITE;
+        }
+    };
+
+    template <>
+    struct is_infinite<long double>
+    {
+        static bool call(long double n)
+        {
+            return (math::fpclassify)(n) == FP_INFINITE;
+        }
+    };
+
+    template <typename T>
+    inline bool test_infinite(T n)
+    {
+        return is_infinite<T>::call(n);
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    struct cast_to_long
+    {
+        static long call(float n, mpl::false_)
+        {
+            return static_cast<long>(std::floor(n));
+        }
+
+        static long call(double n, mpl::false_)
+        {
+            return static_cast<long>(std::floor(n));
+        }
+
+        static long call(long double n, mpl::false_)
+        {
+            return static_cast<long>(std::floor(n));
+        }
+
+        template <typename T>
+        static long call(T n, mpl::false_)
+        {
+            // allow for ADL to find the correct overload for floor and
+            // lround
+            using namespace std;
+            return lround(floor(n));
+        }
+
+        template <typename T>
+        static long call(T n, mpl::true_)
+        {
+            return static_cast<long>(n);
+        }
+
+        template <typename T>
+        static long call(T n)
+        {
+            return call(n, mpl::bool_<is_integral<T>::value>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////
+    struct truncate_to_long
+    {
+        static long call(float n, mpl::false_)
+        {
+            return test_negative(n) ? static_cast<long>(std::ceil(n)) :
+                static_cast<long>(std::floor(n));
+        }
+
+        static long call(double n, mpl::false_)
+        {
+            return test_negative(n) ? static_cast<long>(std::ceil(n)) :
+                static_cast<long>(std::floor(n));
+        }
+
+        static long call(long double n, mpl::false_)
+        {
+            return test_negative(n) ? static_cast<long>(std::ceil(n)) :
+                static_cast<long>(std::floor(n));
+        }
+
+        template <typename T>
+        static long call(T n, mpl::false_)
+        {
+            // allow for ADL to find the correct overloads for ltrunc
+            using namespace std;
+            return ltrunc(n);
+        }
+
+        template <typename T>
+        static long call(T n, mpl::true_)
+        {
+            return static_cast<long>(n);
+        }
+
+        template <typename T>
+        static long call(T n)
+        {
+            return call(n, mpl::bool_<is_integral<T>::value>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////
+    //
+    //  Traits class for radix specific number conversion
+    //
+    //      Convert a digit from binary representation to character
+    //      representation:
+    //
+    //          static int call(unsigned n);
+    //
+    ///////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename CharEncoding, typename Tag, bool radix_less_than_10>
+        struct convert_digit
+        {
+            static int call(unsigned n)
+            {
+                if (n <= 9)
+                    return n + '0';
+
+                using spirit::char_class::convert;
+                return convert<CharEncoding>::to(Tag(), n - 10 + 'a');
+            }
+        };
+
+        template <>
+        struct convert_digit<unused_type, unused_type, false>
+        {
+            static int call(unsigned n)
+            {
+                if (n <= 9)
+                    return n + '0';
+                return n - 10 + 'a';
+            }
+        };
+
+        template <typename CharEncoding, typename Tag>
+        struct convert_digit<CharEncoding, Tag, true>
+        {
+            static int call(unsigned n)
+            {
+                return n + '0';
+            }
+        };
+    }
+
+    template <unsigned Radix, typename CharEncoding, typename Tag>
+    struct convert_digit
+      : detail::convert_digit<CharEncoding, Tag, (Radix <= 10) ? true : false>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct divide
+    {
+        template <typename T>
+        static T call(T& n, mpl::true_)
+        {
+            return n / Radix;
+        }
+
+        template <typename T>
+        static T call(T& n, mpl::false_)
+        {
+            // Allow ADL to find the correct overload for floor
+            using namespace std;
+            return floor(n / Radix);
+        }
+
+        template <typename T>
+        static T call(T& n, T const&, int)
+        {
+            return call(n, mpl::bool_<is_integral<T>::value>());
+        }
+
+        template <typename T>
+        static T call(T& n)
+        {
+            return call(n, mpl::bool_<is_integral<T>::value>());
+        }
+    };
+
+    // specialization for division by 10
+    template <>
+    struct divide<10>
+    {
+        template <typename T>
+        static T call(T& n, T, int, mpl::true_)
+        {
+            return n / 10;
+        }
+
+        template <typename T>
+        static T call(T, T& num, int exp, mpl::false_)
+        {
+            // Allow ADL to find the correct overload for floor
+            using namespace std;
+            return floor(num / spirit::traits::pow10<T>(exp));
+        }
+
+        template <typename T>
+        static T call(T& n, T& num, int exp)
+        {
+            return call(n, num, exp, mpl::bool_<is_integral<T>::value>());
+        }
+
+        template <typename T>
+        static T call(T& n)
+        {
+            return call(n, n, 1, mpl::bool_<is_integral<T>::value>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct remainder
+    {
+        template <typename T>
+        static long call(T n, mpl::true_)
+        {
+            // this cast is safe since we know the result is not larger
+            // than Radix
+            return static_cast<long>(n % Radix);
+        }
+
+        template <typename T>
+        static long call(T n, mpl::false_)
+        {
+            // Allow ADL to find the correct overload for fmod
+            using namespace std;
+            return cast_to_long::call(fmod(n, T(Radix)));
+        }
+
+        template <typename T>
+        static long call(T n)
+        {
+            return call(n, mpl::bool_<is_integral<T>::value>());
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The int_inserter template takes care of the integer to string
+    //  conversion. If specified, the loop is unrolled for better performance.
+    //
+    //      Set the value BOOST_KARMA_NUMERICS_LOOP_UNROLL to some integer in
+    //      between 0 (no unrolling) and the largest expected generated integer
+    //      string length (complete unrolling).
+    //      If not specified, this value defaults to 6.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_KARMA_NUMERICS_INNER_LOOP_PREFIX(z, x, data)                    \
+        if (!traits::test_zero(n)) {                                          \
+            int ch = radix_type::call(remainder_type::call(n));               \
+            n = divide_type::call(n, num, ++exp);                             \
+    /**/
+
+#define BOOST_KARMA_NUMERICS_INNER_LOOP_SUFFIX(z, x, data)                    \
+            *sink = char(ch);                                                 \
+            ++sink;                                                           \
+        }                                                                     \
+    /**/
+
+    template <
+        unsigned Radix, typename CharEncoding = unused_type
+      , typename Tag = unused_type>
+    struct int_inserter
+    {
+        typedef traits::convert_digit<Radix, CharEncoding, Tag> radix_type;
+        typedef traits::divide<Radix> divide_type;
+        typedef traits::remainder<Radix> remainder_type;
+
+        template <typename OutputIterator, typename T>
+        static bool
+        call(OutputIterator& sink, T n, T& num, int exp)
+        {
+            // remainder_type::call returns n % Radix
+            int ch = radix_type::call(remainder_type::call(n));
+            n = divide_type::call(n, num, ++exp);
+
+            BOOST_PP_REPEAT(
+                BOOST_KARMA_NUMERICS_LOOP_UNROLL,
+                BOOST_KARMA_NUMERICS_INNER_LOOP_PREFIX, _);
+
+            if (!traits::test_zero(n))
+                call(sink, n, num, exp);
+
+            BOOST_PP_REPEAT(
+                BOOST_KARMA_NUMERICS_LOOP_UNROLL,
+                BOOST_KARMA_NUMERICS_INNER_LOOP_SUFFIX, _);
+
+            *sink = char(ch);
+            ++sink;
+            return true;
+        }
+
+        //  Common code for integer string representations
+        template <typename OutputIterator, typename T>
+        static bool
+        call(OutputIterator& sink, T n)
+        {
+            return call(sink, n, n, 0);
+        }
+
+    private:
+        // helper function returning the biggest number representable either in
+        // a boost::long_long_type (if this does exist) or in a plain long
+        // otherwise
+#if defined(BOOST_HAS_LONG_LONG)
+        typedef boost::long_long_type biggest_long_type;
+#else
+        typedef long biggest_long_type;
+#endif
+
+        static biggest_long_type max_long()
+        {
+            return (std::numeric_limits<biggest_long_type>::max)();
+        }
+
+    public:
+        // Specialization for doubles and floats, falling back to long integers
+        // for representable values. These specializations speed up formatting
+        // of floating point numbers considerably as all the required
+        // arithmetics will be executed using integral data types.
+        template <typename OutputIterator>
+        static bool
+        call(OutputIterator& sink, long double n)
+        {
+            if (std::fabs(n) < max_long())
+            {
+                biggest_long_type l((biggest_long_type)n);
+                return call(sink, l, l, 0);
+            }
+            return call(sink, n, n, 0);
+        }
+        template <typename OutputIterator>
+        static bool
+        call(OutputIterator& sink, double n)
+        {
+            if (std::fabs(n) < max_long())
+            {
+                biggest_long_type l((biggest_long_type)n);
+                return call(sink, l, l, 0);
+            }
+            return call(sink, n, n, 0);
+        }
+        template <typename OutputIterator>
+        static bool
+        call(OutputIterator& sink, float n)
+        {
+            if (std::fabs(n) < max_long())
+            {
+                biggest_long_type l((biggest_long_type)n);
+                return call(sink, l, l, 0);
+            }
+            return call(sink, n, n, 0);
+        }
+    };
+
+#undef BOOST_KARMA_NUMERICS_INNER_LOOP_PREFIX
+#undef BOOST_KARMA_NUMERICS_INNER_LOOP_SUFFIX
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The uint_inserter template takes care of the conversion of any integer
+    //  to a string, while interpreting the number as an unsigned type.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        unsigned Radix, typename CharEncoding = unused_type
+      , typename Tag = unused_type>
+    struct uint_inserter : int_inserter<Radix, CharEncoding, Tag>
+    {
+        typedef int_inserter<Radix, CharEncoding, Tag> base_type;
+
+        //  Common code for integer string representations
+        template <typename OutputIterator, typename T>
+        static bool
+        call(OutputIterator& sink, T const& n)
+        {
+            typedef typename traits::absolute_value<T>::type type;
+            type un = type(n);
+            return base_type::call(sink, un, un, 0);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The sign_inserter template generates a sign for a given numeric value.
+    //
+    //    The parameter forcesign allows to generate a sign even for positive
+    //    numbers.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct sign_inserter
+    {
+        template <typename OutputIterator>
+        static bool
+        call_noforce(OutputIterator& sink, bool is_zero, bool is_negative,
+            bool sign_if_zero)
+        {
+            // generate a sign for negative numbers only
+            if (is_negative || (is_zero && sign_if_zero)) {
+                *sink = '-';
+                ++sink;
+            }
+            return true;
+        }
+
+        template <typename OutputIterator>
+        static bool
+        call_force(OutputIterator& sink, bool is_zero, bool is_negative,
+            bool sign_if_zero)
+        {
+            // generate a sign for all numbers except zero
+            if (!is_zero || sign_if_zero)
+                *sink = is_negative ? '-' : '+';
+            else
+                *sink = ' ';
+
+            ++sink;
+            return true;
+        }
+
+        template <typename OutputIterator>
+        static bool
+        call(OutputIterator& sink, bool is_zero, bool is_negative
+          , bool forcesign, bool sign_if_zero = false)
+        {
+            return forcesign ?
+                call_force(sink, is_zero, is_negative, sign_if_zero) :
+                call_noforce(sink, is_zero, is_negative, sign_if_zero);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  These are helper functions for the real policies allowing to generate
+    //  a single character and a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding = unused_type, typename Tag = unused_type>
+    struct char_inserter
+    {
+        template <typename OutputIterator, typename Char>
+        static bool call(OutputIterator& sink, Char c)
+        {
+            return detail::generate_to(sink, c, CharEncoding(), Tag());
+        }
+    };
+
+    template <typename CharEncoding = unused_type, typename Tag = unused_type>
+    struct string_inserter
+    {
+        template <typename OutputIterator, typename String>
+        static bool call(OutputIterator& sink, String str)
+        {
+            return detail::string_generate(sink, str, CharEncoding(), Tag());
+        }
+    };
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/real_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/detail/real_utils.hpp
new file mode 100644 (file)
index 0000000..6acaf87
--- /dev/null
@@ -0,0 +1,187 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_REAL_UTILS_FEB_23_2007_0841PM)
+#define BOOST_SPIRIT_KARMA_REAL_UTILS_FEB_23_2007_0841PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/limits.hpp>
+
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/detail/pow10.hpp>
+#include <boost/spirit/home/support/detail/sign.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+#include <boost/spirit/home/karma/detail/string_generate.hpp>
+#include <boost/spirit/home/karma/numeric/detail/numeric_utils.hpp>
+
+namespace boost { namespace spirit { namespace karma 
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The real_inserter template takes care of the floating point number to 
+    //  string conversion. The Policies template parameter is used to allow
+    //  customization of the formatting process
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct real_policies;
+
+    template <typename T
+      , typename Policies = real_policies<T>
+      , typename CharEncoding = unused_type
+      , typename Tag = unused_type>
+    struct real_inserter
+    {
+        template <typename OutputIterator, typename U>
+        static bool
+        call (OutputIterator& sink, U n, Policies const& p = Policies())
+        {
+            if (traits::test_nan(n)) {
+                return p.template nan<CharEncoding, Tag>(
+                    sink, n, p.force_sign(n));
+            }
+            else if (traits::test_infinite(n)) {
+                return p.template inf<CharEncoding, Tag>(
+                    sink, n, p.force_sign(n));
+            }
+            return p.template call<real_inserter>(sink, n, p);
+        }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  
+# pragma warning(push)
+# pragma warning(disable: 4100)   // 'p': unreferenced formal parameter  
+# pragma warning(disable: 4127)   // conditional expression is constant
+# pragma warning(disable: 4267)   // conversion from 'size_t' to 'unsigned int', possible loss of data
+#endif 
+        ///////////////////////////////////////////////////////////////////////
+        //  This is the workhorse behind the real generator
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename U>
+        static bool
+        call_n (OutputIterator& sink, U n, Policies const& p)
+        {
+        // prepare sign and get output format
+            bool force_sign = p.force_sign(n);
+            bool sign_val = false;
+            int flags = p.floatfield(n);
+            if (traits::test_negative(n)) 
+            {
+                n = -n;
+                sign_val = true;
+            }
+
+        // The scientific representation requires the normalization of the 
+        // value to convert.
+
+            // get correct precision for generated number
+            unsigned precision = p.precision(n);
+            if (std::numeric_limits<U>::digits10) 
+            {
+                // limit generated precision to digits10, if defined
+                precision = (std::min)(precision, 
+                    (unsigned)std::numeric_limits<U>::digits10 + 1);
+            }
+
+            // allow for ADL to find the correct overloads for log10 et.al.
+            using namespace std;
+
+            U dim = 0;
+            if (0 == (Policies::fmtflags::fixed & flags) && !traits::test_zero(n))
+            {
+                dim = log10(n);
+                if (dim > 0) 
+                    n /= spirit::traits::pow10<U>(traits::truncate_to_long::call(dim));
+                else if (n < 1.) {
+                    long exp = traits::truncate_to_long::call(-dim);
+                    if (exp != -dim)
+                        ++exp;
+                    dim = -exp;
+                    n *= spirit::traits::pow10<U>(exp);
+                }
+            }
+
+        // prepare numbers (sign, integer and fraction part)
+            U integer_part;
+            U precexp = spirit::traits::pow10<U>(precision);
+            U fractional_part = modf(n, &integer_part);
+
+            fractional_part = floor(fractional_part * precexp + U(0.5));
+            if (fractional_part >= precexp) 
+            {
+                fractional_part = floor(fractional_part - precexp);
+                integer_part += 1;    // handle rounding overflow
+            }
+
+        // if trailing zeros are to be omitted, normalize the precision and
+        // fractional part
+            U long_int_part = floor(integer_part);
+            U long_frac_part = fractional_part;
+            unsigned prec = precision;
+            if (!p.trailing_zeros(n))
+            {
+                U frac_part_floor = long_frac_part;
+                if (0 != long_frac_part) {
+                    // remove the trailing zeros
+                    while (0 != prec && 
+                           0 == traits::remainder<10>::call(long_frac_part)) 
+                    {
+                        long_frac_part = traits::divide<10>::call(long_frac_part);
+                        --prec;
+                    }
+                }
+                else {
+                    // if the fractional part is zero, we don't need to output 
+                    // any additional digits
+                    prec = 0;
+                }
+
+                if (precision != prec)
+                {
+                    long_frac_part = frac_part_floor / 
+                        spirit::traits::pow10<U>(precision-prec);
+                }
+            }
+
+        // call the actual generating functions to output the different parts
+            if ((force_sign || sign_val) &&
+                traits::test_zero(long_int_part) &&
+                traits::test_zero(long_frac_part))
+            {
+                sign_val = false;     // result is zero, no sign please
+                force_sign = false;
+            }
+
+        // generate integer part
+            bool r = p.integer_part(sink, long_int_part, sign_val, force_sign);
+
+        // generate decimal point
+            r = r && p.dot(sink, long_frac_part, precision);
+
+        // generate fractional part with the desired precision
+            r = r && p.fraction_part(sink, long_frac_part, prec, precision);
+
+            if (r && 0 == (Policies::fmtflags::fixed & flags)) {
+                return p.template exponent<CharEncoding, Tag>(sink, 
+                    traits::truncate_to_long::call(dim));
+            }
+            return r;
+        }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif 
+
+    };
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/int.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/int.hpp
new file mode 100644 (file)
index 0000000..39878e1
--- /dev/null
@@ -0,0 +1,525 @@
+//  Copyright (c) 2001-2012 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_INT_FEB_23_2007_0840PM)
+#define BOOST_SPIRIT_KARMA_INT_FEB_23_2007_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/numeric/detail/numeric_utils.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    namespace tag
+    {
+        template <typename T, unsigned Radix, bool force_sign>
+        struct int_generator
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    namespace karma
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // This one is the class that the user can instantiate directly in
+        // order to create a customized int generator
+        template <typename T = int, unsigned Radix = 10, bool force_sign = false>
+        struct int_generator
+          : spirit::terminal<tag::int_generator<T, Radix, force_sign> >
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::short_>    // enables short_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::int_>      // enables int_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::long_>     // enables long_
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct use_terminal<karma::domain, tag::long_long> // enables long_long
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, short>    // enables lit(short(0))
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, int>      // enables lit(0)
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, long>     // enables lit(0L)
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct use_terminal<karma::domain, boost::long_long_type> // enables lit(0LL)
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables short_(...)
+      , terminal_ex<tag::short_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables int_(...)
+      , terminal_ex<tag::int_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables long_(...)
+      , terminal_ex<tag::long_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables long_long(...)
+      , terminal_ex<tag::long_long, fusion::vector1<A0> >
+    > : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>                               // enables *lazy* short_(...)
+    struct use_lazy_terminal<karma::domain, tag::short_, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* int_(...)
+    struct use_lazy_terminal<karma::domain, tag::int_, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* long_(...)
+    struct use_lazy_terminal<karma::domain, tag::long_, 1>
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>                               // enables *lazy* long_long(...)
+    struct use_lazy_terminal<karma::domain, tag::long_long, 1>
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom int_generator
+    template <typename T, unsigned Radix, bool force_sign>
+    struct use_terminal<karma::domain, tag::int_generator<T, Radix, force_sign> >
+      : mpl::true_ {};
+
+    // enables any custom int_generator(...)
+    template <typename T, unsigned Radix, bool force_sign, typename A0>
+    struct use_terminal<karma::domain
+      , terminal_ex<tag::int_generator<T, Radix, force_sign>
+                  , fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    // enables *lazy* custom int_generator
+    template <typename T, unsigned Radix, bool force_sign>
+    struct use_lazy_terminal<
+        karma::domain
+      , tag::int_generator<T, Radix, force_sign>
+      , 1 // arity
+    > : mpl::true_ {};
+
+    // enables lit(int)
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_int<A0> >::type>
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::short_;
+    using spirit::int_;
+    using spirit::long_;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::long_long;
+#endif
+    using spirit::lit;    // lit(1) is equivalent to 1
+#endif
+
+    using spirit::short_type;
+    using spirit::int_type;
+    using spirit::long_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::long_long_type;
+#endif
+
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for int generators not having a direct
+    //  initializer: int_, long_ etc. These generators must be used in
+    //  conjunction with an Attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename CharEncoding, typename Tag, unsigned Radix
+      , bool force_sign>
+    struct any_int_generator
+      : primitive_generator<any_int_generator<T, CharEncoding, Tag, Radix
+          , force_sign> >
+    {
+    private:
+        template <typename OutputIterator, typename Attribute>
+        static bool insert_int(OutputIterator& sink, Attribute const& attr)
+        {
+            return sign_inserter::call(sink, traits::test_zero(attr)
+                      , traits::test_negative(attr), force_sign) &&
+                   int_inserter<Radix, CharEncoding, Tag>::call(sink
+                      , traits::get_absolute_value(attr));
+        }
+
+    public:
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        // check template Attribute 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        BOOST_SPIRIT_ASSERT_MSG(std::numeric_limits<T>::is_signed,
+            signed_unsigned_mismatch, ());
+
+        // int has a Attribute attached
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool
+        generate(OutputIterator& sink, Context& context, Delimiter const& d
+          , Attribute const& attr)
+        {
+            if (!traits::has_optional_value(attr))
+                return false;       // fail if it's an uninitialized optional
+
+            return insert_int(sink, traits::extract_from<T>(attr, context)) &&
+                   delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // this int has no Attribute attached, it needs to have been
+        // initialized from a direct literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        generate(OutputIterator&, Context&, Delimiter const&, unused_type)
+        {
+            // It is not possible (doesn't make sense) to use numeric generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, int_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("integer");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for int generators having a direct
+    //  initializer: int_(10), long_(20) etc.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename CharEncoding, typename Tag, unsigned Radix
+      , bool force_sign, bool no_attribute>
+    struct literal_int_generator
+      : primitive_generator<literal_int_generator<T, CharEncoding, Tag, Radix
+          , force_sign, no_attribute> >
+    {
+    private:
+        template <typename OutputIterator, typename Attribute>
+        static bool insert_int(OutputIterator& sink, Attribute const& attr)
+        {
+            return sign_inserter::call(sink, traits::test_zero(attr)
+                      , traits::test_negative(attr), force_sign) &&
+                   int_inserter<Radix, CharEncoding, Tag>::call(sink
+                      , traits::get_absolute_value(attr));
+        }
+
+    public:
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        literal_int_generator(typename add_const<T>::type n)
+          : n_(n) {}
+
+        // check template Attribute 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        BOOST_SPIRIT_ASSERT_MSG(std::numeric_limits<T>::is_signed,
+            signed_unsigned_mismatch, ());
+
+        // A int_(1) which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef typename attribute<Context>::type attribute_type;
+            if (!traits::has_optional_value(attr) ||
+                n_ != traits::extract_from<attribute_type>(attr, context))
+            {
+                return false;
+            }
+            return insert_int(sink, n_) && delimit_out(sink, d);
+        }
+
+        // A int_(1) without any associated attribute just emits its
+        // immediate literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , unused_type) const
+        {
+            return insert_int(sink, n_) && delimit_out(sink, d);
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("integer");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers, unsigned Radix = 10
+          , bool force_sign = false>
+        struct make_int
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef any_int_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Radix
+              , force_sign
+            > result_type;
+
+            result_type operator()(unused_type, unused_type) const
+            {
+                return result_type();
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::short_, Modifiers>
+      : detail::make_int<short, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::int_, Modifiers>
+      : detail::make_int<int, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::long_, Modifiers>
+      : detail::make_int<long, Modifiers> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers>
+    struct make_primitive<tag::long_long, Modifiers>
+      : detail::make_int<boost::long_long_type, Modifiers> {};
+#endif
+
+    template <typename T, unsigned Radix, bool force_sign, typename Modifiers>
+    struct make_primitive<tag::int_generator<T, Radix, force_sign>, Modifiers>
+      : detail::make_int<typename remove_const<T>::type
+          , Modifiers, Radix, force_sign> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers, unsigned Radix = 10
+          , bool force_sign = false>
+        struct make_int_direct
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_int_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Radix, force_sign, false
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                return result_type(fusion::at_c<0>(term.args));
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::short_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_int_direct<short, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::int_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_int_direct<int, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_int_direct<long, Modifiers> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_long, fusion::vector1<A0> >, Modifiers>
+      : detail::make_int_direct<boost::long_long_type, Modifiers> {};
+#endif
+
+    template <typename T, unsigned Radix, bool force_sign, typename A0
+      , typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::int_generator<T, Radix, force_sign>
+          , fusion::vector1<A0> >, Modifiers>
+      : detail::make_int_direct<typename remove_const<T>::type
+          , Modifiers, Radix, force_sign> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers>
+        struct basic_int_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_int_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , 10, false, true
+            > result_type;
+
+            template <typename T_>
+            result_type operator()(T_ i, unused_type) const
+            {
+                return result_type(i);
+            }
+        };
+    }
+
+    template <typename Modifiers>
+    struct make_primitive<short, Modifiers>
+      : detail::basic_int_literal<short, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<int, Modifiers>
+      : detail::basic_int_literal<int, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<long, Modifiers>
+      : detail::basic_int_literal<long, Modifiers> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers>
+    struct make_primitive<boost::long_long_type, Modifiers>
+      : detail::basic_int_literal<boost::long_long_type, Modifiers> {};
+#endif
+
+    // lit(int)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_int<A0> >::type>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef literal_int_generator<
+            typename remove_const<A0>::type
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , 10, false, true
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real.hpp
new file mode 100644 (file)
index 0000000..597ec4e
--- /dev/null
@@ -0,0 +1,454 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_REAL_FEB_26_2007_0512PM)
+#define BOOST_SPIRIT_KARMA_REAL_FEB_26_2007_0512PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/char.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/numeric/real_policies.hpp>
+#include <boost/spirit/home/karma/numeric/detail/real_utils.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace karma
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // forward declaration only
+        template <typename T>
+        struct real_policies;
+
+        ///////////////////////////////////////////////////////////////////////
+        // This is the class that the user can instantiate directly in
+        // order to create a customized real generator
+        template <typename T = double, typename Policies = real_policies<T> >
+        struct real_generator
+          : spirit::terminal<tag::stateful_tag<Policies, tag::double_, T> >
+        {
+            typedef tag::stateful_tag<Policies, tag::double_, T> tag_type;
+
+            real_generator() {}
+            real_generator(Policies const& p)
+              : spirit::terminal<tag_type>(p) {}
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::float_>       // enables float_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::double_>      // enables double_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::long_double>  // enables long_double
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, float>             // enables lit(1.0f)
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, double>            // enables lit(1.0)
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, long double>       // enables lit(1.0l)
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables float_(...)
+      , terminal_ex<tag::float_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables double_(...)
+      , terminal_ex<tag::double_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables long_double(...)
+      , terminal_ex<tag::long_double, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    // lazy float_(...), double_(...), long_double(...)
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::float_, 1>
+      : mpl::true_ {};
+
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::double_, 1>
+      : mpl::true_ {};
+
+    template <>
+    struct use_lazy_terminal<karma::domain, tag::long_double, 1>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables custom real generator
+    template <typename T, typename Policies>
+    struct use_terminal<karma::domain
+          , tag::stateful_tag<Policies, tag::double_, T> >
+      : mpl::true_ {};
+
+    template <typename T, typename Policies, typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::stateful_tag<Policies, tag::double_, T>
+          , fusion::vector1<A0> > >
+      : mpl::true_ {};
+
+    // enables *lazy* custom real generator
+    template <typename T, typename Policies>
+    struct use_lazy_terminal<
+        karma::domain
+      , tag::stateful_tag<Policies, tag::double_, T>
+      , 1 // arity
+    > : mpl::true_ {};
+
+    // enables lit(double)
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_real<A0> >::type>
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::float_;
+    using spirit::double_;
+    using spirit::long_double;
+#endif
+
+    using spirit::float_type;
+    using spirit::double_type;
+    using spirit::long_double_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for real generators not having a direct
+    //  initializer: float_, double_ etc. These generators must be used in
+    //  conjunction with an attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename Policies, typename CharEncoding, typename Tag>
+    struct any_real_generator
+      : primitive_generator<any_real_generator<T, Policies, CharEncoding, Tag> >
+    {
+        typedef typename Policies::properties properties;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        any_real_generator(Policies const& policies = Policies())
+          : p_(policies) {}
+
+        // double_/float_/etc. has an attached attribute
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            if (!traits::has_optional_value(attr))
+                return false;       // fail if it's an uninitialized optional
+
+            typedef real_inserter<T, Policies, CharEncoding, Tag> inserter_type;
+            return inserter_type::call(sink, traits::extract_from<T>(attr, context), p_) &&
+                   karma::delimit_out(sink, d);    // always do post-delimiting
+        }
+
+        // this double_/float_/etc. has no attribute attached, it needs to have
+        // been initialized from a direct literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool generate(OutputIterator&, Context&, Delimiter const&
+          , unused_type)
+        {
+            // It is not possible (doesn't make sense) to use numeric generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, real_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("real");
+        }
+
+        Policies p_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for real generators having a direct
+    //  initializer: float_(10.), double_(20.) etc.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename Policies, typename CharEncoding, typename Tag
+      , bool no_attribute>
+    struct literal_real_generator
+      : primitive_generator<literal_real_generator<T, Policies, CharEncoding
+          , Tag, no_attribute> >
+    {
+        typedef typename Policies::properties properties;
+
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        literal_real_generator(typename add_const<T>::type n
+              , Policies const& policies = Policies())
+          : n_(n), p_(policies) {}
+
+        // A double_(1.0) which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef typename attribute<Context>::type attribute_type;
+            if (!traits::has_optional_value(attr) ||
+                n_ != traits::extract_from<attribute_type>(attr, context))
+            {
+                return false;
+            }
+
+            typedef real_inserter<T, Policies, CharEncoding, Tag> inserter_type;
+            return inserter_type::call(sink, n_, p_) &&
+                   karma::delimit_out(sink, d);    // always do post-delimiting
+        }
+
+        // A double_(1.0) without any associated attribute just emits its
+        // immediate literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , unused_type) const
+        {
+            typedef real_inserter<T, Policies, CharEncoding, Tag> inserter_type;
+            return inserter_type::call(sink, n_, p_) &&
+                   karma::delimit_out(sink, d);    // always do post-delimiting
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("real");
+        }
+
+        T n_;
+        Policies p_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers
+          , typename Policies = real_policies<T> >
+        struct make_real
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef any_real_generator<
+                T, Policies
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                typedef tag::stateful_tag<Policies, tag::double_, T> tag_type;
+                using spirit::detail::get_stateful_data;
+                return result_type(get_stateful_data<tag_type>::call(term));
+            }
+        };
+    }
+
+    template <typename Modifiers>
+    struct make_primitive<tag::float_, Modifiers>
+      : detail::make_real<float, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::double_, Modifiers>
+      : detail::make_real<double, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::long_double, Modifiers>
+      : detail::make_real<long double, Modifiers> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies, typename Modifiers>
+    struct make_primitive<
+            tag::stateful_tag<Policies, tag::double_, T>, Modifiers>
+      : detail::make_real<typename remove_const<T>::type
+          , Modifiers, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers
+          , typename Policies = real_policies<T> >
+        struct make_real_direct
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_real_generator<
+                T, Policies
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , false
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                typedef tag::stateful_tag<Policies, tag::double_, T> tag_type;
+                using spirit::detail::get_stateful_data;
+                return result_type(T(fusion::at_c<0>(term.args))
+                  , get_stateful_data<tag_type>::call(term.term));
+            }
+        };
+    }
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::float_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_real_direct<float, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::double_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_real_direct<double, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_double, fusion::vector1<A0> >, Modifiers>
+      : detail::make_real_direct<long double, Modifiers> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies, typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::stateful_tag<Policies, tag::double_, T>
+          , fusion::vector1<A0> >
+          , Modifiers>
+      : detail::make_real_direct<typename remove_const<T>::type
+          , Modifiers, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers>
+        struct basic_real_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_real_generator<
+                T, real_policies<T>
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , true
+            > result_type;
+
+            template <typename T_>
+            result_type operator()(T_ i, unused_type) const
+            {
+                return result_type(T(i));
+            }
+        };
+    }
+
+    template <typename Modifiers>
+    struct make_primitive<float, Modifiers>
+      : detail::basic_real_literal<float, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<double, Modifiers>
+      : detail::basic_real_literal<double, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<long double, Modifiers>
+      : detail::basic_real_literal<long double, Modifiers> {};
+
+    // lit(double)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_real<A0> >::type>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef literal_real_generator<
+            typename remove_const<A0>::type, real_policies<A0>
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , true
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif // defined(BOOST_SPIRIT_KARMA_REAL_FEB_26_2007_0512PM)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/real_policies.hpp
new file mode 100644 (file)
index 0000000..19843bb
--- /dev/null
@@ -0,0 +1,334 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_REAL_POLICIES_MAR_02_2007_0936AM)
+#define BOOST_SPIRIT_KARMA_REAL_POLICIES_MAR_02_2007_0936AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/math/special_functions/fpclassify.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/char.hpp>
+#include <boost/spirit/home/karma/numeric/int.hpp>
+#include <boost/spirit/home/karma/numeric/detail/real_utils.hpp>
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace karma 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  real_policies, if you need special handling of your floating
+    //  point numbers, just overload this policy class and use it as a template
+    //  parameter to the karma::real_generator floating point specifier:
+    //
+    //      template <typename T>
+    //      struct scientific_policy : karma::real_policies<T>
+    //      {
+    //          //  we want the numbers always to be in scientific format
+    //          static int floatfield(T n) { return fmtflags::scientific; }
+    //      };
+    //
+    //      typedef 
+    //          karma::real_generator<double, scientific_policy<double> > 
+    //      science_type;
+    //
+    //      karma::generate(sink, science_type(), 1.0); // will output: 1.0e00
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct real_policies
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // Expose the data type the generator is targeted at
+        ///////////////////////////////////////////////////////////////////////
+        typedef T value_type;
+
+        ///////////////////////////////////////////////////////////////////////
+        //  By default the policy doesn't require any special iterator 
+        //  functionality. The floating point generator exposes its properties
+        //  from here, so this needs to be updated in case other properties
+        //  need to be implemented.
+        ///////////////////////////////////////////////////////////////////////
+        typedef mpl::int_<generator_properties::no_properties> properties;
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Specifies, which representation type to use during output 
+        //  generation.
+        ///////////////////////////////////////////////////////////////////////
+        struct fmtflags
+        {
+            enum {
+                scientific = 0,   // Generate floating-point values in scientific 
+                                  // format (with an exponent field).
+                fixed = 1         // Generate floating-point values in fixed-point 
+                                  // format (with no exponent field). 
+            };
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  This is the main function used to generate the output for a 
+        //  floating point number. It is called by the real generator in order 
+        //  to perform the conversion. In theory all of the work can be 
+        //  implemented here, but it is the easiest to use existing 
+        //  functionality provided by the type specified by the template 
+        //  parameter `Inserter`. 
+        //
+        //      sink: the output iterator to use for generation
+        //      n:    the floating point number to convert 
+        //      p:    the instance of the policy type used to instantiate this 
+        //            floating point generator.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Inserter, typename OutputIterator, typename Policies>
+        static bool
+        call (OutputIterator& sink, T n, Policies const& p)
+        {
+            return Inserter::call_n(sink, n, p);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The default behavior is to not to require generating a sign. If 
+        //  'force_sign()' returns true, then all generated numbers will 
+        //  have a sign ('+' or '-', zeros will have a space instead of a sign)
+        // 
+        //      n     The floating point number to output. This can be used to 
+        //            adjust the required behavior depending on the value of 
+        //            this number.
+        ///////////////////////////////////////////////////////////////////////
+        static bool force_sign(T)
+        {
+            return false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Return whether trailing zero digits have to be emitted in the 
+        //  fractional part of the output. If set, this flag instructs the 
+        //  floating point generator to emit trailing zeros up to the required 
+        //  precision digits (as returned by the precision() function).
+        // 
+        //      n     The floating point number to output. This can be used to 
+        //            adjust the required behavior depending on the value of 
+        //            this number.
+        ///////////////////////////////////////////////////////////////////////
+        static bool trailing_zeros(T)
+        {
+            // the default behavior is not to generate trailing zeros
+            return false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Decide, which representation type to use in the generated output.
+        //
+        //  By default all numbers having an absolute value of zero or in 
+        //  between 0.001 and 100000 will be generated using the fixed format, 
+        //  all others will be generated using the scientific representation.
+        //
+        //  The function trailing_zeros() can be used to force the output of 
+        //  trailing zeros in the fractional part up to the number of digits 
+        //  returned by the precision() member function. The default is not to 
+        //  generate the trailing zeros.
+        //  
+        //      n     The floating point number to output. This can be used to 
+        //            adjust the formatting flags depending on the value of 
+        //            this number.
+        ///////////////////////////////////////////////////////////////////////
+        static int floatfield(T n)
+        {
+            if (traits::test_zero(n))
+                return fmtflags::fixed;
+
+            T abs_n = traits::get_absolute_value(n);
+            return (abs_n >= 1e5 || abs_n < 1e-3) 
+              ? fmtflags::scientific : fmtflags::fixed;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Return the maximum number of decimal digits to generate in the 
+        //  fractional part of the output.
+        //  
+        //      n     The floating point number to output. This can be used to 
+        //            adjust the required precision depending on the value of 
+        //            this number. If the trailing zeros flag is specified the
+        //            fractional part of the output will be 'filled' with 
+        //            zeros, if appropriate
+        //
+        //  Note:     If the trailing_zeros flag is not in effect additional
+        //            comments apply. See the comment for the fraction_part()
+        //            function below. Moreover, this precision will be limited
+        //            to the value of std::numeric_limits<T>::digits10 + 1
+        ///////////////////////////////////////////////////////////////////////
+        static unsigned precision(T)
+        {
+            // by default, generate max. 3 fractional digits
+            return 3;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Generate the integer part of the number.
+        //
+        //      sink       The output iterator to use for generation
+        //      n          The absolute value of the integer part of the floating
+        //                 point number to convert (always non-negative).
+        //      sign       The sign of the overall floating point number to
+        //                 convert.
+        //      force_sign Whether a sign has to be generated even for
+        //                 non-negative numbers. Note, that force_sign will be
+        //                 set to false for zero floating point values.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator>
+        static bool integer_part (OutputIterator& sink, T n, bool sign
+          , bool force_sign)
+        {
+            return sign_inserter::call(
+                      sink, traits::test_zero(n), sign, force_sign, force_sign) &&
+                   int_inserter<10>::call(sink, n);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Generate the decimal point.
+        //
+        //      sink  The output iterator to use for generation
+        //      n     The fractional part of the floating point number to 
+        //            convert. Note that this number is scaled such, that 
+        //            it represents the number of units which correspond
+        //            to the value returned from the precision() function 
+        //            earlier. I.e. a fractional part of 0.01234 is
+        //            represented as 1234 when the 'Precision' is 5.
+        //      precision   The number of digits to emit as returned by the 
+        //                  function 'precision()' above
+        //
+        //            This is given to allow to decide, whether a decimal point
+        //            has to be generated at all.
+        //
+        //  Note:     If the trailing_zeros flag is not in effect additional
+        //            comments apply. See the comment for the fraction_part()
+        //            function below.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator>
+        static bool dot (OutputIterator& sink, T /*n*/, unsigned /*precision*/)
+        {
+            return char_inserter<>::call(sink, '.');  // generate the dot by default 
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Generate the fractional part of the number.
+        //
+        //      sink  The output iterator to use for generation
+        //      n     The fractional part of the floating point number to 
+        //            convert. This number is scaled such, that it represents 
+        //            the number of units which correspond to the 'Precision'. 
+        //            I.e. a fractional part of 0.01234 is represented as 1234 
+        //            when the 'precision_' parameter is 5.
+        //      precision_  The corrected number of digits to emit (see note 
+        //                  below)
+        //      precision   The number of digits to emit as returned by the 
+        //                  function 'precision()' above
+        //
+        //  Note: If trailing_zeros() does not return true the 'precision_' 
+        //        parameter will have been corrected from the value the 
+        //        precision() function returned earlier (defining the maximal 
+        //        number of fractional digits) in the sense, that it takes into 
+        //        account trailing zeros. I.e. a floating point number 0.0123 
+        //        and a value of 5 returned from precision() will result in:
+        //
+        //        trailing_zeros is not specified:
+        //            n           123
+        //            precision_  4
+        //
+        //        trailing_zeros is specified:
+        //            n           1230
+        //            precision_  5
+        //
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator>
+        static bool fraction_part (OutputIterator& sink, T n
+          , unsigned precision_, unsigned precision)
+        {
+            // allow for ADL to find the correct overload for floor and log10
+            using namespace std;
+
+            // The following is equivalent to:
+            //    generate(sink, right_align(precision, '0')[ulong], n);
+            // but it's spelled out to avoid inter-modular dependencies.
+
+            typename remove_const<T>::type digits = 
+                (traits::test_zero(n) ? 0 : floor(log10(n))) + 1;
+            bool r = true;
+            for (/**/; r && digits < precision_; digits = digits + 1)
+                r = char_inserter<>::call(sink, '0');
+            if (precision && r)
+                r = int_inserter<10>::call(sink, n);
+            return r;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Generate the exponential part of the number (this is called only 
+        //  if the floatfield() function returned the 'scientific' flag).
+        //
+        //      sink  The output iterator to use for generation
+        //      n     The (signed) exponential part of the floating point 
+        //            number to convert. 
+        //
+        //  The Tag template parameter is either of the type unused_type or
+        //  describes the character class and conversion to be applied to any 
+        //  output possibly influenced by either the lower[...] or upper[...] 
+        //  directives.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharEncoding, typename Tag, typename OutputIterator>
+        static bool exponent (OutputIterator& sink, long n)
+        {
+            long abs_n = traits::get_absolute_value(n);
+            bool r = char_inserter<CharEncoding, Tag>::call(sink, 'e') &&
+                     sign_inserter::call(sink, traits::test_zero(n)
+                        , traits::test_negative(n), false);
+
+            // the C99 Standard requires at least two digits in the exponent
+            if (r && abs_n < 10)
+                r = char_inserter<CharEncoding, Tag>::call(sink, '0');
+            return r && int_inserter<10>::call(sink, abs_n);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Print the textual representations for non-normal floats (NaN and 
+        //  Inf)
+        //
+        //      sink       The output iterator to use for generation
+        //      n          The (signed) floating point number to convert. 
+        //      force_sign Whether a sign has to be generated even for 
+        //                 non-negative numbers
+        //
+        //  The Tag template parameter is either of the type unused_type or
+        //  describes the character class and conversion to be applied to any 
+        //  output possibly influenced by either the lower[...] or upper[...] 
+        //  directives.
+        //
+        //  Note: These functions get called only if fpclassify() returned 
+        //        FP_INFINITY or FP_NAN.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharEncoding, typename Tag, typename OutputIterator>
+        static bool nan (OutputIterator& sink, T n, bool force_sign)
+        {
+            return sign_inserter::call(
+                        sink, false, traits::test_negative(n), force_sign) &&
+                   string_inserter<CharEncoding, Tag>::call(sink, "nan");
+        }
+
+        template <typename CharEncoding, typename Tag, typename OutputIterator>
+        static bool inf (OutputIterator& sink, T n, bool force_sign)
+        {
+            return sign_inserter::call(
+                        sink, false, traits::test_negative(n), force_sign) &&
+                   string_inserter<CharEncoding, Tag>::call(sink, "inf");
+        }
+    };
+}}}
+
+#endif // defined(BOOST_SPIRIT_KARMA_REAL_POLICIES_MAR_02_2007_0936AM)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/uint.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/numeric/uint.hpp
new file mode 100644 (file)
index 0000000..1a34b8d
--- /dev/null
@@ -0,0 +1,576 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_UINT_FEB_23_2007_0840PM)
+#define BOOST_SPIRIT_KARMA_UINT_FEB_23_2007_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/numeric/detail/numeric_utils.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace tag
+    {
+        template <typename T, unsigned Radix>
+        struct uint_generator 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    namespace karma
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // This one is the class that the user can instantiate directly in
+        // order to create a customized int generator
+        template <typename T = unsigned int, unsigned Radix = 10>
+        struct uint_generator
+          : spirit::terminal<tag::uint_generator<T, Radix> >
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::ushort_>   // enables ushort_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::uint_>     // enables uint_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::ulong_>    // enables ulong_
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::bin>       // enables bin
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::oct>       // enables oct
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::hex>       // enables hex
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct use_terminal<karma::domain, tag::ulong_long> // enables ulong_long
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <>           // enables lit(unsigned short(0))
+    struct use_terminal<karma::domain, unsigned short>
+      : mpl::true_ {};
+#endif
+
+    template <>           // enables lit(0U)
+    struct use_terminal<karma::domain, unsigned int>
+      : mpl::true_ {};
+
+    template <>           // enables lit(0UL)
+    struct use_terminal<karma::domain, unsigned long>
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>           // enables lit(0ULL)
+    struct use_terminal<karma::domain, boost::ulong_long_type>
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables ushort_(...)
+      , terminal_ex<tag::ushort_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables uint_(...)
+      , terminal_ex<tag::uint_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables ulong_(...)
+      , terminal_ex<tag::ulong_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables bin(...)
+      , terminal_ex<tag::bin, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables oct(...)
+      , terminal_ex<tag::oct, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables hex(...)
+      , terminal_ex<tag::hex, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename A0>
+    struct use_terminal<karma::domain         // enables ulong_long(...)
+      , terminal_ex<tag::ulong_long, fusion::vector1<A0> >
+    > : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>                               // enables *lazy* ushort_(...)
+    struct use_lazy_terminal<karma::domain, tag::ushort_, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* uint_(...)
+    struct use_lazy_terminal<karma::domain, tag::uint_, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* ulong_(...)
+    struct use_lazy_terminal<karma::domain, tag::ulong_, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* bin(...)
+    struct use_lazy_terminal<karma::domain, tag::bin, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* oct(...)
+    struct use_lazy_terminal<karma::domain, tag::oct, 1>
+      : mpl::true_ {};
+
+    template <>                               // enables *lazy* hex(...)
+    struct use_lazy_terminal<karma::domain, tag::hex, 1>
+      : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>                               // enables *lazy* ulong_long(...)
+    struct use_lazy_terminal<karma::domain, tag::ulong_long, 1>
+      : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom uint_generator
+    template <typename T, unsigned Radix>
+    struct use_terminal<karma::domain, tag::uint_generator<T, Radix> >
+      : mpl::true_ {};
+
+    // enables any custom uint_generator(...)
+    template <typename T, unsigned Radix, typename A0>
+    struct use_terminal<karma::domain
+      , terminal_ex<tag::uint_generator<T, Radix>, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    // enables *lazy* custom uint_generator
+    template <typename T, unsigned Radix>
+    struct use_lazy_terminal<
+        karma::domain
+      , tag::uint_generator<T, Radix>
+      , 1 // arity
+    > : mpl::true_ {};
+
+    // enables lit(uint)
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_uint<A0> >::type>
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::ushort_;
+    using spirit::uint_;
+    using spirit::ulong_;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::ulong_long;
+#endif
+    using spirit::bin;
+    using spirit::oct;
+    using spirit::hex;
+
+    using spirit::lit;    // lit(1U) is equivalent to 1U
+#endif
+
+    using spirit::ushort_type;
+    using spirit::uint_type;
+    using spirit::ulong_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::ulong_long_type;
+#endif
+    using spirit::bin_type;
+    using spirit::oct_type;
+    using spirit::hex_type;
+
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for unsigned int generators not having a
+    //  direct initializer: uint_, ulong_ etc. These generators must be used in
+    //  conjunction with an Attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename CharEncoding, typename Tag, unsigned Radix>
+    struct any_uint_generator
+      : primitive_generator<any_uint_generator<T, CharEncoding, Tag, Radix> >
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        // check template Attribute 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix >= 2 && Radix <= 36, not_supported_radix, ());
+
+        BOOST_SPIRIT_ASSERT_MSG(
+            // the following is a workaround for STLPort, where the simpler
+            // `!std::numeric_limits<T>::is_signed` wouldn't compile
+            mpl::not_<mpl::bool_<std::numeric_limits<T>::is_signed> >::value,
+            signed_unsigned_mismatch, ());
+
+        // int has a Attribute attached
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool
+        generate(OutputIterator& sink, Context& context, Delimiter const& d
+          , Attribute const& attr)
+        {
+            if (!traits::has_optional_value(attr))
+                return false;       // fail if it's an uninitialized optional
+
+            return uint_inserter<Radix, CharEncoding, Tag>::
+                        call(sink, traits::extract_from<T>(attr, context)) &&
+                   delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // this int has no Attribute attached, it needs to have been
+        // initialized from a direct literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool
+        generate(OutputIterator&, Context&, Delimiter const&, unused_type)
+        {
+            // It is not possible (doesn't make sense) to use numeric generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, uint_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("unsigned-integer");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization is used for unsigned int generators having a direct
+    //  initializer: uint_(10), ulong_(20) etc.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename CharEncoding, typename Tag, unsigned Radix
+      , bool no_attribute>
+    struct literal_uint_generator
+      : primitive_generator<literal_uint_generator<T, CharEncoding, Tag, Radix
+          , no_attribute> >
+    {
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        literal_uint_generator(typename add_const<T>::type n)
+          : n_(n) {}
+
+        // check template Attribute 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix >= 2 && Radix <= 36, not_supported_radix, ());
+
+        BOOST_SPIRIT_ASSERT_MSG(
+            // the following is a workaround for STLPort, where the simpler
+            // `!std::numeric_limits<T>::is_signed wouldn't` compile
+            mpl::not_<mpl::bool_<std::numeric_limits<T>::is_signed> >::value,
+            signed_unsigned_mismatch, ());
+
+        // A uint(1U) which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef typename attribute<Context>::type attribute_type;
+            if (!traits::has_optional_value(attr) ||
+                n_ != traits::extract_from<attribute_type>(attr, context))
+            {
+                return false;
+            }
+            return uint_inserter<Radix, CharEncoding, Tag>::call(sink, n_) &&
+                   delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // A uint(1U) without any associated attribute just emits its
+        // immediate literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , unused_type) const
+        {
+            return uint_inserter<Radix, CharEncoding, Tag>::call(sink, n_) &&
+                   delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("unsigned-integer");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers, unsigned Radix = 10>
+        struct make_uint
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef any_uint_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Radix
+            > result_type;
+
+            result_type operator()(unused_type, unused_type) const
+            {
+                return result_type();
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::ushort_, Modifiers>
+      : detail::make_uint<unsigned short, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::uint_, Modifiers>
+      : detail::make_uint<unsigned int, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::ulong_, Modifiers>
+      : detail::make_uint<unsigned long, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::bin, Modifiers>
+      : detail::make_uint<unsigned, Modifiers, 2> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::oct, Modifiers>
+      : detail::make_uint<unsigned, Modifiers, 8> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::hex, Modifiers>
+      : detail::make_uint<unsigned, Modifiers, 16> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers>
+    struct make_primitive<tag::ulong_long, Modifiers>
+      : detail::make_uint<boost::ulong_long_type, Modifiers> {};
+#endif
+
+    template <typename T, unsigned Radix, typename Modifiers>
+    struct make_primitive<tag::uint_generator<T, Radix>, Modifiers>
+      : detail::make_uint<typename remove_const<T>::type, Modifiers, Radix> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers, unsigned Radix = 10>
+        struct make_uint_direct
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_uint_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , Radix, false
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                return result_type(fusion::at_c<0>(term.args));
+            }
+        };
+    }
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ushort_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned short, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::uint_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned int, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ulong_, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned long, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::bin, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned, Modifiers, 2> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::oct, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned, Modifiers, 8> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::hex, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<unsigned, Modifiers, 16> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ulong_long, fusion::vector1<A0> >, Modifiers>
+      : detail::make_uint_direct<boost::ulong_long_type, Modifiers> {};
+#endif
+
+    template <typename T, unsigned Radix, typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::uint_generator<T, Radix>, fusion::vector1<A0> >
+          , Modifiers>
+      : detail::make_uint_direct<typename remove_const<T>::type, Modifiers, Radix>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T, typename Modifiers>
+        struct basic_uint_literal
+        {
+            static bool const lower =
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper =
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef literal_uint_generator<
+                T
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , 10, true
+            > result_type;
+
+            template <typename T_>
+            result_type operator()(T_ i, unused_type) const
+            {
+                return result_type(i);
+            }
+        };
+    }
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <typename Modifiers>
+    struct make_primitive<unsigned short, Modifiers>
+      : detail::basic_uint_literal<unsigned short, Modifiers> {};
+#endif
+
+    template <typename Modifiers>
+    struct make_primitive<unsigned int, Modifiers>
+      : detail::basic_uint_literal<unsigned int, Modifiers> {};
+
+    template <typename Modifiers>
+    struct make_primitive<unsigned long, Modifiers>
+      : detail::basic_uint_literal<unsigned long, Modifiers> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers>
+    struct make_primitive<boost::ulong_long_type, Modifiers>
+      : detail::basic_uint_literal<boost::ulong_long_type, Modifiers> {};
+#endif
+
+    // lit(uint)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_uint<A0> >::type>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef literal_uint_generator<
+            typename remove_const<A0>::type
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , 10, true
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator.hpp
new file mode 100644 (file)
index 0000000..0f76299
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_OPERATOR_FEB_28_2007_0351PM)
+#define BOOST_SPIRIT_KARMA_OPERATOR_FEB_28_2007_0351PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/sequence.hpp>
+#include <boost/spirit/home/karma/operator/and_predicate.hpp>
+#include <boost/spirit/home/karma/operator/not_predicate.hpp>
+#include <boost/spirit/home/karma/operator/alternative.hpp>
+#include <boost/spirit/home/karma/operator/kleene.hpp>
+#include <boost/spirit/home/karma/operator/plus.hpp>
+#include <boost/spirit/home/karma/operator/optional.hpp>
+#include <boost/spirit/home/karma/operator/list.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/alternative.hpp
new file mode 100644 (file)
index 0000000..6883ee2
--- /dev/null
@@ -0,0 +1,208 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_ALTERNATIVE_MAR_01_2007_1117AM)
+#define SPIRIT_KARMA_ALTERNATIVE_MAR_01_2007_1117AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/detail/alternative_function.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/fusion/include/any.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/mpl/accumulate.hpp>
+#include <boost/mpl/bitor.hpp>
+#include <boost/config.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::bitwise_or>  // enables |
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<karma::domain, proto::tag::bitwise_or>  // flattens |
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    // specialization for sequences
+    template <typename Elements>
+    struct alternative_properties
+    {
+        struct element_properties
+        {
+            template <typename T>
+            struct result;
+
+            template <typename F, typename Element>
+            struct result<F(Element)>
+            {
+                typedef properties_of<Element> type;
+            };
+
+            // never called, but needed for decltype-based result_of (C++0x)
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            template <typename Element>
+            typename result<element_properties(Element)>::type
+            operator()(Element&&) const;
+#endif
+        };
+
+        typedef typename mpl::accumulate<
+            typename fusion::result_of::transform<
+                Elements, element_properties>::type
+          , mpl::int_<karma::generator_properties::countingbuffer>
+          , mpl::bitor_<mpl::_2, mpl::_1>
+        >::type type;
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Elements, typename Strict, typename Derived>
+    struct base_alternative : nary_generator<Derived>
+    {
+        typedef typename traits::alternative_properties<Elements>::type 
+            properties;
+
+        template <typename Context, typename Iterator = unused_type>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::alternative_attribute_transform
+              , Iterator, karma::domain
+            >::type all_attributes;
+
+            // Ok, now make a variant over the attribute sequence. Note that
+            // build_variant makes sure that 1) all attributes in the variant
+            // are unique 2) puts the unused attribute, if there is any, to
+            // the front and 3) collapses single element variants, variant<T>
+            // to T.
+            typedef typename traits::build_variant<all_attributes>::type type;
+        };
+
+        base_alternative(Elements const& elements)
+          : elements(elements) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef detail::alternative_generate_function<
+                OutputIterator, Context, Delimiter, Attribute, Strict
+            > functor;
+
+            // f return true if *any* of the parser succeeds
+            functor f (sink, ctx, d, attr);
+            return fusion::any(elements, f);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("alternative");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+
+    template <typename Elements>
+    struct alternative 
+      : base_alternative<Elements, mpl::false_, alternative<Elements> >
+    {
+        typedef base_alternative<Elements, mpl::false_, alternative> 
+            base_alternative_;
+
+        alternative(Elements const& elements)
+          : base_alternative_(elements) {}
+    };
+
+    template <typename Elements>
+    struct strict_alternative 
+      : base_alternative<Elements, mpl::true_, strict_alternative<Elements> >
+    {
+        typedef base_alternative<Elements, mpl::true_, strict_alternative> 
+            base_alternative_;
+
+        strict_alternative(Elements const& elements)
+          : base_alternative_(elements) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Elements, bool strict_mode = false>
+        struct make_alternative 
+          : make_nary_composite<Elements, alternative>
+        {};
+
+        template <typename Elements>
+        struct make_alternative<Elements, true> 
+          : make_nary_composite<Elements, strict_alternative>
+        {};
+    }
+
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::bitwise_or, Elements, Modifiers>
+      : detail::make_alternative<Elements
+          , detail::get_stricttag<Modifiers>::value>
+    {};
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<karma::alternative<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    template <typename Elements>
+    struct has_semantic_action<karma::strict_alternative<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::alternative<Elements>
+          , Attribute, Context, Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::strict_alternative<Elements>
+          , Attribute, Context, Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/and_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/and_predicate.hpp
new file mode 100644 (file)
index 0000000..dc821f1
--- /dev/null
@@ -0,0 +1,95 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_AND_PREDICATE_MAR_22_2009_0412PM)
+#define SPIRIT_KARMA_AND_PREDICATE_MAR_22_2009_0412PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::address_of> // enables &g
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Subject>
+    struct and_predicate : unary_generator<and_predicate<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef mpl::int_<
+            generator_properties::disabling | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        and_predicate(Subject const& subject)
+          : subject(subject) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            // inhibits output
+            detail::disable_output<OutputIterator> disable(sink);
+            return subject.generate(sink, ctx, d, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("and-predicate", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::address_of, Elements, Modifiers>
+      : make_unary_composite<Elements, and_predicate> {};
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::and_predicate<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::and_predicate<Subject>, Attribute
+      , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/kleene.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/kleene.hpp
new file mode 100644 (file)
index 0000000..48507c8
--- /dev/null
@@ -0,0 +1,208 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_KLEENE_MAR_03_2007_0337AM)
+#define BOOST_SPIRIT_KARMA_KLEENE_MAR_03_2007_0337AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/indirect_iterator.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/karma/detail/pass_container.hpp>
+#include <boost/spirit/home/karma/detail/fail_function.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::dereference> // enables *g
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Subject, typename Strict, typename Derived>
+    struct base_kleene : unary_generator<Derived>
+    {
+    private:
+        // Ignore return value in relaxed mode (failing subject generators 
+        // are just skipped). This allows to selectively generate items in 
+        // the provided attribute.
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, mpl::false_) const
+        {
+            bool r = !f(subject);
+            if (!r && !f.is_at_end())
+                f.next();
+            return true;
+        }
+
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, mpl::true_) const
+        {
+            return !f(subject);
+        }
+
+        // There is no way to distinguish a failed generator from a 
+        // generator to be skipped. We assume the user takes responsibility 
+        // for ending the loop if no attribute is specified.
+        template <typename F>
+        bool generate_subject(F f, unused_type, mpl::false_) const
+        {
+            return !f(subject);
+        }
+
+//         template <typename F>
+//         bool generate_subject(F f, unused_type, mpl::true_) const
+//         {
+//             return !f(subject);
+//         }
+
+    public:
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        // Build a std::vector from the subject's attribute. Note
+        // that build_std_vector may return unused_type if the
+        // subject's attribute is an unused_type.
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::build_std_vector<
+                typename traits::attribute_of<Subject, Context, Iterator>::type
+            >
+        {};
+
+        base_kleene(Subject const& subject)
+          : subject(subject) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter> fail_function;
+
+            typedef typename traits::container_iterator<
+                typename add_const<Attribute>::type
+            >::type iterator_type;
+
+            typedef 
+                typename traits::make_indirect_iterator<iterator_type>::type 
+            indirect_iterator_type;
+            typedef detail::pass_container<
+                fail_function, Attribute, indirect_iterator_type, mpl::false_>
+            pass_container;
+
+            iterator_type it = traits::begin(attr);
+            iterator_type end = traits::end(attr);
+
+            pass_container pass(fail_function(sink, ctx, d), 
+                indirect_iterator_type(it), indirect_iterator_type(end));
+
+            // kleene fails only if the underlying output fails
+            while (!pass.is_at_end())
+            {
+                if (!generate_subject(pass, attr, Strict()))
+                    break;
+            }
+            return detail::sink_is_good(sink);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("kleene", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    template <typename Subject>
+    struct kleene 
+      : base_kleene<Subject, mpl::false_, kleene<Subject> >
+    {
+        typedef base_kleene<Subject, mpl::false_, kleene> base_kleene_;
+
+        kleene(Subject const& subject)
+          : base_kleene_(subject) {}
+    };
+
+    template <typename Subject>
+    struct strict_kleene 
+      : base_kleene<Subject, mpl::true_, strict_kleene<Subject> >
+    {
+        typedef base_kleene<Subject, mpl::true_, strict_kleene> base_kleene_;
+
+        strict_kleene(Subject const& subject)
+          : base_kleene_(subject) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Subject, bool strict_mode = false>
+        struct make_kleene 
+          : make_unary_composite<Subject, kleene>
+        {};
+
+        template <typename Subject>
+        struct make_kleene<Subject, true> 
+          : make_unary_composite<Subject, strict_kleene>
+        {};
+    }
+
+    template <typename Subject, typename Modifiers>
+    struct make_composite<proto::tag::dereference, Subject, Modifiers>
+      : detail::make_kleene<Subject, detail::get_stricttag<Modifiers>::value>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::kleene<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject>
+    struct has_semantic_action<karma::strict_kleene<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::kleene<Subject>, Attribute
+          , Context, Iterator> 
+      : mpl::true_ {};
+
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::strict_kleene<Subject>, Attribute
+          , Context, Iterator> 
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/list.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/list.hpp
new file mode 100644 (file)
index 0000000..e64a9bf
--- /dev/null
@@ -0,0 +1,229 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_LIST_MAY_01_2007_0229PM)
+#define SPIRIT_KARMA_LIST_MAY_01_2007_0229PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/indirect_iterator.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/karma/detail/pass_container.hpp>
+#include <boost/spirit/home/karma/detail/fail_function.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::modulus> // enables g % d
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Left, typename Right, typename Strict, typename Derived>
+    struct base_list : binary_generator<Derived>
+    {
+    private:
+        // iterate over the given container until its exhausted or the embedded
+        // (left) generator succeeds
+        template <typename F, typename Attribute>
+        bool generate_left(F f, Attribute const&, mpl::false_) const
+        {
+            // Failing subject generators are just skipped. This allows to
+            // selectively generate items in the provided attribute.
+            while (!f.is_at_end())
+            {
+                bool r = !f(left);
+                if (r)
+                    return true;
+                if (!f.is_at_end())
+                    f.next();
+            }
+            return false;
+        }
+
+        template <typename F, typename Attribute>
+        bool generate_left(F f, Attribute const&, mpl::true_) const
+        {
+            return !f(left);
+        }
+
+        // There is no way to distinguish a failed generator from a
+        // generator to be skipped. We assume the user takes responsibility
+        // for ending the loop if no attribute is specified.
+        template <typename F>
+        bool generate_left(F f, unused_type, mpl::false_) const
+        {
+            return !f(left);
+        }
+
+    public:
+        typedef Left left_type;
+        typedef Right right_type;
+
+        typedef mpl::int_<
+            left_type::properties::value
+          | right_type::properties::value
+          | generator_properties::buffering
+          | generator_properties::counting
+        > properties;
+
+        // Build a std::vector from the LHS's attribute. Note
+        // that build_std_vector may return unused_type if the
+        // subject's attribute is an unused_type.
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::build_std_vector<
+                typename traits::attribute_of<Left, Context, Iterator>::type>
+        {};
+
+        base_list(Left const& left, Right const& right)
+          : left(left), right(right)
+        {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter
+            > fail_function;
+
+            typedef typename traits::container_iterator<
+                typename add_const<Attribute>::type
+            >::type iterator_type;
+
+            typedef
+                typename traits::make_indirect_iterator<iterator_type>::type
+            indirect_iterator_type;
+            typedef detail::pass_container<
+                fail_function, Attribute, indirect_iterator_type, mpl::false_>
+            pass_container;
+
+            iterator_type it = traits::begin(attr);
+            iterator_type end = traits::end(attr);
+
+            pass_container pass(fail_function(sink, ctx, d),
+                indirect_iterator_type(it), indirect_iterator_type(end));
+
+            if (generate_left(pass, attr, Strict()))
+            {
+                while (!pass.is_at_end())
+                {
+                    // wrap the given output iterator as generate_left might fail
+                    detail::enable_buffering<OutputIterator> buffering(sink);
+                    {
+                        detail::disable_counting<OutputIterator> nocounting(sink);
+
+                        if (!right.generate(sink, ctx, d, unused))
+                            return false;     // shouldn't happen
+
+                        if (!generate_left(pass, attr, Strict()))
+                            break;            // return true as one item succeeded
+                    }
+                    buffering.buffer_copy();
+                }
+                return detail::sink_is_good(sink);
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("list",
+                std::make_pair(left.what(context), right.what(context)));
+        }
+
+        Left left;
+        Right right;
+    };
+
+    template <typename Left, typename Right>
+    struct list
+      : base_list<Left, Right, mpl::false_, list<Left, Right> >
+    {
+        typedef base_list<Left, Right, mpl::false_, list> base_list_;
+
+        list(Left const& left, Right const& right)
+          : base_list_(left, right) {}
+    };
+
+    template <typename Left, typename Right>
+    struct strict_list
+      : base_list<Left, Right, mpl::true_, strict_list<Left, Right> >
+    {
+        typedef base_list<Left, Right, mpl::true_, strict_list> base_list_;
+
+        strict_list (Left const& left, Right const& right)
+          : base_list_(left, right) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Subject, bool strict_mode = false>
+        struct make_list
+          : make_binary_composite<Subject, list>
+        {};
+
+        template <typename Subject>
+        struct make_list<Subject, true>
+          : make_binary_composite<Subject, strict_list>
+        {};
+    }
+
+    template <typename Subject, typename Modifiers>
+    struct make_composite<proto::tag::modulus, Subject, Modifiers>
+      : detail::make_list<Subject, detail::get_stricttag<Modifiers>::value>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right>
+    struct has_semantic_action<karma::list<Left, Right> >
+      : binary_has_semantic_action<Left, Right> {};
+
+    template <typename Left, typename Right>
+    struct has_semantic_action<karma::strict_list<Left, Right> >
+      : binary_has_semantic_action<Left, Right> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<karma::list<Left, Right>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+
+    template <typename Left, typename Right, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<karma::strict_list<Left, Right>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/not_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/not_predicate.hpp
new file mode 100644 (file)
index 0000000..01c97f2
--- /dev/null
@@ -0,0 +1,96 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_NOT_PREDICATE_MAR_21_2009_1132AM)
+#define SPIRIT_KARMA_NOT_PREDICATE_MAR_21_2009_1132AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::logical_not> // enables !g
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Subject>
+    struct not_predicate : unary_generator<not_predicate<Subject> >
+    {
+        typedef Subject subject_type;
+
+        typedef mpl::int_<
+            generator_properties::disabling | subject_type::properties::value
+        > properties;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        not_predicate(Subject const& subject)
+          : subject(subject) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            // inhibits output
+            detail::disable_output<OutputIterator> disable(sink);
+            return !subject.generate(sink, ctx, d, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("not-predicate", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::logical_not, Elements, Modifiers>
+      : make_unary_composite<Elements, not_predicate> {};
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::not_predicate<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<karma::not_predicate<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/optional.hpp
new file mode 100644 (file)
index 0000000..983142d
--- /dev/null
@@ -0,0 +1,105 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_OPTIONAL_MARCH_31_2007_0852AM)
+#define SPIRIT_KARMA_OPTIONAL_MARCH_31_2007_0852AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/optional.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::negate> // enables -g
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct optional : unary_generator<optional<Subject> >
+    {
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        // Build a boost::optional from the subject's attribute. Note
+        // that boost::optional may return unused_type if the
+        // subject's attribute is an unused_type.
+        template <typename Context, typename Iterator = unused_type>
+        struct attribute
+          : traits::build_optional<
+                typename traits::attribute_of<Subject, Context, Iterator>::type
+            >
+        {};
+
+        optional(Subject const& subject)
+          : subject(subject) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            if (traits::has_optional_value(attr)) 
+                subject.generate(sink, ctx, d, traits::optional_value(attr));
+            return sink_is_good(sink);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("optional", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::negate, Elements, Modifiers>
+      : make_unary_composite<Elements, optional> {};
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::optional<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::optional<Subject>, Attribute, Context
+          , Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/plus.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/plus.hpp
new file mode 100644 (file)
index 0000000..0d77c09
--- /dev/null
@@ -0,0 +1,226 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_POSITIVE_MAR_03_2007_0945PM)
+#define BOOST_SPIRIT_KARMA_POSITIVE_MAR_03_2007_0945PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/indirect_iterator.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/karma/detail/pass_container.hpp>
+#include <boost/spirit/home/karma/detail/fail_function.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::unary_plus> // enables +g
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Subject, typename Strict, typename Derived>
+    struct base_plus : unary_generator<Derived>
+    {
+    private:
+        // Ignore return value in relaxed mode (failing subject generators 
+        // are just skipped). This allows to selectively generate items in 
+        // the provided attribute.
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, bool& result, mpl::false_) const
+        {
+            bool r = !f(subject);
+            if (r) 
+                result = true;
+            else if (!f.is_at_end())
+                f.next();
+            return true;
+        }
+
+        template <typename F, typename Attribute>
+        bool generate_subject(F f, Attribute const&, bool& result, mpl::true_) const
+        {
+            bool r = !f(subject);
+            if (r)
+                result = true;
+            return r;
+        }
+
+        // There is no way to distinguish a failed generator from a 
+        // generator to be skipped. We assume the user takes responsibility
+        // for ending the loop if no attribute is specified.
+        template <typename F>
+        bool generate_subject(F f, unused_type, bool& result, mpl::false_) const
+        {
+            bool r = f(subject);
+            if (!r)
+                result = true;
+            return !r;
+        }
+
+//         template <typename F>
+//         bool generate_subject(F f, unused_type, bool& result, mpl::true_) const
+//         {
+//             bool r = f(subject);
+//             if (!r)
+//                 result = true;
+//             return !r;
+//         }
+
+    public:
+        typedef Subject subject_type;
+        typedef typename subject_type::properties properties;
+
+        // Build a std::vector from the subjects attribute. Note
+        // that build_std_vector may return unused_type if the
+        // subject's attribute is an unused_type.
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::build_std_vector<
+                typename traits::attribute_of<subject_type, Context, Iterator>::type
+            >
+        {};
+
+        base_plus(Subject const& subject)
+          : subject(subject) {}
+
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter> fail_function;
+
+            typedef typename traits::container_iterator<
+                typename add_const<Attribute>::type
+            >::type iterator_type;
+
+            typedef 
+                typename traits::make_indirect_iterator<iterator_type>::type 
+            indirect_iterator_type;
+            typedef detail::pass_container<
+                fail_function, Attribute, indirect_iterator_type, mpl::false_>
+            pass_container;
+
+            iterator_type it = traits::begin(attr);
+            iterator_type end = traits::end(attr);
+
+            // plus fails if the parameter is empty
+            if (traits::compare(it, end))
+                return false;
+
+            pass_container pass(fail_function(sink, ctx, d), 
+                indirect_iterator_type(it), indirect_iterator_type(end));
+
+            // from now on plus fails if the underlying output fails or overall
+            // no subject generators succeeded
+            bool result = false;
+            while (!pass.is_at_end())
+            {
+                if (!generate_subject(pass, attr, result, Strict()))
+                    break;
+            }
+            return result && detail::sink_is_good(sink);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("plus", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    template <typename Subject>
+    struct plus 
+      : base_plus<Subject, mpl::false_, plus<Subject> >
+    {
+        typedef base_plus<Subject, mpl::false_, plus> base_plus_;
+
+        plus(Subject const& subject)
+          : base_plus_(subject) {}
+    };
+
+    template <typename Subject>
+    struct strict_plus 
+      : base_plus<Subject, mpl::true_, strict_plus<Subject> >
+    {
+        typedef base_plus<Subject, mpl::true_, strict_plus> base_plus_;
+
+        strict_plus(Subject const& subject)
+          : base_plus_(subject) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Elements, bool strict_mode = false>
+        struct make_plus 
+          : make_unary_composite<Elements, plus>
+        {};
+
+        template <typename Elements>
+        struct make_plus<Elements, true> 
+          : make_unary_composite<Elements, strict_plus>
+        {};
+    }
+
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::unary_plus, Elements, Modifiers>
+      : detail::make_plus<Elements, detail::get_stricttag<Modifiers>::value>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<karma::plus<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject>
+    struct has_semantic_action<karma::strict_plus<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::plus<Subject>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::strict_plus<Subject>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/operator/sequence.hpp
new file mode 100644 (file)
index 0000000..d7ee806
--- /dev/null
@@ -0,0 +1,313 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_KARMA_SEQUENCE_FEB_28_2007_0247PM)
+#define SPIRIT_KARMA_SEQUENCE_FEB_28_2007_0247PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/detail/fail_function.hpp>
+#include <boost/spirit/home/karma/detail/pass_container.hpp>
+#include <boost/spirit/home/karma/detail/get_stricttag.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/karma/detail/indirect_iterator.hpp>
+#include <boost/spirit/home/support/algorithm/any_if.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/sequence_base_id.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/bitor.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/mpl/accumulate.hpp>
+#include <boost/config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<karma::domain, proto::tag::shift_left> // enables <<
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<karma::domain, proto::tag::shift_left> // flattens <<
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    // specialization for sequences
+    template <typename Elements>
+    struct sequence_properties
+    {
+        struct element_properties
+        {
+            template <typename T>
+            struct result;
+
+            template <typename F, typename Element>
+            struct result<F(Element)>
+            {
+                typedef properties_of<Element> type;
+            };
+
+            // never called, but needed for decltype-based result_of (C++0x)
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            template <typename Element>
+            typename result<element_properties(Element)>::type
+            operator()(Element&&) const;
+#endif
+        };
+
+        typedef typename mpl::accumulate<
+            typename fusion::result_of::transform<
+                Elements, element_properties>::type
+          , mpl::int_<karma::generator_properties::no_properties>
+          , mpl::bitor_<mpl::_2, mpl::_1>
+        >::type type;
+    };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Elements, typename Strict, typename Derived>
+    struct base_sequence : nary_generator<Derived>
+    {
+        typedef typename traits::sequence_properties<Elements>::type properties;
+
+        base_sequence(Elements const& elements)
+          : elements(elements) {}
+
+        typedef Elements elements_type;
+        struct sequence_base_id;
+
+        template <typename Context, typename Iterator = unused_type>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::sequence_attribute_transform
+              , Iterator, karma::domain
+            >::type all_attributes;
+
+            // Now, build a fusion vector over the attributes. Note
+            // that build_fusion_vector 1) removes all unused attributes
+            // and 2) may return unused_type if all elements have
+            // unused_type(s).
+            typedef typename
+                traits::build_fusion_vector<all_attributes>::type
+            type_;
+
+            // Finally, strip single element vectors into its
+            // naked form: vector1<T> --> T
+            typedef typename
+                traits::strip_single_element_vector<type_>::type
+            type;
+        };
+
+        // standard case. Attribute is a fusion tuple
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute, typename Pred1, typename Pred2>
+        bool generate_impl(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute& attr_, Pred1, Pred2) const
+        {
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter> fail_function;
+            typedef traits::attribute_not_unused<Context> predicate;
+
+            // wrap the attribute in a tuple if it is not a tuple or if the
+            // attribute of this sequence is a single element tuple
+            typedef typename attribute<Context>::type_ attr_type_;
+            typename traits::wrap_if_not_tuple<Attribute
+              , typename mpl::and_<
+                    traits::one_element_sequence<attr_type_>
+                  , mpl::not_<traits::one_element_sequence<Attribute> >
+                >::type
+            >::type attr(attr_);
+
+            // return false if *any* of the generators fail
+            bool r = spirit::any_if(elements, attr
+                          , fail_function(sink, ctx, d), predicate());
+
+            typedef typename traits::attribute_size<Attribute>::type size_type;
+
+            // fail generating if sequences have not the same (logical) length
+            return !r && (!Strict::value ||
+                // This ignores container element count (which is not good),
+                // but allows valid attributes to succeed. This will lead to
+                // false positives (failing generators, even if they shouldn't)
+                // if the embedded component is restricting the number of
+                // container elements it consumes (i.e. repeat). This solution
+                // is not optimal but much better than letting _all_ repetitive
+                // components fail.
+                Pred1::value ||
+                size_type(traits::sequence_size<attr_type_>::value) == traits::size(attr_));
+        }
+
+        // Special case when Attribute is an stl container and the sequence's
+        // attribute is not a one element sequence
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate_impl(OutputIterator& sink, Context& ctx
+          , Delimiter const& d, Attribute const& attr_
+          , mpl::true_, mpl::false_) const
+        {
+            // return false if *any* of the generators fail
+            typedef detail::fail_function<
+                OutputIterator, Context, Delimiter> fail_function;
+
+            typedef typename traits::container_iterator<
+                typename add_const<Attribute>::type
+            >::type iterator_type;
+
+            typedef
+                typename traits::make_indirect_iterator<iterator_type>::type
+            indirect_iterator_type;
+            typedef detail::pass_container<
+                fail_function, Attribute, indirect_iterator_type, mpl::true_>
+            pass_container;
+
+            iterator_type begin = traits::begin(attr_);
+            iterator_type end = traits::end(attr_);
+
+            pass_container pass(fail_function(sink, ctx, d),
+                indirect_iterator_type(begin), indirect_iterator_type(end));
+            bool r = fusion::any(elements, pass);
+
+            // fail generating if sequences have not the same (logical) length
+            return !r && (!Strict::value || begin == end);
+        }
+
+        // main generate function. Dispatches to generate_impl depending
+        // on the Attribute type.
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            typedef typename traits::is_container<Attribute>::type
+                is_container;
+
+            typedef typename attribute<Context>::type_ attr_type_;
+            typedef typename traits::one_element_sequence<attr_type_>::type
+                is_one_element_sequence;
+
+            return generate_impl(sink, ctx, d, attr, is_container()
+              , is_one_element_sequence());
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("sequence");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+
+    template <typename Elements>
+    struct sequence
+      : base_sequence<Elements, mpl::false_, sequence<Elements> >
+    {
+        typedef base_sequence<Elements, mpl::false_, sequence> base_sequence_;
+
+        sequence(Elements const& subject)
+          : base_sequence_(subject) {}
+    };
+
+    template <typename Elements>
+    struct strict_sequence
+      : base_sequence<Elements, mpl::true_, strict_sequence<Elements> >
+    {
+        typedef base_sequence<Elements, mpl::true_, strict_sequence>
+            base_sequence_;
+
+        strict_sequence(Elements const& subject)
+          : base_sequence_(subject) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Elements, bool strict_mode = false>
+        struct make_sequence
+          : make_nary_composite<Elements, sequence>
+        {};
+
+        template <typename Elements>
+        struct make_sequence<Elements, true>
+          : make_nary_composite<Elements, strict_sequence>
+        {};
+    }
+
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::shift_left, Elements, Modifiers>
+      : detail::make_sequence<Elements, detail::get_stricttag<Modifiers>::value>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Helper template allowing to get the required container type for a rule
+    // attribute, which is part of a sequence.
+    template <typename Iterator>
+    struct make_sequence_iterator_range
+    {
+        typedef iterator_range<detail::indirect_iterator<Iterator> > type;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<karma::sequence<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    template <typename Elements>
+    struct has_semantic_action<karma::strict_sequence<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::sequence<Elements>, Attribute, Context
+          , Iterator>
+      : mpl::true_ {};
+
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::strict_sequence<Elements>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/phoenix_attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/phoenix_attributes.hpp
new file mode 100644 (file)
index 0000000..a050cf4
--- /dev/null
@@ -0,0 +1,124 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_PHOENIX_ATTRIBUTES_OCT_01_2009_1128AM)
+#define BOOST_SPIRIT_KARMA_PHOENIX_ATTRIBUTES_OCT_01_2009_1128AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/version.hpp>
+
+// we support Phoenix attributes only starting with V2.2
+#if SPIRIT_VERSION >= 0x2020
+
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/karma/detail/indirect_iterator.hpp>
+#include <boost/spirit/home/support/container.hpp>
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/utility/result_of.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Provide customization points allowing the use of phoenix expressions as 
+    // generator functions in the context of generators expecting a container 
+    // attribute (Kleene, plus, list, repeat, etc.)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval>
+    struct is_container<phoenix::actor<Eval> const>
+      : is_container<typename boost::result_of<phoenix::actor<Eval>()>::type>
+    {};
+
+    template <typename Eval>
+    struct container_iterator<phoenix::actor<Eval> const>
+    {
+        typedef phoenix::actor<Eval> const& type;
+    };
+
+    template <typename Eval>
+    struct begin_container<phoenix::actor<Eval> const>
+    {
+        typedef phoenix::actor<Eval> const& type;
+        static type call(phoenix::actor<Eval> const& f)
+        {
+            return f;
+        }
+    };
+
+    template <typename Eval>
+    struct end_container<phoenix::actor<Eval> const>
+    {
+        typedef phoenix::actor<Eval> const& type;
+        static type call(phoenix::actor<Eval> const& f)
+        {
+            return f;
+        }
+    };
+
+    template <typename Eval>
+    struct deref_iterator<phoenix::actor<Eval> const>
+    {
+        typedef typename boost::result_of<phoenix::actor<Eval>()>::type type;
+        static type call(phoenix::actor<Eval> const& f)
+        {
+            return f();
+        }
+    };
+
+    template <typename Eval>
+    struct next_iterator<phoenix::actor<Eval> const>
+    {
+        typedef phoenix::actor<Eval> const& type;
+        static type call(phoenix::actor<Eval> const& f)
+        {
+            return f;
+        }
+    };
+
+    template <typename Eval>
+    struct compare_iterators<phoenix::actor<Eval> const>
+    {
+        static bool 
+        call(phoenix::actor<Eval> const&, phoenix::actor<Eval> const&)
+        {
+            return false;
+        }
+    };
+
+    template <typename Eval>
+    struct container_value<phoenix::actor<Eval> >
+    {
+        typedef phoenix::actor<Eval> const& type;
+    };
+
+    template <typename Eval>
+    struct make_indirect_iterator<phoenix::actor<Eval> const>
+    {
+        typedef phoenix::actor<Eval> const& type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Handle Phoenix actors as attributes, just invoke the function object
+    // and deal with the result as the attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval, typename Exposed>
+    struct extract_from_attribute<phoenix::actor<Eval>, Exposed>
+    {
+        typedef typename boost::result_of<phoenix::actor<Eval>()>::type type;
+
+        template <typename Context>
+        static type call(phoenix::actor<Eval> const& f, Context& context)
+        {
+            return f(unused, context);
+        }
+    };
+}}}
+
+#endif
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/reference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/reference.hpp
new file mode 100644 (file)
index 0000000..4ee5a78
--- /dev/null
@@ -0,0 +1,91 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_REFERENCE_APR_17_2009_1057PM)
+#define BOOST_SPIRIT_KARMA_REFERENCE_APR_17_2009_1057PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // reference is a generator that references another generator (its Subject)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct reference : generator<reference<Subject> >
+    {
+        typedef mpl::int_<generator_properties::all_properties> properties;
+
+        typedef Subject subject_type;
+
+        reference(Subject& subject)
+          : ref(subject) {}
+
+        template <typename Context, typename Unused>
+        struct attribute : Subject::template attribute<Context, Unused> {};
+
+        // Default overload, used whenever the attribute is not unused and not
+        // used from an aliased rule.
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& delim, Attribute const& attr) const
+        {
+            return ref.get().generate(sink, context, delim, attr);
+        }
+
+        // This overload gets called from an aliased rule only, we take the 
+        // attribute from the context provided from the wrapper rule.
+        template <typename OutputIterator, typename Context
+          , typename Delimiter>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& delim, unused_type) const
+        {
+            return ref.get().generate(sink, context, delim, context.attributes);
+        }
+
+        // This overload is used whenever no attribute is given and it is used
+        // not from an aliased rule.
+        template <typename OutputIterator, typename Delimiter>
+        bool generate(OutputIterator& sink, unused_type
+          , Delimiter const& delim, unused_type) const
+        {
+            return ref.get().generate(sink, unused, delim, unused);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // the reference is transparent (does not add any info)
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject> ref;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<karma::reference<Subject>, Attribute
+      , Context, Iterator>
+      : handles_container<typename remove_const<Subject>::type, Attribute
+        , Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream.hpp
new file mode 100644 (file)
index 0000000..77636f8
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_1254AM)
+#define BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_1254AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/ostream_iterator.hpp>
+#include <boost/spirit/home/karma/stream/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip.hpp
new file mode 100644 (file)
index 0000000..0c771fc
--- /dev/null
@@ -0,0 +1,207 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_MANIP_MAY_03_2007_1424PM)
+#define BOOST_SPIRIT_KARMA_FORMAT_MANIP_MAY_03_2007_1424PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <iterator>
+#include <string>
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/support/iterators/ostream_iterator.hpp>
+#include <boost/mpl/bool.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr
+      , typename CopyExpr = mpl::false_, typename CopyAttr = mpl::false_
+      , typename Delimiter = unused_type, typename Attribute = unused_type>
+    struct format_manip 
+    {
+        // This assertion makes sure we don't hit the only code path which is 
+        // not implemented (because it isn't needed), where both, the 
+        // expression and the attribute need to be held as a copy.
+        BOOST_SPIRIT_ASSERT_MSG(!CopyExpr::value || !CopyAttr::value
+            , error_invalid_should_not_happen, ());
+
+        format_manip(Expr const& xpr, Delimiter const& d, Attribute const& a) 
+          : expr(xpr), delim(d), pre(delimit_flag::dont_predelimit), attr(a) {}
+
+        format_manip(Expr const& xpr, Delimiter const& d
+            , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit, Attribute const& a) 
+          : expr(xpr), delim(d), pre(pre_delimit), attr(a) {}
+
+        Expr const& expr;
+        Delimiter const& delim;
+        BOOST_SCOPED_ENUM(delimit_flag) const pre;
+        Attribute const& attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        format_manip& operator= (format_manip const&);
+    };
+
+    template <typename Expr, typename Delimiter, typename Attribute>
+    struct format_manip<Expr, mpl::false_, mpl::true_, Delimiter, Attribute>
+    {
+        format_manip(Expr const& xpr, Delimiter const& d, Attribute const& a) 
+          : expr(xpr), delim(d), pre(delimit_flag::dont_predelimit), attr(a) {}
+
+        format_manip(Expr const& xpr, Delimiter const& d
+            , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit, Attribute const& a) 
+          : expr(xpr), delim(d), pre(pre_delimit), attr(a) {}
+
+        Expr const& expr;
+        Delimiter const& delim;
+        BOOST_SCOPED_ENUM(delimit_flag) const pre;
+        Attribute attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        format_manip& operator= (format_manip const&);
+    };
+
+    template <typename Expr, typename Delimiter, typename Attribute>
+    struct format_manip<Expr, mpl::true_, mpl::false_, Delimiter, Attribute>
+    {
+        format_manip(Expr const& xpr, Delimiter const& d, Attribute const& a) 
+          : expr(xpr), delim(d), pre(delimit_flag::dont_predelimit), attr(a) {}
+
+        format_manip(Expr const& xpr, Delimiter const& d
+            , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit, Attribute const& a) 
+          : expr(xpr), delim(d), pre(pre_delimit), attr(a) {}
+
+        Expr expr;
+        Delimiter const& delim;
+        BOOST_SCOPED_ENUM(delimit_flag) const pre;
+        Attribute const& attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        format_manip& operator= (format_manip const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct format
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (Expr) is not a valid spirit karma expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/karma_format_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct format<Expr
+      , typename enable_if<traits::matches<karma::domain, Expr> >::type>
+    {
+        typedef format_manip<Expr> type;
+
+        static type call(Expr const& expr)
+        {
+            return type(expr, unused, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Delimiter, typename Enable = void>
+    struct format_delimited
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (Expr) is not a valid spirit karma expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/karma_format_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+    };
+
+    template <typename Expr, typename Delimiter>
+    struct format_delimited<Expr, Delimiter
+      , typename enable_if<traits::matches<karma::domain, Expr> >::type>
+    {
+        typedef format_manip<Expr, mpl::false_, mpl::false_, Delimiter> type;
+
+        static type call(
+            Expr const& expr
+          , Delimiter const& delimiter
+          , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the delimiter is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+            return type(expr, delimiter, pre_delimit, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr> 
+    inline std::basic_ostream<Char, Traits> & 
+    operator<< (std::basic_ostream<Char, Traits> &os
+      , format_manip<Expr, CopyExpr, CopyAttr> const& fm)
+    {
+        karma::ostream_iterator<Char, Char, Traits> sink(os);
+        if (!karma::generate (sink, fm.expr))
+        {
+            os.setstate(std::ios_base::failbit);
+        }
+        return os;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr, typename Attribute> 
+    inline std::basic_ostream<Char, Traits> & 
+    operator<< (std::basic_ostream<Char, Traits> &os
+      , format_manip<Expr, CopyExpr, CopyAttr, unused_type, Attribute> const& fm)
+    {
+        karma::ostream_iterator<Char, Char, Traits> sink(os);
+        if (!karma::generate(sink, fm.expr, fm.attr))
+        {
+            os.setstate(std::ios_base::failbit);
+        }
+        return os;
+    }
+
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr, typename Delimiter> 
+    inline std::basic_ostream<Char, Traits> & 
+    operator<< (std::basic_ostream<Char, Traits> &os
+      , format_manip<Expr, CopyExpr, CopyAttr, Delimiter> const& fm)
+    {
+        karma::ostream_iterator<Char, Char, Traits> sink(os);
+        if (!karma::generate_delimited(sink, fm.expr, fm.delim, fm.pre))
+        {
+            os.setstate(std::ios_base::failbit);
+        }
+        return os;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr, typename Delimiter
+      , typename Attribute> 
+    inline std::basic_ostream<Char, Traits> & 
+    operator<< (std::basic_ostream<Char, Traits> &os
+      , format_manip<Expr, CopyExpr, CopyAttr, Delimiter, Attribute> const& fm)
+    {
+        karma::ostream_iterator<Char, Char, Traits> sink(os);
+        if (!karma::generate_delimited(sink, fm.expr, fm.delim, fm.pre, fm.attr))
+        {
+            os.setstate(std::ios_base::failbit);
+        }
+        return os;
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/format_manip_auto.hpp
new file mode 100644 (file)
index 0000000..9fd4ff5
--- /dev/null
@@ -0,0 +1,56 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_MANIP_AUTO_DEC_02_2009_1246PM)
+#define BOOST_SPIRIT_KARMA_FORMAT_MANIP_AUTO_DEC_02_2009_1246PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/stream/detail/format_manip.hpp>
+#include <boost/spirit/home/karma/auto/create_generator.hpp>
+#include <boost/utility/enable_if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct format<Expr
+      , typename enable_if<traits::meta_create_exists<karma::domain, Expr> >::type>
+    {
+        typedef typename result_of::create_generator<Expr>::type expr_type;
+        typedef format_manip<
+            expr_type, mpl::true_, mpl::false_, unused_type, Expr
+        > type;
+
+        static type call(Expr const& expr)
+        {
+            return type(create_generator<Expr>(), unused, expr);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Delimiter>
+    struct format_delimited<Expr, Delimiter
+      , typename enable_if<traits::meta_create_exists<karma::domain, Expr> >::type>
+    {
+        typedef typename result_of::create_generator<Expr>::type expr_type;
+        typedef format_manip<
+            expr_type, mpl::true_, mpl::false_, Delimiter, Expr
+        > type;
+
+        static type call(Expr const& expr
+          , Delimiter const& delimiter
+          , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
+        {
+            return type(create_generator<Expr>(), delimiter, pre_delimit, expr);
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/iterator_sink.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/detail/iterator_sink.hpp
new file mode 100644 (file)
index 0000000..95a57d4
--- /dev/null
@@ -0,0 +1,55 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boist.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SINK_MAY_27_2007_0133PM)
+#define BOOST_SPIRIT_ITERATOR_SINK_MAY_27_2007_0133PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/iostreams/stream.hpp>
+#include <boost/spirit/home/karma/detail/generate_to.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename OutputIterator, typename Char, typename CharEncoding
+      , typename Tag
+    >
+    struct iterator_sink
+    {
+        typedef boost::iostreams::sink_tag category;
+        typedef Char char_type;
+
+        iterator_sink (OutputIterator& sink_)
+          : sink(sink_)
+        {}
+
+        // Write up to n characters from the buffer s to the output sequence, 
+        // returning the number of characters written
+        std::streamsize write (Char const* s, std::streamsize n) 
+        {
+            std::streamsize bytes_written = 0;
+            while (n--) {
+                if (!generate_to(sink, *s, CharEncoding(), Tag()))
+                    break;
+                ++s; ++bytes_written;
+            }
+            return bytes_written;
+        }
+
+        OutputIterator& sink;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        iterator_sink& operator= (iterator_sink const&);
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip.hpp
new file mode 100644 (file)
index 0000000..2f6c29e
--- /dev/null
@@ -0,0 +1,117 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_MANIP_MAY_01_2007_1211PM)
+#define BOOST_SPIRIT_KARMA_FORMAT_MANIP_MAY_01_2007_1211PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/detail/output_iterator.hpp>
+#include <boost/spirit/home/karma/stream/detail/format_manip.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    inline typename detail::format<Expr>::type 
+    format(Expr const& expr)
+    {
+        return detail::format<Expr>::call(expr);
+    }
+
+    template <typename Expr, typename Attribute>
+    inline detail::format_manip<Expr, mpl::false_, mpl::false_, unused_type, Attribute> 
+    format(
+        Expr const& expr
+      , Attribute const& attr)
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        return format_manip<Expr, mpl::false_, mpl::false_, unused_type, Attribute>(
+            expr, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Delimiter>
+    inline typename detail::format_delimited<Expr, Delimiter>::type 
+    format_delimited(
+        Expr const& expr
+      , Delimiter const& d
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit = 
+            delimit_flag::dont_predelimit)
+    {
+        return detail::format_delimited<Expr, Delimiter>::call(expr, d, pre_delimit);
+    }
+
+    template <typename Expr, typename Delimiter, typename Attribute>
+    inline detail::format_manip<Expr, mpl::false_, mpl::false_, Delimiter, Attribute> 
+    format_delimited(
+        Expr const& xpr
+      , Delimiter const& d
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , Attribute const& attr)
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+        return format_manip<Expr, mpl::false_, mpl::false_, Delimiter, Attribute>(
+            xpr, d, pre_delimit, attr);
+    }
+
+    template <typename Expr, typename Delimiter, typename Attribute>
+    inline detail::format_manip<Expr, mpl::false_, mpl::false_, Delimiter, Attribute> 
+    format_delimited(
+        Expr const& xpr
+      , Delimiter const& d
+      , Attribute const& attr)
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+        return format_manip<Expr, mpl::false_, mpl::false_, Delimiter, Attribute>(
+            xpr, d, delimit_flag::dont_predelimit, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Derived> 
+    inline std::basic_ostream<Char, Traits> & 
+    operator<< (std::basic_ostream<Char, Traits> &os, generator<Derived> const& g)
+    {
+        typedef traits::properties_of<
+            typename result_of::compile<karma::domain, Derived>::type
+        > properties;
+        typedef karma::ostream_iterator<Char, Char, Traits> outiter_type;
+
+        outiter_type target_sink(os);
+        karma::detail::output_iterator<outiter_type, properties> sink(target_sink);
+
+        if (!g.derived().generate(sink, unused, unused, unused))
+        {
+            os.setstate(std::ios_base::failbit);
+        }
+        return os;
+    }
+}}}
+
+#endif 
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/format_manip_attr.hpp
new file mode 100644 (file)
index 0000000..08d53a6
--- /dev/null
@@ -0,0 +1,123 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_KARMA_FORMAT_MANIP_ATTR_APR_24_2009_0734AM)
+#define BOOST_SPIRIT_KARMA_FORMAT_MANIP_ATTR_APR_24_2009_0734AM
+
+#include <boost/spirit/home/karma/stream/format_manip.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1                                                   \
+    <boost/spirit/home/karma/stream/format_manip_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE(z, n, A)                       \
+    BOOST_PP_CAT(A, n) const&
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::format_manip<Expr, mpl::false_, mpl::true_, unused_type
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > > 
+    format(Expr const& xpr, BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return format_manip<Expr, mpl::false_, mpl::true_, unused_type, vector_type>(
+            xpr, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::format_manip<Expr, mpl::false_, mpl::true_, Delimiter
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > > 
+    format_delimited(Expr const& xpr, Delimiter const& d
+      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return format_manip<Expr, mpl::false_, mpl::true_, Delimiter, vector_type>(
+            xpr, d, pre_delimit, attr);
+    }
+
+    template <typename Expr, typename Delimiter
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::format_manip<Expr, mpl::false_, mpl::true_, Delimiter
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > > 
+    format_delimited(Expr const& xpr, Delimiter const& d
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& attr))
+    {
+        using karma::detail::format_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return format_manip<Expr, mpl::false_, mpl::true_, Delimiter, vector_type>(
+            xpr, d, delimit_flag::dont_predelimit, attr);
+    }
+}}}
+
+#undef BOOST_SPIRIT_KARMA_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif 
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/ostream_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/ostream_iterator.hpp
new file mode 100644 (file)
index 0000000..8a51728
--- /dev/null
@@ -0,0 +1,65 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_OSTREAM_ITERATOR_MAY_26_2007_1016PM)
+#define BOOST_SPIRIT_KARMA_OSTREAM_ITERATOR_MAY_26_2007_1016PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <iterator>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We need our own implementation of an ostream_iterator just to be able
+    //  to access the wrapped ostream, which is necessary for the 
+    //  stream_generator, where we must generate the output using the original
+    //  ostream to retain possibly registered facets.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T, typename Elem = char
+      , typename Traits = std::char_traits<Elem> >
+    class ostream_iterator 
+      : public std::iterator<std::output_iterator_tag, void, void, void, void>
+    {
+    public:
+        typedef Elem char_type;
+        typedef Traits traits_type;
+        typedef std::basic_ostream<Elem, Traits> ostream_type;
+        typedef ostream_iterator<T, Elem, Traits> self_type;
+
+        ostream_iterator(ostream_type& os_, Elem const* delim_ = 0)
+          : os(&os_), delim(delim_) {}
+
+        self_type& operator= (T const& val)
+        {
+            *os << val;
+            if (0 != delim)
+                *os << delim;
+            return *this;
+        }
+
+        self_type& operator*() { return *this; }
+        self_type& operator++() { return *this; }
+        self_type operator++(int) { return *this; }
+
+        // expose underlying stream
+        ostream_type& get_ostream() { return *os; }
+        ostream_type const& get_ostream() const { return *os; }
+
+        // expose good bit of underlying stream object
+        bool good() const { return get_ostream().good(); }
+
+    protected:
+        ostream_type *os;
+        Elem const* delim;
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/stream/stream.hpp
new file mode 100644 (file)
index 0000000..1b679a8
--- /dev/null
@@ -0,0 +1,379 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_0310PM)
+#define BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_0310PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/stream/detail/format_manip.hpp>
+#include <boost/spirit/home/karma/stream/detail/iterator_sink.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <iosfwd>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    namespace tag
+    {
+        template <typename Char = char>
+        struct stream_tag 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    namespace karma
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // This one is the class that the user can instantiate directly in 
+        // order to create a customized int generator
+        template <typename Char = char>
+        struct stream_generator
+          : spirit::terminal<tag::stream_tag<Char> > 
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<karma::domain, tag::stream>     // enables stream
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<karma::domain, tag::wstream>    // enables wstream
+      : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables stream(...)
+      , terminal_ex<tag::stream, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<karma::domain                   // enables wstream(...)
+      , terminal_ex<tag::wstream, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <>                                         // enables stream(f)
+    struct use_lazy_terminal<
+        karma::domain, tag::stream, 1   /*arity*/
+    > : mpl::true_ {};
+
+    template <>                                         // enables wstream(f)
+    struct use_lazy_terminal<
+        karma::domain, tag::wstream, 1  /*arity*/
+    > : mpl::true_ {};
+
+    // enables stream_generator<char_type>
+    template <typename Char>
+    struct use_terminal<karma::domain, tag::stream_tag<Char> >
+      : mpl::true_ {};
+
+    template <typename Char, typename A0>
+    struct use_terminal<karma::domain
+      , terminal_ex<tag::stream_tag<Char>, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename Char>
+    struct use_lazy_terminal<
+        karma::domain, tag::stream_tag<Char>, 1  /*arity*/
+    > : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::stream;
+    using spirit::wstream;
+#endif
+    using spirit::stream_type;
+    using spirit::wstream_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename CharEncoding, typename Tag>
+    struct any_stream_generator
+      : primitive_generator<any_stream_generator<Char, CharEncoding, Tag> >
+    {
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+        {
+            typedef spirit::basic_hold_any<Char> type;
+        };
+
+        // any_stream_generator has an attached attribute 
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute
+        >
+        static bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr)
+        {
+            typedef karma::detail::iterator_sink<
+                OutputIterator, Char, CharEncoding, Tag
+            > sink_device;
+
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            // use existing operator<<()
+            typedef typename attribute<Context>::type attribute_type;
+
+            {
+                boost::iostreams::stream<sink_device> ostr(sink);
+                ostr << traits::extract_from<attribute_type>(attr, context) << std::flush;
+
+                if (!ostr.good())
+                    return false;
+            }
+
+            return karma::delimit_out(sink, d);   // always do post-delimiting
+        }
+
+        // this is a special overload to detect if the output iterator has been
+        // generated by a format_manip object.
+        template <
+            typename T, typename Traits, typename Properties, typename Context
+          , typename Delimiter, typename Attribute
+        >
+        static bool generate(
+            karma::detail::output_iterator<
+                karma::ostream_iterator<T, Char, Traits>, Properties
+            >& sink, Context& context, Delimiter const& d
+          , Attribute const& attr)
+        {
+            typedef karma::detail::output_iterator<
+                karma::ostream_iterator<T, Char, Traits>, Properties
+            > output_iterator;
+            typedef karma::detail::iterator_sink<
+                output_iterator, Char, CharEncoding, Tag
+            > sink_device;
+
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            // use existing operator<<()
+            typedef typename attribute<Context>::type attribute_type;
+
+            {
+                boost::iostreams::stream<sink_device> ostr(sink);
+                ostr.imbue(sink.get_ostream().getloc());
+                ostr << traits::extract_from<attribute_type>(attr, context) 
+                     << std::flush;
+                if (!ostr.good())
+                    return false;
+            }
+
+            return karma::delimit_out(sink, d);  // always do post-delimiting
+        }
+
+        // this any_stream has no parameter attached, it needs to have been
+        // initialized from a value/variable
+        template <typename OutputIterator, typename Context
+          , typename Delimiter>
+        static bool
+        generate(OutputIterator&, Context&, Delimiter const&, unused_type)
+        {
+            // It is not possible (doesn't make sense) to use stream generators
+            // without providing any attribute, as the generator doesn't 'know'
+            // what to output. The following assertion fires if this situation
+            // is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, stream_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("stream");
+        }
+    };
+
+    template <typename T, typename Char, typename CharEncoding, typename Tag>
+    struct lit_stream_generator
+      : primitive_generator<lit_stream_generator<T, Char, CharEncoding, Tag> >
+    {
+        template <typename Context, typename Unused>
+        struct attribute 
+        {
+            typedef unused_type type;
+        };
+
+        lit_stream_generator(typename add_reference<T>::type t)
+          : t_(t)
+        {}
+
+        // lit_stream_generator has an attached parameter
+
+        // this overload will be used in the normal case (not called from
+        // format_manip).
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attribute const&) const
+        {
+            typedef karma::detail::iterator_sink<
+                OutputIterator, Char, CharEncoding, Tag
+            > sink_device;
+
+            boost::iostreams::stream<sink_device> ostr(sink);
+            ostr << t_ << std::flush;             // use existing operator<<()
+
+            if (ostr.good()) 
+                return karma::delimit_out(sink, d); // always do post-delimiting
+            return false;
+        }
+
+        // this is a special overload to detect if the output iterator has been
+        // generated by a format_manip object.
+        template <
+            typename T1, typename Traits, typename Properties
+          , typename Context, typename Delimiter, typename Attribute>
+        bool generate(
+            karma::detail::output_iterator<
+                karma::ostream_iterator<T1, Char, Traits>, Properties
+            >& sink, Context&, Delimiter const& d, Attribute const&) const
+        {
+            typedef karma::detail::output_iterator<
+                karma::ostream_iterator<T1, Char, Traits>, Properties
+            > output_iterator;
+            typedef karma::detail::iterator_sink<
+                output_iterator, Char, CharEncoding, Tag
+            > sink_device;
+
+            {
+                boost::iostreams::stream<sink_device> ostr(sink);
+                ostr.imbue(sink.get_ostream().getloc());
+                ostr << t_ << std::flush;             // use existing operator<<()
+
+                if (!ostr.good())
+                    return false;
+            }
+
+            return karma::delimit_out(sink, d); // always do post-delimiting
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("any-stream");
+        }
+
+        T t_;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        lit_stream_generator& operator= (lit_stream_generator const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename Modifiers>
+    struct make_stream
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef any_stream_generator<
+            Char
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    // stream
+    template <typename Modifiers>
+    struct make_primitive<tag::stream, Modifiers> 
+      : make_stream<char, Modifiers> {};
+
+    // wstream
+    template <typename Modifiers>
+    struct make_primitive<tag::wstream, Modifiers> 
+      : make_stream<wchar_t, Modifiers> {};
+
+    // any_stream_generator<char_type>
+    template <typename Char, typename Modifiers>
+    struct make_primitive<tag::stream_tag<Char>, Modifiers> 
+      : make_stream<Char, Modifiers> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename A0, typename Modifiers>
+    struct make_any_stream
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef typename add_const<A0>::type const_attribute;
+        typedef lit_stream_generator<
+            const_attribute, Char
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    // stream(...)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::stream, fusion::vector1<A0> >, Modifiers>
+      : make_any_stream<char, A0, Modifiers> {};
+
+    // wstream(...)
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::wstream, fusion::vector1<A0> >, Modifiers>
+      : make_any_stream<wchar_t, A0, Modifiers> {};
+
+    // any_stream_generator<char_type>(...)
+    template <typename Char, typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::stream_tag<Char>, fusion::vector1<A0> >
+          , Modifiers>
+      : make_any_stream<Char, A0, Modifiers> {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/string.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/string.hpp
new file mode 100644 (file)
index 0000000..8326a14
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_STRING_FEB_23_2007_0156PM)
+#define BOOST_SPIRIT_KARMA_STRING_FEB_23_2007_0156PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/string/lit.hpp>
+#include <boost/spirit/home/karma/string/symbols.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/string/lit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/string/lit.hpp
new file mode 100644 (file)
index 0000000..0b9a641
--- /dev/null
@@ -0,0 +1,334 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2010 Bryce Lelbach
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_LIT_FEB_22_2007_0534PM)
+#define BOOST_SPIRIT_KARMA_LIT_FEB_22_2007_0534PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/detail/string_generate.hpp>
+#include <boost/spirit/home/karma/detail/string_compare.hpp>
+#include <boost/spirit/home/karma/detail/enable_lit.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <string>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_terminal<karma::domain
+        , tag::char_code<tag::string, CharEncoding> >     // enables string
+      : mpl::true_ {};
+
+    template <typename T>
+    struct use_terminal<karma::domain, T
+      , typename enable_if<traits::is_string<T> >::type>  // enables string literals
+      : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<karma::domain
+      , terminal_ex<
+            tag::char_code<tag::string, CharEncoding>     // enables string(str)
+          , fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    template <typename CharEncoding>                      // enables string(f)
+    struct use_lazy_terminal<
+        karma::domain
+      , tag::char_code<tag::string, CharEncoding>
+      , 1 /*arity*/
+    > : mpl::true_ {};
+
+    // enables lit(str)
+    template <typename A0>
+    struct use_terminal<karma::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_string<A0> >::type>
+      : mpl::true_ {};
+}} 
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::lit;
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate literal strings from a given parameter
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, typename Tag>
+    struct any_string
+      : primitive_generator<any_string<CharEncoding, Tag> >
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+        {
+            typedef std::basic_string<char_type> type;
+        };
+
+        // lit has an attached attribute
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        static bool
+        generate(OutputIterator& sink, Context& context, Delimiter const& d, 
+            Attribute const& attr)
+        {
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            typedef typename attribute<Context>::type attribute_type;
+            return 
+                karma::detail::string_generate(sink
+                  , traits::extract_from<attribute_type>(attr, context)
+                  , char_encoding(), Tag()) &&
+                karma::delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // this lit has no attribute attached, it needs to have been
+        // initialized from a direct literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        static bool generate(OutputIterator&, Context&, Delimiter const&, 
+            unused_type const&)
+        {
+            // It is not possible (doesn't make sense) to use string without
+            // providing any attribute, as the generator doesn't 'know' what
+            // character to output. The following assertion fires if this
+            // situation is detected in your code.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator, string_not_usable_without_attribute, ());
+            return false;
+        }
+
+        template <typename Context>
+        static info what(Context const& /*context*/)
+        {
+            return info("any-string");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate literal strings
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String, typename CharEncoding, typename Tag, bool no_attribute>
+    struct literal_string
+      : primitive_generator<literal_string<String, CharEncoding, Tag, no_attribute> >
+    {
+        typedef CharEncoding char_encoding;
+        typedef typename
+            remove_const<typename traits::char_type_of<String>::type>::type
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        template <typename Context, typename Unused = unused_type>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, string_type>
+        {};
+
+        literal_string(typename add_reference<String>::type str)
+          : str_(str)
+        {}
+
+        // A string("...") which additionally has an associated attribute emits
+        // its immediate literal only if it matches the attribute, otherwise
+        // it fails.
+        template <
+            typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& d, Attribute const& attr) const
+        {
+            if (!traits::has_optional_value(attr))
+                return false;
+
+            // fail if attribute isn't matched by immediate literal
+            typedef typename attribute<Context>::type attribute_type;
+
+            typedef typename spirit::result_of::extract_from<attribute_type, Attribute>::type
+                extracted_string_type;
+
+            using spirit::traits::get_c_string;
+            if (!detail::string_compare(
+                    get_c_string(
+                        traits::extract_from<attribute_type>(attr, context))
+                  , get_c_string(str_), char_encoding(), Tag()))
+            {
+                return false;
+            }
+            return detail::string_generate(sink, str_, char_encoding(), Tag()) && 
+                   karma::delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        // A string("...") without any associated attribute just emits its 
+        // immediate literal
+        template <typename OutputIterator, typename Context, typename Delimiter>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , unused_type) const
+        {
+            return detail::string_generate(sink, str_, char_encoding(), Tag()) && 
+                   karma::delimit_out(sink, d);      // always do post-delimiting
+        }
+
+        template <typename Context>
+        info what(Context const& /*context*/) const
+        {
+            return info("literal-string", str_);
+        }
+
+        string_type str_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // string
+    template <typename CharEncoding, typename Modifiers>
+    struct make_primitive<
+        tag::char_code<tag::string, CharEncoding>
+      , Modifiers>
+    {
+        static bool const lower = 
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper = 
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef any_string<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, CharEncoding, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+        > result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    // string literal 
+    template <typename T, typename Modifiers>
+    struct make_primitive<T, Modifiers
+      , typename enable_if<traits::is_string<T> >::type>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef typename add_const<T>::type const_string;
+        typedef literal_string<
+            const_string
+          , typename spirit::detail::get_encoding_with_case<
+                Modifiers, unused_type, lower || upper>::type
+          , typename detail::get_casetag<Modifiers, lower || upper>::type
+          , true
+        > result_type;
+
+        result_type operator()(
+            typename add_reference<const_string>::type str, unused_type) const
+        {
+            return result_type(str);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename CharEncoding, typename Modifiers, typename A0
+          , bool no_attribute>
+        struct make_string_direct
+        {
+            static bool const lower = 
+                has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+            static bool const upper = 
+                has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+            typedef typename add_const<A0>::type const_string;
+            typedef literal_string<
+                const_string
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type
+              , no_attribute
+            > result_type;
+
+            template <typename Terminal>
+            result_type operator()(Terminal const& term, unused_type) const
+            {
+                return result_type(fusion::at_c<0>(term.args));
+            }
+        };
+    }
+
+    // string("..."), lit("...")
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<
+                tag::char_code<tag::string, CharEncoding>
+              , fusion::vector1<A0> >
+          , Modifiers>
+      : detail::make_string_direct<CharEncoding, Modifiers, A0, false>
+    {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+            terminal_ex<tag::lit, fusion::vector1<A0> >
+          , Modifiers
+          , typename enable_if<traits::is_string<A0> >::type>
+      : detail::make_string_direct<
+            typename traits::char_encoding_from_char<
+                typename traits::char_type_of<A0>::type>::type
+          , Modifiers, A0, true>
+    {};
+}}}   // namespace boost::spirit::karma
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, typename Tag, typename Attribute
+            , typename Context, typename Iterator>
+    struct handles_container<karma::any_string<CharEncoding, Tag>, Attribute
+      , Context, Iterator>
+      : mpl::false_ {};
+
+    template <typename String, typename CharEncoding, typename Tag
+            , bool no_attribute, typename Attribute, typename Context
+            , typename Iterator>
+    struct handles_container<karma::literal_string<String, CharEncoding, Tag
+      , no_attribute>, Attribute, Context, Iterator>
+      : mpl::false_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/string/symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/string/symbols.hpp
new file mode 100644 (file)
index 0000000..72c82d1
--- /dev/null
@@ -0,0 +1,768 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_KARMA_SYMBOLS_NOV_23_2009_1251PM)
+#define BOOST_SPIRIT_KARMA_SYMBOLS_NOV_23_2009_1251PM
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/karma/detail/extract_from.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/reference.hpp>
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/karma/delimit_out.hpp>
+#include <boost/spirit/home/karma/detail/get_casetag.hpp>
+#include <boost/spirit/home/karma/detail/string_generate.hpp>
+#include <boost/config.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/if.hpp>
+#include <map>
+#include <set>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename T, typename Attribute, typename Enable>
+    struct symbols_lookup
+    {
+        typedef
+            mpl::eval_if<fusion::traits::is_sequence<T>
+              , traits::detail::value_at_c<T, 0>
+              , detail::add_const_ref<T> > sequence_type;
+        typedef typename
+            mpl::eval_if<traits::is_container<T>
+              , traits::container_value<T>
+              , sequence_type>::type type;
+
+        // fusion sequence
+        template <typename T_>
+        static type call(T_ const& t, mpl::false_, mpl::true_)
+        {
+            return fusion::at_c<0>(t);
+        }
+
+        // container
+        template <typename T_, typename IsSequence>
+        static type call(T_ const& t, mpl::true_, IsSequence)
+        {
+            return t[0];
+        }
+
+        // not a container and not a fusion sequence
+        template <typename T_>
+        static type call(T_ const& t, mpl::false_, mpl::false_)
+        {
+            return t;
+        }
+
+        static type call(T const& t)
+        {
+            typedef typename traits::is_container<T>::type is_container;
+            typedef typename fusion::traits::is_sequence<T>::type is_sequence;
+
+            return call(t, is_container(), is_sequence());
+        }
+    };
+
+    template <typename Attribute>
+    struct symbols_lookup<Attribute, Attribute>
+    {
+        typedef Attribute const& type;
+
+        static type call(Attribute const& t)
+        {
+            return t;
+        }
+    };
+
+    template <typename Attribute, typename T, typename Enable>
+    struct symbols_value
+    {
+        typedef
+            mpl::eval_if<fusion::traits::is_sequence<T>
+              , traits::detail::value_at_c<T, 1>
+              , mpl::identity<unused_type> > sequence_type;
+        typedef typename
+            mpl::eval_if<traits::is_container<T>
+              , traits::container_value<T>
+              , sequence_type>::type type;
+
+        // fusion sequence
+        template <typename T_>
+        static type call(T_ const& t, mpl::false_, mpl::true_)
+        {
+            return fusion::at_c<1>(t);
+        }
+
+        // container
+        template <typename T_, typename IsSequence>
+        static type call(T_ const& t, mpl::true_, IsSequence)
+        {
+            return t[1];
+        }
+
+        // not a container nor a fusion sequence
+        template <typename T_>
+        static type call(T_ const&, mpl::false_, mpl::false_)
+        {
+            return unused;
+        }
+
+        static type call(T const& t)
+        {
+            typedef typename traits::is_container<T>::type is_container;
+            typedef typename fusion::traits::is_sequence<T>::type is_sequence;
+
+            return call(t, is_container(), is_sequence());
+        }
+    };
+
+    template <typename Attribute>
+    struct symbols_value<Attribute, Attribute>
+    {
+        typedef unused_type type;
+
+        static type call(Attribute const&)
+        {
+            return unused;
+        }
+    };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    struct symbols_lookup
+      : mpl::if_<
+            traits::not_is_unused<T>
+          , std::map<Attribute, T>
+          , std::set<Attribute>
+        >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename CharEncoding, typename Tag>
+        struct generate_encoded
+        {
+            typedef typename
+                proto::terminal<tag::char_code<Tag, CharEncoding> >::type
+            encoding_type;
+
+            template <typename OutputIterator, typename Expr, typename Attribute>
+            static bool call(OutputIterator& sink, Expr const& expr
+              , Attribute const& attr)
+            {
+                encoding_type const encoding = encoding_type();
+                return karma::generate(sink, encoding[expr], attr);
+            }
+        };
+
+        template <>
+        struct generate_encoded<unused_type, unused_type>
+        {
+            template <typename OutputIterator, typename Expr, typename Attribute>
+            static bool call(OutputIterator& sink, Expr const& expr
+              , Attribute const& attr)
+            {
+                return karma::generate(sink, expr, attr);
+            }
+        };
+    }
+
+    template <
+        typename Attribute = char, typename T = unused_type
+      , typename Lookup = typename symbols_lookup<T, Attribute>::type
+      , typename CharEncoding = unused_type, typename Tag = unused_type>
+    struct symbols
+      : proto::extends<
+            typename proto::terminal<
+                reference<symbols<Attribute, T, Lookup, CharEncoding, Tag> >
+            >::type
+          , symbols<Attribute, T, Lookup, CharEncoding, Tag> >
+      , primitive_generator<
+            symbols<Attribute, T, Lookup, CharEncoding, Tag> >
+    {
+        typedef T value_type;       // the value associated with each entry
+
+        typedef reference<symbols> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, symbols> base_type;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef Attribute type;
+        };
+
+        symbols(std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {}
+
+        symbols(symbols const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {}
+
+        template <typename CharEncoding_, typename Tag_>
+        symbols(symbols<Attribute, T, Lookup, CharEncoding_, Tag_> const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {}
+
+        template <typename Symbols, typename Data>
+        symbols(Symbols const& syms, Data const& data
+              , std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            typename range_const_iterator<Data>::type di = boost::begin(data);
+            while (si != boost::end(syms))
+                add(*si++, *di++);
+        }
+
+        symbols&
+        operator=(symbols const& rhs)
+        {
+            *lookup = *rhs.lookup;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        template <typename CharEncoding_, typename Tag_>
+        symbols&
+        operator=(symbols<Attribute, T, Lookup, CharEncoding_, Tag_> const& rhs)
+        {
+            *lookup = *rhs.lookup;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        void clear()
+        {
+            lookup->clear();
+        }
+
+        struct adder;
+        struct remover;
+
+        template <typename Attr, typename T_>
+        adder const&
+        operator=(std::pair<Attr, T_> const& p)
+        {
+            lookup->clear();
+            return add(p.first, p.second);
+        }
+
+        template <typename Attr, typename T_>
+        friend adder const&
+        operator+= (symbols& sym, std::pair<Attr, T_> const& p)
+        {
+            return sym.add(p.first, p.second);
+        }
+
+        template <typename Attr>
+        friend remover const&
+        operator-= (symbols& sym, Attr const& attr)
+        {
+            return sym.remove(attr);
+        }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+        // non-const version needed to suppress proto's += kicking in
+        template <typename Attr, typename T_>
+        friend adder const&
+        operator+= (symbols& sym, std::pair<Attr, T_>& p)
+        {
+            return sym.add(p.first, p.second);
+        }
+
+        // non-const version needed to suppress proto's -= kicking in
+        template <typename Attr>
+        friend remover const&
+        operator-= (symbols& sym, Attr& attr)
+        {
+            return sym.remove(attr);
+        }
+#else
+        // for rvalue references
+        template <typename Attr, typename T_>
+        friend adder const&
+        operator+= (symbols& sym, std::pair<Attr, T_>&& p)
+        {
+            return sym.add(p.first, p.second);
+        }
+
+        // for rvalue references
+        template <typename Attr>
+        friend remover const&
+        operator-= (symbols& sym, Attr&& attr)
+        {
+            return sym.remove(attr);
+        }
+#endif
+        template <typename F>
+        void for_each(F f) const
+        {
+            std::for_each(lookup->begin(), lookup->end(), f);
+        }
+
+        template <typename Attr>
+        value_type* find(Attr const& attr)
+        {
+            typename Lookup::iterator it = lookup->find(attr);
+            return (it != lookup->end()) ? &(*it).second : 0;
+        }
+
+        template <typename Attr>
+        value_type& at(Attr const& attr)
+        {
+            return (*lookup)[attr];
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attr>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attr const& attr) const
+        {
+            typename Lookup::iterator it = lookup->find(
+                traits::symbols_lookup<Attr, Attribute>::call(attr));
+            if (it == lookup->end())
+                return false;
+
+            return karma::detail::generate_encoded<CharEncoding, Tag>::call(
+                        sink, (*it).second
+                      , traits::symbols_value<Attribute, Attr>::call(attr)) &&
+                   karma::delimit_out(sink, d);
+        }
+
+        template <typename Context>
+        info what(Context&) const
+        {
+            return info(name_);
+        }
+
+        void name(std::string const &str)
+        {
+            name_ = str;
+        }
+        std::string const &name() const
+        {
+            return name_;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        struct adder
+        {
+            template <typename, typename = unused_type>
+            struct result { typedef adder const& type; };
+
+            adder(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Attr>
+            adder const&
+            operator()(Attr const& attr, T const& val = T()) const
+            {
+                sym.lookup->insert(typename Lookup::value_type(attr, val));
+                return *this;
+            }
+
+            template <typename Attr>
+            adder const&
+            operator, (Attr const& attr) const
+            {
+                sym.lookup->insert(typename Lookup::value_type(attr, T()));
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            adder& operator= (adder const&);
+        };
+
+        struct remover
+        {
+            template <typename>
+            struct result { typedef remover const& type; };
+
+            remover(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Attr>
+            remover const&
+            operator()(Attr const& attr) const
+            {
+                sym.lookup->erase(attr);
+                return *this;
+            }
+
+            template <typename Attr>
+            remover const&
+            operator, (Attr const& attr) const
+            {
+                sym.lookup->erase(attr);
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            remover& operator= (remover const&);
+        };
+
+        adder add;
+        remover remove;
+        shared_ptr<Lookup> lookup;
+        std::string name_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // specialization for unused stored type
+    template <
+        typename Attribute, typename Lookup
+      , typename CharEncoding, typename Tag>
+    struct symbols<Attribute, unused_type, Lookup, CharEncoding, Tag>
+      : proto::extends<
+            typename proto::terminal<
+                spirit::karma::reference<
+                    symbols<Attribute, unused_type, Lookup, CharEncoding, Tag> >
+            >::type
+          , symbols<Attribute, unused_type, Lookup, CharEncoding, Tag>
+        >
+      , spirit::karma::generator<
+            symbols<Attribute, unused_type, Lookup, CharEncoding, Tag> >
+    {
+        typedef unused_type value_type;  // the value associated with each entry
+
+        typedef spirit::karma::reference<symbols> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, symbols> base_type;
+
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef Attribute type;
+        };
+
+        symbols(std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {}
+
+        symbols(symbols const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {}
+
+        template <typename CharEncoding_, typename Tag_>
+        symbols(symbols<Attribute, unused_type, Lookup, CharEncoding_, Tag_> const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {}
+
+        template <typename Symbols, typename Data>
+        symbols(Symbols const& syms, Data const& data
+              , std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            typename range_const_iterator<Data>::type di = boost::begin(data);
+            while (si != boost::end(syms))
+                add(*si++, *di++);
+        }
+
+        symbols&
+        operator=(symbols const& rhs)
+        {
+            *lookup = *rhs.lookup;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        template <typename CharEncoding_, typename Tag_>
+        symbols&
+        operator=(symbols<Attribute, unused_type, Lookup, CharEncoding_, Tag_> const& rhs)
+        {
+            *lookup = *rhs.lookup;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        void clear()
+        {
+            lookup->clear();
+        }
+
+        struct adder;
+        struct remover;
+
+        template <typename Attr>
+        adder const&
+        operator=(Attr const& attr)
+        {
+            lookup->clear();
+            return add(attr);
+        }
+
+        template <typename Attr>
+        friend adder const&
+        operator+= (symbols& sym, Attr const& attr)
+        {
+            return sym.add(attr);
+        }
+
+        template <typename Attr>
+        friend remover const&
+        operator-= (symbols& sym, Attr const& attr)
+        {
+            return sym.remove(attr);
+        }
+
+        // non-const version needed to suppress proto's += kicking in
+        template <typename Attr>
+        friend adder const&
+        operator+= (symbols& sym, Attr& attr)
+        {
+            return sym.add(attr);
+        }
+
+        // non-const version needed to suppress proto's -= kicking in
+        template <typename Attr>
+        friend remover const&
+        operator-= (symbols& sym, Attr& attr)
+        {
+            return sym.remove(attr);
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            std::for_each(lookup->begin(), lookup->end(), f);
+        }
+
+        template <typename Attr>
+        value_type const* find(Attr const& attr)
+        {
+            typename Lookup::iterator it = lookup->find(attr);
+            return (it != lookup->end()) ? &unused : 0;
+        }
+
+        template <typename Attr>
+        value_type at(Attr const& attr)
+        {
+            typename Lookup::iterator it = lookup->find(attr);
+            if (it == lookup->end())
+                add(attr);
+            return unused;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attr>
+        bool generate(OutputIterator& sink, Context&, Delimiter const& d
+          , Attr const& attr) const
+        {
+            typename Lookup::iterator it = lookup->find(
+                traits::symbols_lookup<Attr, Attribute>::call(attr));
+            if (it == lookup->end())
+                return false;
+
+            return karma::detail::generate_encoded<CharEncoding, Tag>::
+                      call(sink
+                        , traits::symbols_lookup<Attr, Attribute>::call(attr)
+                        , unused) &&
+                   karma::delimit_out(sink, d);
+        }
+
+        template <typename Context>
+        info what(Context&) const
+        {
+            return info(name_);
+        }
+
+        void name(std::string const &str)
+        {
+            name_ = str;
+        }
+        std::string const &name() const
+        {
+            return name_;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        struct adder
+        {
+            template <typename, typename = unused_type>
+            struct result { typedef adder const& type; };
+
+            adder(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Attr>
+            adder const&
+            operator()(Attr const& attr) const
+            {
+                sym.lookup->insert(attr);
+                return *this;
+            }
+
+            template <typename Attr>
+            adder const&
+            operator, (Attr const& attr) const
+            {
+                sym.lookup->insert(attr);
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            adder& operator= (adder const&);
+        };
+
+        struct remover
+        {
+            template <typename>
+            struct result { typedef remover const& type; };
+
+            remover(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Attr>
+            remover const&
+            operator()(Attr const& attr) const
+            {
+                sym.lookup->erase(attr);
+                return *this;
+            }
+
+            template <typename Attr>
+            remover const&
+            operator, (Attr const& attr) const
+            {
+                sym.lookup->erase(attr);
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            remover& operator= (remover const&);
+        };
+
+        adder add;
+        remover remove;
+        shared_ptr<Lookup> lookup;
+        std::string name_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename T, typename Lookup
+      , typename CharEnconding, typename Tag, typename Modifiers>
+    struct make_primitive<
+        reference<symbols<Attribute, T, Lookup, CharEnconding, Tag> >
+      , Modifiers>
+    {
+        static bool const lower =
+            has_modifier<Modifiers, tag::char_code_base<tag::lower> >::value;
+        static bool const upper =
+            has_modifier<Modifiers, tag::char_code_base<tag::upper> >::value;
+
+        typedef reference<
+            symbols<Attribute, T, Lookup, CharEnconding, Tag>
+        > reference_;
+
+        typedef typename mpl::if_c<
+            lower || upper
+          , symbols<
+                Attribute, T, Lookup
+              , typename spirit::detail::get_encoding_with_case<
+                    Modifiers, unused_type, lower || upper>::type
+              , typename detail::get_casetag<Modifiers, lower || upper>::type>
+          , reference_>::type
+        result_type;
+
+        result_type operator()(reference_ ref, unused_type) const
+        {
+            return result_type(ref.ref.get());
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename T, typename Lookup
+      , typename CharEncoding, typename Tag
+      , typename Attr, typename Context, typename Iterator>
+    struct handles_container<karma::symbols<Attribute, T, Lookup, CharEncoding, Tag>
+            , Attr, Context, Iterator>
+      : traits::is_container<Attr> {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/karma/what.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/karma/what.hpp
new file mode 100644 (file)
index 0000000..c65937e
--- /dev/null
@@ -0,0 +1,33 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_WHAT_MAY_04_2007_0116PM)
+#define BOOST_SPIRIT_WHAT_MAY_04_2007_0116PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/assert.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+
+namespace boost { namespace spirit { namespace karma
+{
+    template <typename Expr>
+    inline info what(Expr const& xpr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression
+        // error message here, then the expression (expr) is not a
+        // valid spirit karma expression.
+        BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
+        return compile<karma::domain>(xpr).what(unused);
+    }
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex.hpp
new file mode 100644 (file)
index 0000000..5d95f5b
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_MARCH_22_2007_0929PM)
+#define BOOST_SPIRIT_LEXER_MARCH_22_2007_0929PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer.hpp>
+#include <boost/spirit/home/lex/qi.hpp>
+#include <boost/spirit/home/lex/tokenize_and_parse.hpp>
+#include <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/argument.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/argument.hpp
new file mode 100644 (file)
index 0000000..fbac3c1
--- /dev/null
@@ -0,0 +1,275 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c)      2010 Bryce Lelbach
+//  Copyright (c)      2011 Thomas Heller
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_ARGUMENT_JUNE_07_2009_1106AM)
+#define BOOST_SPIRIT_LEX_ARGUMENT_JUNE_07_2009_1106AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/lex/argument_phoenix.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_getter is a Phoenix actor used to access the name of the 
+    //  current lexer state by calling get_state_name() on the context (which 
+    //  is the 5th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_state' is used
+    //  as a rvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ std::cout << _state ];
+    //
+    //  The example shows how to print the lexer state after matching a token
+    //  'identifier'.
+    struct state_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef
+                typename remove_reference<
+                   typename remove_const<
+                        typename mpl::at_c<typename Env::args_type, 4>::type
+                    >::type
+                >::type
+            context_type;
+
+            typedef typename context_type::state_name_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_state_name();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_setter is a Phoenix actor used to change the name of the 
+    //  current lexer state by calling set_state_name() on the context (which 
+    //  is the 5th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_state' is used
+    //  as a lvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _state = "SOME_LEXER_STATE" ];
+    //
+    //  The example shows how to change the lexer state after matching a token
+    //  'identifier'.
+    template <typename Actor>
+    struct state_setter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            typedef
+                typename remove_reference<
+                   typename remove_const<
+                        typename mpl::at_c<typename Env::args_type, 4>::type
+                    >::type
+                >::type
+            context_type;
+
+            typedef typename context_type::state_name_type string;
+
+            fusion::at_c<4>(env.args()).set_state_name(
+                traits::get_c_string(actor_.eval(env)));
+        }
+
+        state_setter(Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_getter is used to create the _val placeholder, which is a 
+    //  Phoenix actor used to access the value of the current token.
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_val' is used
+    //  as a rvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ std::cout << _val ];
+    //
+    //  The example shows how to use _val to print the identifier name (which
+    //  is the initial token value).
+    struct value_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef
+                typename remove_reference<
+                   typename remove_const<
+                        typename mpl::at_c<typename Env::args_type, 4>::type
+                    >::type
+                >::type
+            context_type;
+
+            typedef typename context_type::get_value_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_value();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_setter is a Phoenix actor used to change the name of the 
+    //  current lexer state by calling set_state_name() on the context (which 
+    //  is the 5th parameter to any lexer semantic actions).
+    //
+    //  This Phoenix actor is invoked whenever the placeholder '_val' is used
+    //  as a lvalue inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _val = "identifier" ];
+    //
+    //  The example shows how to change the token value after matching a token
+    //  'identifier'.
+    template <typename Actor>
+    struct value_setter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            fusion::at_c<4>(env.args()).set_value(actor_.eval(env));
+        }
+
+        value_setter(Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The eoi_getter is used to create the _eoi placeholder, which is a 
+    //  Phoenix actor used to access the end of input iterator pointing to the 
+    //  end of the underlying input sequence.
+    //
+    //  This actor is invoked whenever the placeholder '_eoi' is used in a
+    //  lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier 
+    //          [ std::cout << construct_<std::string>(_end, _eoi) ];
+    //
+    //  The example shows how to use _eoi to print all remaining input after
+    //  matching a token 'identifier'.
+    struct eoi_getter
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef
+                typename remove_reference<
+                   typename remove_const<
+                        typename mpl::at_c<typename Env::args_type, 4>::type
+                    >::type
+                >::type
+            context_type;
+
+            typedef typename context_type::base_iterator_type const& type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).get_eoi();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // '_start' and '_end' may be used to access the start and the end of 
+    // the matched sequence of the current token
+    typedef phoenix::arg_names::_1_type _start_type;
+    typedef phoenix::arg_names::_2_type _end_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    _start_type const _start = _start_type();
+    _end_type const _end = _end_type();
+#endif
+
+    // We are reusing the placeholder '_pass' to access and change the pass
+    // status of the current match (see support/argument.hpp for its 
+    // definition).
+    // typedef phoenix::arg_names::_3_type _pass_type;
+    using boost::spirit::_pass_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::_pass;
+#endif
+
+    // '_tokenid' may be used to access and change the tokenid of the current 
+    // token
+    typedef phoenix::arg_names::_4_type _tokenid_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    _tokenid_type const _tokenid = _tokenid_type();
+#endif
+
+    typedef phoenix::actor<value_context> _val_type;
+    typedef phoenix::actor<state_context> _state_type;
+    typedef phoenix::actor<eoi_getter> _eoi_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    // '_val' may be used to access and change the token value of the current
+    // token
+    _val_type const _val = _val_type();
+    // _state may be used to access and change the name of the current lexer 
+    // state
+    _state_type const _state = _state_type();
+    // '_eoi' may be used to access the end of input iterator of the input 
+    // stream used by the lexer to match tokens from
+    _eoi_type const _eoi = _eoi_type();
+#endif
+}}}
+
+
+#undef SPIRIT_DECLARE_ARG
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/argument_phoenix.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/argument_phoenix.hpp
new file mode 100644 (file)
index 0000000..7989b01
--- /dev/null
@@ -0,0 +1,248 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2011 Thomas Heller
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_ARGUMENT_PHEONIX_MARCH_25_2011_1841PM)
+#define BOOST_SPIRIT_LEX_ARGUMENT_PHEONIX_MARCH_25_2011_1841PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The value_context is used as a noop Phoenix actor to create the 
+    //  placeholder '_val' (see below). It is a noop actor because it is used
+    //  as a placeholder only, while it is being converted either to a 
+    //  value_getter (if used as a rvalue) or to a value_setter (if used as a 
+    //  lvalue). The conversion is achieved by specializing and overloading a 
+    //  couple of the Phoenix templates from the Phoenix expression composition
+    //  engine (see the end of this file).
+    struct value_context 
+    {
+        typedef mpl::true_ no_nullary;
+
+        typedef unused_type result_type;
+
+        template <typename Env>
+        struct result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Env>
+        unused_type
+        eval(Env const& env) const
+        {
+            return unused;
+        }
+    };
+
+    // forward declarations
+    struct value_getter;
+    template <typename> struct value_setter;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The state_context is used as a noop Phoenix actor to create the 
+    //  placeholder '_state' (see below). It is a noop actor because it is used
+    //  as a placeholder only, while it is being converted either to a 
+    //  state_getter (if used as a rvalue) or to a state_setter (if used as a 
+    //  lvalue). The conversion is achieved by specializing and overloading a 
+    //  couple of the Phoenix templates from the Phoenix expression composition
+    //  engine (see the end of this file).
+    struct state_context 
+    {
+        typedef mpl::true_ no_nullary;
+
+        typedef unused_type result_type;
+
+        template <typename Env>
+        struct result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Env>
+        unused_type
+        eval(Env const& env) const
+        {
+            return unused;
+        }
+    };
+
+    // forward declarations
+    struct state_getter;
+    template <typename> struct state_setter;
+    struct eoi_getter;
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_PHOENIX_DEFINE_EXPRESSION(
+    (boost)(spirit)(lex)(value_setter)
+  , (boost::phoenix::meta_grammar)
+)
+
+BOOST_PHOENIX_DEFINE_EXPRESSION(
+    (boost)(spirit)(lex)(state_setter)
+  , (boost::phoenix::meta_grammar)
+)
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <>
+        struct is_nullary<custom_terminal<boost::spirit::lex::value_context> >
+          : mpl::false_
+        {};
+    }
+    
+    template <typename Dummy>
+    struct is_custom_terminal<boost::spirit::lex::value_context, Dummy>: mpl::true_ {};
+    
+    template <typename Dummy>
+    struct custom_terminal<boost::spirit::lex::value_context, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<boost::spirit::lex::value_getter()>
+              , proto::call<functional::env(proto::_state)>
+            )
+        >
+    {};
+
+    template <typename Dummy>
+    struct is_nullary::when<spirit::lex::rule::value_setter, Dummy>
+      : proto::make<mpl::false_()>
+    {};
+
+    template <typename Dummy>
+    struct default_actions::when<spirit::lex::rule::value_setter, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<
+                    spirit::lex::value_setter<proto::_child0>(
+                        proto::_child0
+                    )
+                >
+              , _env
+            )
+        >
+    {};
+
+    template <>
+    struct actor<spirit::lex::value_context>
+      : boost::phoenix::actor<proto::terminal<spirit::lex::value_context>::type>
+    {
+        typedef boost::phoenix::actor<
+            proto::terminal<spirit::lex::value_context>::type
+        > base_type;
+
+        actor(base_type const & base = base_type())
+            : base_type(base)
+        {}
+
+        template <typename Expr>
+        typename spirit::lex::expression::value_setter<
+            typename phoenix::as_actor<Expr>::type>::type const
+        operator=(Expr const & expr) const
+        {
+            return
+                spirit::lex::expression::value_setter<
+                    typename phoenix::as_actor<Expr>::type
+                >::make(phoenix::as_actor<Expr>::convert(expr));
+        }
+    };
+    
+    namespace result_of
+    {
+        template <>
+        struct is_nullary<custom_terminal<boost::spirit::lex::state_context> >
+          : mpl::false_
+        {};
+    }
+    
+    template <typename Dummy>
+    struct is_custom_terminal<boost::spirit::lex::state_context, Dummy>: mpl::true_ {};
+    
+    template <typename Dummy>
+    struct custom_terminal<boost::spirit::lex::state_context, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<boost::spirit::lex::state_getter()>
+              , proto::call<functional::env(proto::_state)>
+            )
+        >
+    {};
+
+    template <typename Dummy>
+    struct is_nullary::when<spirit::lex::rule::state_setter, Dummy>
+      : proto::make<mpl::false_()>
+    {};
+
+    template <typename Dummy>
+    struct default_actions::when<spirit::lex::rule::state_setter, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<
+                    spirit::lex::state_setter<proto::_child0>(
+                        proto::_child0
+                    )
+                >
+              , _env
+            )
+        >
+    {};
+
+    template <>
+    struct actor<spirit::lex::state_context>
+      : boost::phoenix::actor<proto::terminal<spirit::lex::state_context>::type>
+    {
+        typedef boost::phoenix::actor<
+            proto::terminal<spirit::lex::state_context>::type
+        > base_type;
+
+        actor(base_type const & base = base_type())
+          : base_type(base)
+        {}
+
+        template <typename Expr>
+        typename spirit::lex::expression::state_setter<
+            typename phoenix::as_actor<Expr>::type>::type const
+        operator=(Expr const & expr) const
+        {
+            return
+                spirit::lex::expression::state_setter<
+                    typename phoenix::as_actor<Expr>::type
+                >::make(phoenix::as_actor<Expr>::convert(expr));
+        }
+    };
+    
+    namespace result_of
+    {
+        template <>
+        struct is_nullary<custom_terminal<boost::spirit::lex::eoi_getter> >
+          : mpl::false_
+        {};
+    }
+    
+    template <typename Dummy>
+    struct is_custom_terminal<boost::spirit::lex::eoi_getter, Dummy>: mpl::true_ {};
+    
+    template <typename Dummy>
+    struct custom_terminal<boost::spirit::lex::eoi_getter, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<boost::spirit::lex::eoi_getter()>
+              , proto::call<functional::env(proto::_state)>
+            )
+        >
+    {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/detail/sequence_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/detail/sequence_function.hpp
new file mode 100644 (file)
index 0000000..0f52da8
--- /dev/null
@@ -0,0 +1,63 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_SEQUENCE_FUNCTION_FEB_28_2007_0249PM)
+#define BOOST_SPIRIT_LEX_SEQUENCE_FUNCTION_FEB_28_2007_0249PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace detail
+{
+    template <typename LexerDef, typename String>
+    struct sequence_collect_function
+    {
+        sequence_collect_function(LexerDef& def_, String const& state_
+              , String const& targetstate_)
+          : def(def_), state(state_), targetstate(targetstate_) {}
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            component.collect(def, state, targetstate);
+            return false;     // execute for all sequence elements
+        }
+
+        LexerDef& def;
+        String const& state;
+        String const& targetstate;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        sequence_collect_function& operator= (sequence_collect_function const&);
+    };
+
+    template <typename LexerDef>
+    struct sequence_add_actions_function
+    {
+        sequence_add_actions_function(LexerDef& def_)
+          : def(def_) {}
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            component.add_actions(def);
+            return false;     // execute for all sequence elements
+        }
+
+        LexerDef& def;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        sequence_add_actions_function& operator= (sequence_add_actions_function const&);
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/domain.hpp
new file mode 100644 (file)
index 0000000..e5aec86
--- /dev/null
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_DOMAIN_MAR_13_2007_0140PM)
+#define BOOST_SPIRIT_LEX_DOMAIN_MAR_13_2007_0140PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    // lex's domain
+    struct domain {};
+
+    // bring in some of spirit parts into spirit::lex
+    using spirit::unused;
+    using spirit::unused_type;
+    using spirit::compile;
+    using spirit::info;
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer.hpp
new file mode 100644 (file)
index 0000000..535ec28
--- /dev/null
@@ -0,0 +1,21 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_MAR_22_2007_1008PM)
+#define BOOST_SPIRIT_LEXER_MAR_22_2007_1008PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+#include <boost/spirit/home/lex/lexer/token_def.hpp>
+#include <boost/spirit/home/lex/lexer/char_token_def.hpp>
+#include <boost/spirit/home/lex/lexer/string_token_def.hpp>
+#include <boost/spirit/home/lex/lexer/sequence.hpp>
+#include <boost/spirit/home/lex/lexer/action.hpp>
+#include <boost/spirit/home/lex/lexer/lexer.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/action.hpp
new file mode 100644 (file)
index 0000000..8de0c87
--- /dev/null
@@ -0,0 +1,97 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_ACTION_NOV_18_2007_0743PM)
+#define SPIRIT_LEX_ACTION_NOV_18_2007_0743PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/argument.hpp>
+#include <boost/spirit/home/lex/lexer/support_functions.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action>
+    struct action : unary_lexer<action<Subject, Action> >
+    {
+        action(Subject const& subject, Action f)
+          : subject(subject), f(f) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            // collect the token definition information for the token_def 
+            // this action is attached to
+            subject.collect(lexdef, state, targetstate);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const
+        {
+            // call to add all actions attached further down the hierarchy 
+            subject.add_actions(lexdef);
+
+            // retrieve the id of the associated token_def and register the 
+            // given semantic action with the lexer instance
+            lexdef.add_action(subject.unique_id(), subject.state(), f);
+        }
+
+        Subject subject;
+        Action f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        action& operator= (action const&);
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma action meta-compiler
+    template <>
+    struct make_component<lex::domain, tag::action>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                remove_const<typename Elements::car_type>::type
+            subject_type;
+
+            typedef typename
+                remove_const<typename Elements::cdr_type::car_type>::type
+            action_type;
+
+            typedef lex::action<subject_type, action_type> type;
+        };
+
+        template <typename Elements>
+        typename result<make_component(Elements, unused_type)>::type
+        operator()(Elements const& elements, unused_type) const
+        {
+            typename result<make_component(Elements, unused_type)>::type
+                result(elements.car, elements.cdr.car);
+            return result;
+        }
+    };
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/char_token_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/char_token_def.hpp
new file mode 100644 (file)
index 0000000..aaba2e1
--- /dev/null
@@ -0,0 +1,242 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_CHAR_TOKEN_DEF_MAR_28_2007_0626PM)
+#define BOOST_SPIRIT_LEX_CHAR_TOKEN_DEF_MAR_28_2007_0626PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables 'x'
+    template <>
+    struct use_terminal<lex::domain, char>
+      : mpl::true_ {};
+
+    // enables "x"
+    template <>
+    struct use_terminal<lex::domain, char[2]>
+      : mpl::true_ {};
+
+    // enables wchar_t
+    template <>
+    struct use_terminal<lex::domain, wchar_t>
+      : mpl::true_ {};
+
+    // enables L"x"
+    template <>
+    struct use_terminal<lex::domain, wchar_t[2]>
+      : mpl::true_ {};
+
+    // enables char_('x'), char_("x")
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<A0> > > 
+      : mpl::true_ {};
+
+    // enables char_('x', ID), char_("x", ID)
+    template <typename CharEncoding, typename A0, typename A1>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<A0, A1> > > 
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace lex
+{ 
+    // use char_ from standard character set by default
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::standard::char_;
+#endif
+    using spirit::standard::char_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  char_token_def 
+    //      represents a single character token definition
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding = char_encoding::standard
+      , typename IdType = std::size_t>
+    struct char_token_def
+      : primitive_lexer<char_token_def<CharEncoding, IdType> >
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+        char_token_def(char_type ch, IdType const& id) 
+          : ch(ch), id_(id), unique_id_(std::size_t(~0))
+          , token_state_(std::size_t(~0)) 
+        {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single char_token_def instance in more than one lexer state. 
+            // This is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single char_token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+            unique_id_ = lexdef.add_token (state.c_str(), ch, id_, target);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+        IdType id() const { return id_; }
+        std::size_t unique_id() const { return unique_id_; }
+        std::size_t state() const { return token_state_; }
+
+        char_type ch;
+        mutable IdType id_;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lexer generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename CharEncoding>
+        struct basic_literal
+        {
+            typedef char_token_def<CharEncoding> result_type;
+
+            template <typename Char>
+            result_type operator()(Char ch, unused_type) const
+            {
+                return result_type(ch, ch);
+            }
+
+            template <typename Char>
+            result_type operator()(Char const* str, unused_type) const
+            {
+                return result_type(str[0], str[0]);
+            }
+        };
+    }
+
+    // literals: 'x', "x"
+    template <typename Modifiers>
+    struct make_primitive<char, Modifiers>
+      : detail::basic_literal<char_encoding::standard> {};
+
+    template <typename Modifiers>
+    struct make_primitive<char const(&)[2], Modifiers>
+      : detail::basic_literal<char_encoding::standard> {};
+
+    // literals: L'x', L"x"
+    template <typename Modifiers>
+    struct make_primitive<wchar_t, Modifiers>
+      : detail::basic_literal<char_encoding::standard_wide> {};
+
+    template <typename Modifiers>
+    struct make_primitive<wchar_t const(&)[2], Modifiers>
+      : detail::basic_literal<char_encoding::standard_wide> {};
+
+    // handle char_('x')
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<A0>
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args), fusion::at_c<0>(term.args));
+        }
+    };
+
+    // handle char_("x")
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<Char(&)[2]>   // single char strings
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            Char ch = fusion::at_c<0>(term.args)[0];
+            return result_type(ch, ch);
+        }
+    };
+
+    // handle char_('x', ID)
+    template <typename CharEncoding, typename Modifiers, typename A0, typename A1>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<A0, A1>
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(term.args), fusion::at_c<1>(term.args));
+        }
+    };
+
+    // handle char_("x", ID)
+    template <typename CharEncoding, typename Modifiers, typename Char, typename A1>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<Char(&)[2], A1>   // single char strings
+        >
+      , Modifiers>
+    {
+        typedef char_token_def<CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(term.args)[0], fusion::at_c<1>(term.args));
+        }
+    };
+}}}  // namespace boost::spirit::lex
+
+#endif 
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexer.hpp
new file mode 100644 (file)
index 0000000..e733533
--- /dev/null
@@ -0,0 +1,405 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_MAR_13_2007_0145PM)
+#define BOOST_SPIRIT_LEX_LEXER_MAR_13_2007_0145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/lex/reference.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/lexer/token_def.hpp>
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename LexerDef>
+        struct lexer_def_
+          : proto::extends<
+                typename proto::terminal<
+                   lex::reference<lexer_def_<LexerDef> const> 
+                >::type
+              , lexer_def_<LexerDef> >
+          , qi::parser<lexer_def_<LexerDef> >
+          , lex::lexer_type<lexer_def_<LexerDef> >
+        {
+        private:
+            // avoid warnings about using 'this' in constructor
+            lexer_def_& this_() { return *this; }
+
+            typedef typename LexerDef::char_type char_type;
+            typedef typename LexerDef::string_type string_type;
+            typedef typename LexerDef::id_type id_type;
+
+            typedef lex::reference<lexer_def_ const> reference_;
+            typedef typename proto::terminal<reference_>::type terminal_type;
+            typedef proto::extends<terminal_type, lexer_def_> proto_base_type;
+
+            reference_ alias() const
+            {
+                return reference_(*this);
+            }
+
+        public:
+            // Qi interface: metafunction calculating parser attribute type
+            template <typename Context, typename Iterator>
+            struct attribute
+            {
+                //  the return value of a token set contains the matched token 
+                //  id, and the corresponding pair of iterators
+                typedef typename Iterator::base_iterator_type iterator_type;
+                typedef 
+                    fusion::vector2<id_type, iterator_range<iterator_type> > 
+                type;
+            };
+
+            // Qi interface: parse functionality
+            template <typename Iterator, typename Context
+              , typename Skipper, typename Attribute>
+            bool parse(Iterator& first, Iterator const& last
+              , Context& /*context*/, Skipper const& skipper
+              , Attribute& attr) const
+            {
+                qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+                if (first != last) {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    token_type;
+
+                    token_type const& t = *first;
+                    if (token_is_valid(t) && t.state() == first.get_state()) {
+                    // any of the token definitions matched
+                        spirit::traits::assign_to(t, attr);
+                        ++first;
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+            // Qi interface: 'what' functionality
+            template <typename Context>
+            info what(Context& /*context*/) const
+            {
+                return info("lexer");
+            }
+
+        private:
+            // allow to use the lexer.self.add("regex1", id1)("regex2", id2);
+            // syntax
+            struct adder
+            {
+                adder(lexer_def_& def_) 
+                  : def(def_) {}
+
+                // Add a token definition based on a single character as given
+                // by the first parameter, the second parameter allows to 
+                // specify the token id to use for the new token. If no token
+                // id is given the character code is used.
+                adder const& operator()(char_type c
+                  , id_type token_id = id_type()) const
+                {
+                    if (id_type() == token_id)
+                        token_id = static_cast<id_type>(c);
+                    def.def.add_token (def.state.c_str(), c, token_id
+                        , def.targetstate.empty() ? 0 : def.targetstate.c_str());
+                    return *this;
+                }
+
+                // Add a token definition based on a character sequence as 
+                // given by the first parameter, the second parameter allows to 
+                // specify the token id to use for the new token. If no token
+                // id is given this function will generate a unique id to be 
+                // used as the token's id.
+                adder const& operator()(string_type const& s
+                  , id_type token_id = id_type()) const
+                {
+                    if (id_type() == token_id)
+                        token_id = def.def.get_next_id();
+                    def.def.add_token (def.state.c_str(), s, token_id
+                        , def.targetstate.empty() ? 0 : def.targetstate.c_str());
+                    return *this;
+                }
+
+                template <typename Attribute>
+                adder const& operator()(
+                    token_def<Attribute, char_type, id_type>& tokdef
+                  , id_type token_id = id_type()) const
+                {
+                    // make sure we have a token id
+                    if (id_type() == token_id) {
+                        if (id_type() == tokdef.id()) {
+                            token_id = def.def.get_next_id();
+                            tokdef.id(token_id);
+                        }
+                        else {
+                            token_id = tokdef.id();
+                        }
+                    }
+                    else { 
+                    // the following assertion makes sure that the token_def
+                    // instance has not been assigned a different id earlier
+                        BOOST_ASSERT(id_type() == tokdef.id() 
+                                  || token_id == tokdef.id());
+                        tokdef.id(token_id);
+                    }
+
+                    def.define(tokdef);
+                    return *this;
+                }
+
+//                 template <typename F>
+//                 adder const& operator()(char_type c, id_type token_id, F act) const
+//                 {
+//                     if (id_type() == token_id)
+//                         token_id = def.def.get_next_id();
+//                     std::size_t unique_id = 
+//                         def.def.add_token (def.state.c_str(), s, token_id);
+//                     def.def.add_action(unique_id, def.state.c_str(), act);
+//                     return *this;
+//                 }
+
+                lexer_def_& def;
+
+            private:
+                // silence MSVC warning C4512: assignment operator could not be generated
+                adder& operator= (adder const&);
+            };
+            friend struct adder;
+
+            // allow to use lexer.self.add_pattern("pattern1", "regex1")(...);
+            // syntax
+            struct pattern_adder
+            {
+                pattern_adder(lexer_def_& def_) 
+                  : def(def_) {}
+
+                pattern_adder const& operator()(string_type const& p
+                  , string_type const& s) const
+                {
+                    def.def.add_pattern (def.state.c_str(), p, s);
+                    return *this;
+                }
+
+                lexer_def_& def;
+
+            private:
+                // silence MSVC warning C4512: assignment operator could not be generated
+                pattern_adder& operator= (pattern_adder const&);
+            };
+            friend struct pattern_adder;
+
+        private:
+            // Helper function to invoke the necessary 2 step compilation
+            // process on token definition expressions
+            template <typename TokenExpr>
+            void compile2pass(TokenExpr const& expr) 
+            {
+                expr.collect(def, state, targetstate);
+                expr.add_actions(def);
+            }
+
+        public:
+            ///////////////////////////////////////////////////////////////////
+            template <typename Expr>
+            void define(Expr const& expr)
+            {
+                compile2pass(compile<lex::domain>(expr));
+            }
+
+            lexer_def_(LexerDef& def_, string_type const& state_
+                  , string_type const& targetstate_ = string_type())
+              : proto_base_type(terminal_type::make(alias()))
+              , add(this_()), add_pattern(this_()), def(def_)
+              , state(state_), targetstate(targetstate_)
+            {}
+
+            // allow to switch states
+            lexer_def_ operator()(char_type const* state) const
+            {
+                return lexer_def_(def, state);
+            }
+            lexer_def_ operator()(char_type const* state
+              , char_type const* targetstate) const
+            {
+                return lexer_def_(def, state, targetstate);
+            }
+            lexer_def_ operator()(string_type const& state
+              , string_type const& targetstate = string_type()) const
+            {
+                return lexer_def_(def, state, targetstate);
+            }
+
+            // allow to assign a token definition expression
+            template <typename Expr>
+            lexer_def_& operator= (Expr const& xpr)
+            {
+                // Report invalid expression error as early as possible.
+                // If you got an error_invalid_expression error message here,
+                // then the expression (expr) is not a valid spirit lex 
+                // expression.
+                BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+                def.clear(state.c_str());
+                define(xpr);
+                return *this;
+            }
+
+            // explicitly tell the lexer that the given state will be defined
+            // (useful in conjunction with "*")
+            std::size_t add_state(char_type const* state = 0)
+            {
+                return def.add_state(state ? state : def.initial_state().c_str());
+            }
+
+            adder add;
+            pattern_adder add_pattern;
+
+        private:
+            LexerDef& def;
+            string_type state;
+            string_type targetstate;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            lexer_def_& operator= (lexer_def_ const&);
+        };
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+        // allow to assign a token definition expression
+        template <typename LexerDef, typename Expr>
+        inline lexer_def_<LexerDef>&
+        operator+= (lexer_def_<LexerDef>& lexdef, Expr& xpr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit lex 
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+            lexdef.define(xpr);
+            return lexdef;
+        }
+#else
+        // allow to assign a token definition expression
+        template <typename LexerDef, typename Expr>
+        inline lexer_def_<LexerDef>&
+        operator+= (lexer_def_<LexerDef>& lexdef, Expr&& xpr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit lex 
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+            lexdef.define(xpr);
+            return lexdef;
+        }
+#endif
+
+        template <typename LexerDef, typename Expr>
+        inline lexer_def_<LexerDef>& 
+        operator+= (lexer_def_<LexerDef>& lexdef, Expr const& xpr)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit lex 
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(lex::domain, Expr);
+
+            lexdef.define(xpr);
+            return lexdef;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The match_flags flags are used to influence different matching 
+    //  modes of the lexer
+    struct match_flags
+    {
+        enum enum_type 
+        {
+            match_default = 0,          // no flags
+            match_not_dot_newline = 1,  // the regex '.' doesn't match newlines
+            match_icase = 2             // all matching operations are case insensitive
+        };
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This represents a lexer object
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the first token id automatically assigned by the library 
+    // if needed
+    enum tokenids 
+    {
+        min_token_id = 0x10000
+    };
+
+    template <typename Lexer>
+    class lexer : public Lexer
+    {
+    private:
+        // avoid warnings about using 'this' in constructor
+        lexer& this_() { return *this; }
+
+        std::size_t next_token_id;   // has to be an integral type
+
+    public:
+        typedef Lexer lexer_type;
+        typedef typename Lexer::id_type id_type;
+        typedef typename Lexer::char_type char_type;
+        typedef typename Lexer::iterator_type iterator_type;
+        typedef lexer base_type;
+
+        typedef detail::lexer_def_<lexer> lexer_def;
+        typedef std::basic_string<char_type> string_type;
+
+        lexer(unsigned int flags = match_flags::match_default
+            , id_type first_id = id_type(min_token_id)) 
+          : lexer_type(flags)
+          , next_token_id(first_id)
+          , self(this_(), lexer_type::initial_state()) 
+        {}
+
+        // access iterator interface
+        template <typename Iterator>
+        iterator_type begin(Iterator& first, Iterator const& last
+                , char_type const* initial_state = 0) const
+            { return this->lexer_type::begin(first, last, initial_state); }
+        iterator_type end() const 
+            { return this->lexer_type::end(); }
+
+        std::size_t map_state(char_type const* state)
+            { return this->lexer_type::add_state(state); }
+
+        //  create a unique token id
+        id_type get_next_id() { return id_type(next_token_id++); }
+
+        lexer_def self;  // allow for easy token definition
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor.hpp
new file mode 100644 (file)
index 0000000..79e5f07
--- /dev/null
@@ -0,0 +1,300 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_FUNCTOR_NOV_18_2007_1112PM)
+#define BOOST_SPIRIT_LEX_LEXER_FUNCTOR_NOV_18_2007_1112PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+#include <boost/assert.hpp>
+
+#if 0 != __COMO_VERSION__ || !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+#define BOOST_SPIRIT_STATIC_EOF 1
+#define BOOST_SPIRIT_EOF_PREFIX static
+#else
+#define BOOST_SPIRIT_EOF_PREFIX 
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  functor is a template usable as the functor object for the 
+    //  multi_pass iterator allowing to wrap a lexertl based dfa into a 
+    //  iterator based interface.
+    //  
+    //    Token:      the type of the tokens produced by this functor
+    //                this needs to expose a constructor with the following
+    //                prototype:
+    //
+    //                Token(std::size_t id, std::size_t state, 
+    //                      Iterator start, Iterator end)
+    //
+    //                where 'id' is the token id, state is the lexer state,
+    //                this token has been matched in, and 'first' and 'end'  
+    //                mark the start and the end of the token with respect 
+    //                to the underlying character stream.
+    //    FunctorData:
+    //                this is expected to encapsulate the shared part of the 
+    //                functor (see lex/lexer/lexertl/functor_data.hpp for an
+    //                example and documentation).
+    //    Iterator:   the type of the underlying iterator
+    //    SupportsActors:
+    //                this is expected to be a mpl::bool_, if mpl::true_ the
+    //                functor invokes functors which (optionally) have 
+    //                been attached to the token definitions.
+    //    SupportState:
+    //                this is expected to be a mpl::bool_, if mpl::true_ the
+    //                functor supports different lexer states, 
+    //                otherwise no lexer state is supported.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token
+      , template <typename, typename, typename, typename> class FunctorData
+      , typename Iterator = typename Token::iterator_type
+      , typename SupportsActors = mpl::false_
+      , typename SupportsState = typename Token::has_state>
+    class functor
+    {
+    public:
+        typedef typename 
+            boost::detail::iterator_traits<Iterator>::value_type 
+        char_type;
+
+    private:
+        // Needed by compilers not implementing the resolution to DR45. For
+        // reference, see
+        // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+        typedef typename Token::token_value_type token_value_type;
+        friend class FunctorData<Iterator, SupportsActors, SupportsState
+          , token_value_type>;
+
+        // Helper template allowing to assign a value on exit
+        template <typename T>
+        struct assign_on_exit
+        {
+            assign_on_exit(T& dst, T const& src)
+              : dst_(dst), src_(src) {}
+
+            ~assign_on_exit()
+            {
+                dst_ = src_;
+            }
+
+            T& dst_;
+            T const& src_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            assign_on_exit& operator= (assign_on_exit const&);
+        };
+
+    public:
+        functor()
+#if defined(__PGI)
+          : eof()
+#endif 
+        {}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+        // somehow VC7.1 needs this (meaningless) assignment operator
+        functor& operator=(functor const& rhs)
+        {
+            return *this;
+        }
+#endif
+
+        ///////////////////////////////////////////////////////////////////////
+        // interface to the iterator_policies::split_functor_input policy
+        typedef Token result_type;
+        typedef functor unique;
+        typedef FunctorData<Iterator, SupportsActors, SupportsState
+          , token_value_type> shared;
+
+        BOOST_SPIRIT_EOF_PREFIX result_type const eof;
+
+        ///////////////////////////////////////////////////////////////////////
+        typedef Iterator iterator_type;
+        typedef typename shared::semantic_actions_type semantic_actions_type;
+        typedef typename shared::next_token_functor next_token_functor;
+        typedef typename shared::get_state_name_type get_state_name_type;
+
+        // this is needed to wrap the semantic actions in a proper way
+        typedef typename shared::wrap_action_type wrap_action_type;
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename MultiPass>
+        static result_type& get_next(MultiPass& mp, result_type& result)
+        {
+            typedef typename result_type::id_type id_type;
+
+            shared& data = mp.shared()->ftor;
+            for(;;) 
+            {
+                if (data.get_first() == data.get_last()) 
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+                    return result = eof;
+#else
+                    return result = mp.ftor.eof;
+#endif
+
+                data.reset_value();
+                Iterator end = data.get_first();
+                std::size_t unique_id = boost::lexer::npos;
+                bool prev_bol = false;
+
+                // lexer matching might change state
+                std::size_t state = data.get_state();
+                std::size_t id = data.next(end, unique_id, prev_bol);
+
+                if (boost::lexer::npos == id) {   // no match
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                    std::string next;
+                    Iterator it = data.get_first();
+                    for (std::size_t i = 0; i < 10 && it != data.get_last(); ++it, ++i)
+                        next += *it;
+
+                    std::cerr << "Not matched, in state: " << state 
+                              << ", lookahead: >" << next << "<" << std::endl;
+#endif
+                    return result = result_type(0);
+                }
+                else if (0 == id) {         // EOF reached
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+                    return result = eof;
+#else
+                    return result = mp.ftor.eof;
+#endif
+                }
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                {
+                    std::string next;
+                    Iterator it = end;
+                    for (std::size_t i = 0; i < 10 && it != data.get_last(); ++it, ++i)
+                        next += *it;
+
+                    std::cerr << "Matched: " << id << ", in state: " 
+                              << state << ", string: >" 
+                              << std::basic_string<char_type>(data.get_first(), end) << "<"
+                              << ", lookahead: >" << next << "<" << std::endl;
+                    if (data.get_state() != state) {
+                        std::cerr << "Switched to state: " 
+                                  << data.get_state() << std::endl;
+                    }
+                }
+#endif
+                // account for a possibly pending lex::more(), i.e. moving 
+                // data.first_ back to the start of the previously matched token.
+                bool adjusted = data.adjust_start();
+
+                // set the end of the matched input sequence in the token data
+                data.set_end(end);
+
+                // invoke attached semantic actions, if defined, might change
+                // state, id, data.first_, and/or end
+                BOOST_SCOPED_ENUM(pass_flags) pass = 
+                    data.invoke_actions(state, id, unique_id, end);
+
+                if (data.has_value()) {
+                    // return matched token using the token value as set before
+                    // using data.set_value(), advancing 'data.first_' past the 
+                    // matched sequence
+                    assign_on_exit<Iterator> on_exit(data.get_first(), end);
+                    return result = result_type(id_type(id), state, data.get_value());
+                }
+                else if (pass_flags::pass_normal == pass) {
+                    // return matched token, advancing 'data.first_' past the 
+                    // matched sequence
+                    assign_on_exit<Iterator> on_exit(data.get_first(), end);
+                    return result = result_type(id_type(id), state, data.get_first(), end);
+                }
+                else if (pass_flags::pass_fail == pass) {
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                    std::cerr << "Matching forced to fail" << std::endl; 
+#endif
+                    // if the data.first_ got adjusted above, revert this adjustment
+                    if (adjusted)
+                        data.revert_adjust_start();
+
+                    // one of the semantic actions signaled no-match
+                    data.reset_bol(prev_bol);
+                    if (state != data.get_state())
+                        continue;       // retry matching if state has changed
+
+                    // if the state is unchanged repeating the match wouldn't
+                    // move the input forward, causing an infinite loop
+                    return result = result_type(0);
+                }
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                std::cerr << "Token ignored, continuing matching" << std::endl; 
+#endif
+            // if this token needs to be ignored, just repeat the matching,
+            // while starting right after the current match
+                data.get_first() = end;
+            }
+        }
+
+        // set_state are propagated up to the iterator interface, allowing to 
+        // manipulate the current lexer state through any of the exposed 
+        // iterators.
+        template <typename MultiPass>
+        static std::size_t set_state(MultiPass& mp, std::size_t state) 
+        { 
+            std::size_t oldstate = mp.shared()->ftor.get_state();
+            mp.shared()->ftor.set_state(state);
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+            std::cerr << "Switching state from: " << oldstate 
+                      << " to: " << state
+                      << std::endl;
+#endif
+            return oldstate; 
+        }
+
+        template <typename MultiPass>
+        static std::size_t get_state(MultiPass& mp) 
+        { 
+            return mp.shared()->ftor.get_state();
+        }
+
+        template <typename MultiPass>
+        static std::size_t 
+        map_state(MultiPass const& mp, char_type const* statename)  
+        { 
+            return mp.shared()->ftor.get_state_id(statename);
+        }
+
+        // we don't need this, but it must be there
+        template <typename MultiPass>
+        static void destroy(MultiPass const&) {}
+    };
+
+#if defined(BOOST_SPIRIT_STATIC_EOF)
+    ///////////////////////////////////////////////////////////////////////////
+    //  eof token
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token
+      , template <typename, typename, typename, typename> class FunctorData
+      , typename Iterator, typename SupportsActors, typename SupportsState>
+    typename functor<Token, FunctorData, Iterator, SupportsActors, SupportsState>::result_type const
+        functor<Token, FunctorData, Iterator, SupportsActors, SupportsState>::eof = 
+            typename functor<Token, FunctorData, Iterator, SupportsActors
+              , SupportsState>::result_type();
+#endif
+
+}}}}
+
+#undef BOOST_SPIRIT_EOF_PREFIX
+#undef BOOST_SPIRIT_STATIC_EOF
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/functor_data.hpp
new file mode 100644 (file)
index 0000000..dfad49b
--- /dev/null
@@ -0,0 +1,552 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_FUNCTOR_DATA_JUN_10_2009_0954AM)
+#define BOOST_SPIRIT_LEX_LEXER_FUNCTOR_DATA_JUN_10_2009_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/optional.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename HasActors, typename HasState
+          , typename TokenValue>
+        class data;    // no default specialization
+
+        ///////////////////////////////////////////////////////////////////////
+        //  neither supports state, nor actors
+        template <typename Iterator, typename TokenValue>
+        class data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef typename 
+                boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef std::size_t state_type;
+            typedef char_type const* state_name_type;
+            typedef unused_type semantic_actions_type;
+            typedef detail::wrap_action<unused_type, Iterator, data, std::size_t>
+                wrap_action_type;
+
+            typedef unused_type next_token_functor;
+            typedef unused_type get_state_name_type;
+
+            // initialize the shared data 
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : first_(first), last_(last)
+              , state_machine_(data_.state_machine_)
+              , rules_(data_.rules_)
+              , bol_(data_.state_machine_.data()._seen_BOL_assertion) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            template <typename Char>
+            void set_state_name (Char const*) 
+            {
+// some (random) versions of gcc instantiate this function even if it's not 
+// needed leading to false static asserts
+#if !defined(__GNUC__)
+                // If you see a compile time assertion below you're probably 
+                // using a token type not supporting lexer states (the 3rd 
+                // template parameter of the token is mpl::false_), but your 
+                // code uses state changes anyways.
+                BOOST_STATIC_ASSERT(false);
+#endif
+            }
+            char_type const* get_state_name() const { return rules_.initial(); }
+            std::size_t get_state_id (char_type const*) const
+            {
+                return 0;
+            }
+
+            // The function get_eoi() is used by the implementation of the 
+            // placeholder '_eoi'.
+            Iterator const& get_eoi() const { return last_; }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream. 
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            Iterator const& less(Iterator const& it, int) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return it; 
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            // 
+            // These functions do nothing as long as no semantic actions are 
+            // used.
+            void more() 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?"); 
+            }
+            bool adjust_start() { return false; }
+            void revert_adjust_start() {}
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b):
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            bool lookahead(std::size_t, std::size_t /*state*/ = std::size_t(~0)) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return false; 
+            }
+
+            // the functions next, invoke_actions, and get_state are used by 
+            // the functor implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = bol_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return tokenizer::next(state_machine_, bol_, end, last_
+                  , unique_id);
+            }
+
+            // nothing to invoke, so this is empty
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t
+              , std::size_t, std::size_t, Iterator const&) 
+            {
+                return pass_flags::pass_normal;    // always accept
+            }
+
+            std::size_t get_state() const { return 0; }
+            void set_state(std::size_t) {}
+
+            void set_end(Iterator const& it) {}
+
+            Iterator& get_first() { return first_; }
+            Iterator const& get_first() const { return first_; }
+            Iterator const& get_last() const { return last_; }
+
+            iterator_range<Iterator> get_value() const 
+            { 
+                return iterator_range<Iterator>(first_, last_); 
+            }
+            bool has_value() const { return false; }
+            void reset_value() {}
+
+            void reset_bol(bool bol) { bol_ = bol; }
+
+        protected:
+            Iterator& first_;
+            Iterator last_;
+
+            boost::lexer::basic_state_machine<char_type> const& state_machine_;
+            boost::lexer::basic_rules<char_type> const& rules_;
+
+            bool bol_;      // helper storing whether last character was \n
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  doesn't support lexer semantic actions, but supports state
+        template <typename Iterator, typename TokenValue>
+        class data<Iterator, mpl::false_, mpl::true_, TokenValue>
+          : public data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef data<Iterator, mpl::false_, mpl::false_, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+            typedef typename base_type::semantic_actions_type 
+                semantic_actions_type;
+
+            // initialize the shared data 
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , state_(0) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            void set_state_name (char_type const* new_state) 
+            { 
+                std::size_t state_id = this->rules_.state(new_state);
+
+                // If the following assertion fires you've probably been using 
+                // a lexer state name which was not defined in your token 
+                // definition.
+                BOOST_ASSERT(state_id != boost::lexer::npos);
+
+                if (state_id != boost::lexer::npos)
+                    state_ = state_id;
+            }
+            char_type const* get_state_name() const
+            {
+                return this->rules_.state(state_);
+            }
+            std::size_t get_state_id (char_type const* state) const
+            {
+                return this->rules_.state(state);
+            }
+
+            // the functions next() and get_state() are used by the functor 
+            // implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = this->bol_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return tokenizer::next(this->state_machine_, state_, 
+                    this->bol_, end, this->get_eoi(), unique_id);
+            }
+
+            std::size_t& get_state() { return state_; }
+            void set_state(std::size_t state) { state_ = state; }
+
+        protected:
+            std::size_t state_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  does support lexer semantic actions, may support state
+        template <typename Iterator, typename HasState, typename TokenValue>
+        class data<Iterator, mpl::true_, HasState, TokenValue> 
+          : public data<Iterator, mpl::false_, HasState, TokenValue>
+        {
+        public:
+            typedef semantic_actions<Iterator, HasState, data> 
+                semantic_actions_type;
+
+        protected:
+            typedef data<Iterator, mpl::false_, HasState, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+            typedef typename semantic_actions_type::functor_wrapper_type
+                functor_wrapper_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef TokenValue token_value_type;
+            typedef TokenValue const& get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+
+            typedef detail::wrap_action<functor_wrapper_type
+              , Iterator, data, std::size_t> wrap_action_type;
+
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , actions_(data_.actions_), hold_()
+              , value_(iterator_range<Iterator>(last, last))
+              , has_value_(false), has_hold_(false) {}
+
+            // invoke attached semantic actions, if defined
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end)
+            {
+                return actions_.invoke_actions(state, id, unique_id, end, *this); 
+            }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream). 
+            Iterator const& less(Iterator& it, int n) 
+            {
+                it = this->get_first();
+                std::advance(it, n);
+                return it;
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            void more()
+            {
+                hold_ = this->get_first();
+                has_hold_ = true;
+            }
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b)
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0))
+            {
+                Iterator end = end_;
+                std::size_t unique_id = boost::lexer::npos;
+                bool bol = this->bol_;
+
+                if (std::size_t(~0) == state)
+                    state = this->state_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return id == tokenizer::next(this->state_machine_, state, 
+                    bol, end, this->get_eoi(), unique_id);
+            }
+
+            // The adjust_start() and revert_adjust_start() are helper 
+            // functions needed to implement the functionality required for 
+            // lex::more(). It is called from the functor body below.
+            bool adjust_start()
+            {
+                if (!has_hold_)
+                    return false;
+
+                std::swap(this->get_first(), hold_);
+                has_hold_ = false;
+                return true;
+            }
+            void revert_adjust_start()
+            {
+                // this will be called only if adjust_start above returned true
+                std::swap(this->get_first(), hold_);
+                has_hold_ = true;
+            }
+
+            TokenValue const& get_value() const 
+            {
+                if (!has_value_) {
+                    value_ = iterator_range<Iterator>(this->get_first(), end_);
+                    has_value_ = true;
+                }
+                return value_;
+            }
+            template <typename Value>
+            void set_value(Value const& val)
+            {
+                value_ = val;
+                has_value_ = true;
+            }
+            void set_end(Iterator const& it)
+            {
+                end_ = it;
+            }
+            bool has_value() const { return has_value_; }
+            void reset_value() { has_value_ = false; }
+
+        protected:
+            semantic_actions_type const& actions_;
+            Iterator hold_;     // iterator needed to support lex::more()
+            Iterator end_;      // iterator pointing to end of matched token
+            mutable TokenValue value_;  // token value to use
+            mutable bool has_value_;    // 'true' if value_ is valid
+            bool has_hold_;     // 'true' if hold_ is valid
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  does support lexer semantic actions, may support state, is used for
+        //  position_token exposing exactly one type
+        template <typename Iterator, typename HasState, typename TokenValue>
+        class data<Iterator, mpl::true_, HasState, boost::optional<TokenValue> > 
+          : public data<Iterator, mpl::false_, HasState, TokenValue>
+        {
+        public:
+            typedef semantic_actions<Iterator, HasState, data> 
+                semantic_actions_type;
+
+        protected:
+            typedef data<Iterator, mpl::false_, HasState, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+            typedef typename semantic_actions_type::functor_wrapper_type
+                functor_wrapper_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef boost::optional<TokenValue> token_value_type;
+            typedef boost::optional<TokenValue> const& get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+
+            typedef detail::wrap_action<functor_wrapper_type
+              , Iterator, data, std::size_t> wrap_action_type;
+
+            template <typename IterData>
+            data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , actions_(data_.actions_), hold_()
+              , has_value_(false), has_hold_(false) 
+            {
+                spirit::traits::assign_to(first, last, value_);
+                has_value_ = true;
+            }
+
+            // invoke attached semantic actions, if defined
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end)
+            {
+                return actions_.invoke_actions(state, id, unique_id, end, *this); 
+            }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream). 
+            Iterator const& less(Iterator& it, int n) 
+            {
+                it = this->get_first();
+                std::advance(it, n);
+                return it;
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            void more()
+            {
+                hold_ = this->get_first();
+                has_hold_ = true;
+            }
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b)
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0))
+            {
+                Iterator end = end_;
+                std::size_t unique_id = boost::lexer::npos;
+                bool bol = this->bol_;
+
+                if (std::size_t(~0) == state)
+                    state = this->state_;
+
+                typedef basic_iterator_tokeniser<Iterator> tokenizer;
+                return id == tokenizer::next(this->state_machine_, state, 
+                    bol, end, this->get_eoi(), unique_id);
+            }
+
+            // The adjust_start() and revert_adjust_start() are helper 
+            // functions needed to implement the functionality required for 
+            // lex::more(). It is called from the functor body below.
+            bool adjust_start()
+            {
+                if (!has_hold_)
+                    return false;
+
+                std::swap(this->get_first(), hold_);
+                has_hold_ = false;
+                return true;
+            }
+            void revert_adjust_start()
+            {
+                // this will be called only if adjust_start above returned true
+                std::swap(this->get_first(), hold_);
+                has_hold_ = true;
+            }
+
+            token_value_type const& get_value() const 
+            {
+                if (!has_value_) {
+                    spirit::traits::assign_to(this->get_first(), end_, value_);
+                    has_value_ = true;
+                }
+                return value_;
+            }
+            template <typename Value>
+            void set_value(Value const& val)
+            {
+                value_ = val;
+                has_value_ = true;
+            }
+            void set_end(Iterator const& it)
+            {
+                end_ = it;
+            }
+            bool has_value() const { return has_value_; }
+            void reset_value() { has_value_ = false; }
+
+        protected:
+            semantic_actions_type const& actions_;
+            Iterator hold_;     // iterator needed to support lex::more()
+            Iterator end_;      // iterator pointing to end of matched token
+            mutable token_value_type value_;  // token value to use
+            mutable bool has_value_;    // 'true' if value_ is valid
+            bool has_hold_;     // 'true' if hold_ is valid
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            data& operator= (data const&);
+        };
+    }
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/generate_static.hpp
new file mode 100644 (file)
index 0000000..72b8014
--- /dev/null
@@ -0,0 +1,1027 @@
+//  Copyright (c) 2008-2009 Ben Hanson
+//  Copyright (c) 2008-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXERTL_GENERATE_CPP_FEB_10_2008_0855PM)
+#define BOOST_SPIRIT_LEX_LEXERTL_GENERATE_CPP_FEB_10_2008_0855PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/lexer/char_traits.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/size_t.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/support/detail/lexer/debug.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/static_version.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/scoped_array.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{
+    namespace detail
+    {
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharT>
+    struct string_lit;
+
+    template <>
+    struct string_lit<char>
+    {
+        static char get(char c) { return c; }
+        static std::string get(char const* str = "") { return str; }
+    };
+
+    template <>
+    struct string_lit<wchar_t>
+    {
+        static wchar_t get(char c)
+        {
+            typedef std::ctype<wchar_t> ctype_t;
+            return std::use_facet<ctype_t>(std::locale()).widen(c);
+        }
+        static std::basic_string<wchar_t> get(char const* source = "")
+        {
+            using namespace std;        // some systems have size_t in ns std
+            size_t len = strlen(source);
+            boost::scoped_array<wchar_t> result (new wchar_t[len+1]);
+            result.get()[len] = '\0';
+
+            // working with wide character streams is supported only if the
+            // platform provides the std::ctype<wchar_t> facet
+            BOOST_ASSERT(std::has_facet<std::ctype<wchar_t> >(std::locale()));
+
+            std::use_facet<std::ctype<wchar_t> >(std::locale())
+                .widen(source, source + len, result.get());
+            return result.get();
+        }
+    };
+
+    template <typename Char>
+    inline Char L(char c)
+    {
+        return string_lit<Char>::get(c);
+    }
+
+    template <typename Char>
+    inline std::basic_string<Char> L(char const* c = "")
+    {
+        return string_lit<Char>::get(c);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    inline bool
+    generate_delimiter(std::basic_ostream<Char> &os_)
+    {
+        os_ << std::basic_string<Char>(80, '/') << "\n";
+        return os_.good();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generate a table of the names of the used lexer states, which is a bit
+    // tricky, because the table stored with the rules is sorted based on the
+    // names, but we need it sorted using the state ids.
+    template <typename Char>
+    inline bool
+    generate_cpp_state_info (boost::lexer::basic_rules<Char> const& rules_
+      , std::basic_ostream<Char> &os_, Char const* name_suffix)
+    {
+        // we need to re-sort the state names in ascending order of the state
+        // ids, filling possible gaps in between later
+        typedef typename
+            boost::lexer::basic_rules<Char>::string_size_t_map::const_iterator
+        state_iterator;
+        typedef std::map<std::size_t, Char const*> reverse_state_map_type;
+
+        reverse_state_map_type reverse_state_map;
+        state_iterator send = rules_.statemap().end();
+        for (state_iterator sit = rules_.statemap().begin(); sit != send; ++sit)
+        {
+            typedef typename reverse_state_map_type::value_type value_type;
+            reverse_state_map.insert(value_type((*sit).second, (*sit).first.c_str()));
+        }
+
+        generate_delimiter(os_);
+        os_ << "// this table defines the names of the lexer states\n";
+        os_ << boost::lexer::detail::strings<Char>::char_name()
+            << " const* const lexer_state_names"
+            << (name_suffix[0] ? "_" : "") << name_suffix
+            << "[" << rules_.statemap().size() << "] = \n{\n";
+
+        typedef typename reverse_state_map_type::iterator iterator;
+        iterator rend = reverse_state_map.end();
+        std::size_t last_id = 0;
+        for (iterator rit = reverse_state_map.begin(); rit != rend; ++last_id)
+        {
+            for (/**/; last_id < (*rit).first; ++last_id)
+            {
+                os_ << "    0,  // \"<undefined state>\"\n";
+            }
+            os_ << "    "
+                << boost::lexer::detail::strings<Char>::char_prefix()
+                << "\"" << (*rit).second << "\"";
+            if (++rit != rend)
+                os_ << ",\n";
+            else
+                os_ << "\n";        // don't generate the final comma
+        }
+        os_ << "};\n\n";
+
+        generate_delimiter(os_);
+        os_ << "// this variable defines the number of lexer states\n";
+        os_ << "std::size_t const lexer_state_count"
+            << (name_suffix[0] ? "_" : "") << name_suffix
+            << " = " << rules_.statemap().size() << ";\n\n";
+        return os_.good();
+    }
+
+    template <typename Char>
+    inline bool
+    generate_cpp_state_table (std::basic_ostream<Char> &os_
+      , Char const* name_suffix, bool bol, bool eol)
+    {
+        std::basic_string<Char> suffix(L<Char>(name_suffix[0] ? "_" : ""));
+        suffix += name_suffix;
+
+        generate_delimiter(os_);
+        os_ << "// this defines a generic accessors for the information above\n";
+        os_ << "struct lexer" << suffix << "\n{\n";
+        os_ << "    // version number and feature-set of compatible static lexer engine\n";
+        os_ << "    enum\n";
+        os_ << "    {\n        static_version = "
+            << boost::lexical_cast<std::basic_string<Char> >(SPIRIT_STATIC_LEXER_VERSION)
+            << ",\n";
+        os_ << "        supports_bol = " << std::boolalpha << bol << ",\n";
+        os_ << "        supports_eol = " << std::boolalpha << eol << "\n";
+        os_ << "    };\n\n";
+        os_ << "    // return the number of lexer states\n";
+        os_ << "    static std::size_t state_count()\n";
+        os_ << "    {\n        return lexer_state_count" << suffix << "; \n    }\n\n";
+        os_ << "    // return the name of the lexer state as given by 'idx'\n";
+        os_ << "    static " << boost::lexer::detail::strings<Char>::char_name()
+            << " const* state_name(std::size_t idx)\n";
+        os_ << "    {\n        return lexer_state_names" << suffix << "[idx]; \n    }\n\n";
+        os_ << "    // return the next matched token\n";
+        os_ << "    template<typename Iterator>\n";
+        os_ << "    static std::size_t next(std::size_t &start_state_, bool& bol_\n";
+        os_ << "      , Iterator &start_token_, Iterator const& end_, std::size_t& unique_id_)\n";
+        os_ << "    {\n        return next_token" << suffix
+            << "(start_state_, bol_, start_token_, end_, unique_id_);\n    }\n";
+        os_ << "};\n\n";
+        return os_.good();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate function body based on traversing the DFA tables
+    template <typename Char>
+    bool generate_function_body_dfa(std::basic_ostream<Char>& os_
+      , boost::lexer::basic_state_machine<Char> const &sm_)
+    {
+        std::size_t const dfas_ = sm_.data()._dfa->size();
+        std::size_t const lookups_ = sm_.data()._lookup->front()->size();
+
+        os_ << "    enum {end_state_index, id_index, unique_id_index, "
+               "state_index, bol_index,\n";
+        os_ << "        eol_index, dead_state_index, dfa_offset};\n\n";
+        os_ << "    static std::size_t const npos = "
+               "static_cast<std::size_t>(~0);\n";
+
+        if (dfas_ > 1)
+        {
+            for (std::size_t state_ = 0; state_ < dfas_; ++state_)
+            {
+                std::size_t i_ = 0;
+                std::size_t j_ = 1;
+                std::size_t count_ = lookups_ / 8;
+                std::size_t const* lookup_ = &sm_.data()._lookup[state_]->front();
+                std::size_t const* dfa_ = &sm_.data()._dfa[state_]->front();
+
+                os_ << "    static std::size_t const lookup" << state_
+                    << "_[" << lookups_ << "] = {\n        ";
+                for (/**/; i_ < count_; ++i_)
+                {
+                    std::size_t const index_ = i_ * 8;
+                    os_ << lookup_[index_];
+                    for (/**/; j_ < 8; ++j_)
+                    {
+                        os_ << ", " << lookup_[index_ + j_];
+                    }
+                    if (i_ < count_ - 1)
+                    {
+                        os_ << ",\n        ";
+                    }
+                    j_ = 1;
+                }
+                os_ << " };\n";
+
+                count_ = sm_.data()._dfa[state_]->size ();
+                os_ << "    static const std::size_t dfa" << state_ << "_["
+                    << count_ << "] = {\n        ";
+                count_ /= 8;
+                for (i_ = 0; i_ < count_; ++i_)
+                {
+                    std::size_t const index_ = i_ * 8;
+                    os_ << dfa_[index_];
+                    for (j_ = 1; j_ < 8; ++j_)
+                    {
+                        os_ << ", " << dfa_[index_ + j_];
+                    }
+                    if (i_ < count_ - 1)
+                    {
+                        os_ << ",\n        ";
+                    }
+                }
+
+                std::size_t const mod_ = sm_.data()._dfa[state_]->size () % 8;
+                if (mod_)
+                {
+                    std::size_t const index_ = count_ * 8;
+                    if (count_)
+                    {
+                        os_ << ",\n        ";
+                    }
+                    os_ << dfa_[index_];
+                    for (j_ = 1; j_ < mod_; ++j_)
+                    {
+                        os_ << ", " << dfa_[index_ + j_];
+                    }
+                }
+                os_ << " };\n";
+            }
+
+            std::size_t count_ = sm_.data()._dfa_alphabet.size();
+            std::size_t i_ = 1;
+
+            os_ << "    static std::size_t const* lookup_arr_[" << count_
+                << "] = { lookup0_";
+            for (i_ = 1; i_ < count_; ++i_)
+            {
+                os_ << ", " << "lookup" << i_ << "_";
+            }
+            os_ << " };\n";
+
+            os_ << "    static std::size_t const dfa_alphabet_arr_["
+                << count_ << "] = { ";
+            os_ << sm_.data()._dfa_alphabet.front ();
+            for (i_ = 1; i_ < count_; ++i_)
+            {
+                os_ << ", " << sm_.data()._dfa_alphabet[i_];
+            }
+            os_ << " };\n";
+
+            os_ << "    static std::size_t const* dfa_arr_[" << count_
+                << "] = { ";
+            os_ << "dfa0_";
+            for (i_ = 1; i_ < count_; ++i_)
+            {
+                os_ << ", " << "dfa" << i_ << "_";
+            }
+            os_ << " };\n";
+        }
+        else
+        {
+            std::size_t const* lookup_ = &sm_.data()._lookup[0]->front();
+            std::size_t const* dfa_ = &sm_.data()._dfa[0]->front();
+            std::size_t i_ = 0;
+            std::size_t j_ = 1;
+            std::size_t count_ = lookups_ / 8;
+
+            os_ << "    static std::size_t const lookup_[";
+            os_ << sm_.data()._lookup[0]->size() << "] = {\n        ";
+            for (/**/; i_ < count_; ++i_)
+            {
+                const std::size_t index_ = i_ * 8;
+                os_ << lookup_[index_];
+                for (/**/; j_ < 8; ++j_)
+                {
+                    os_ << ", " << lookup_[index_ + j_];
+                }
+                if (i_ < count_ - 1)
+                {
+                    os_ << ",\n        ";
+                }
+                j_ = 1;
+            }
+            os_ << " };\n";
+
+            os_ << "    static std::size_t const dfa_alphabet_ = "
+                << sm_.data()._dfa_alphabet.front () << ";\n";
+            os_ << "    static std::size_t const dfa_["
+                << sm_.data()._dfa[0]->size () << "] = {\n        ";
+            count_ = sm_.data()._dfa[0]->size () / 8;
+            for (i_ = 0; i_ < count_; ++i_)
+            {
+                const std::size_t index_ = i_ * 8;
+                os_ << dfa_[index_];
+                for (j_ = 1; j_ < 8; ++j_)
+                {
+                    os_ << ", " << dfa_[index_ + j_];
+                }
+                if (i_ < count_ - 1)
+                {
+                    os_ << ",\n        ";
+                }
+            }
+
+            const std::size_t mod_ = sm_.data()._dfa[0]->size () % 8;
+            if (mod_)
+            {
+                const std::size_t index_ = count_ * 8;
+                if (count_)
+                {
+                    os_ << ",\n        ";
+                }
+                os_ << dfa_[index_];
+                for (j_ = 1; j_ < mod_; ++j_)
+                {
+                    os_ << ", " << dfa_[index_ + j_];
+                }
+            }
+            os_ << " };\n";
+        }
+
+        os_ << "\n    if (start_token_ == end_)\n";
+        os_ << "    {\n";
+        os_ << "        unique_id_ = npos;\n";
+        os_ << "        return 0;\n";
+        os_ << "    }\n\n";
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "    bool bol = bol_;\n\n";
+        }
+
+        if (dfas_ > 1)
+        {
+            os_ << "again:\n";
+            os_ << "    std::size_t const* lookup_ = lookup_arr_[start_state_];\n";
+            os_ << "    std::size_t dfa_alphabet_ = dfa_alphabet_arr_[start_state_];\n";
+            os_ << "    std::size_t const*dfa_ = dfa_arr_[start_state_];\n";
+        }
+
+        os_ << "    std::size_t const* ptr_ = dfa_ + dfa_alphabet_;\n";
+        os_ << "    Iterator curr_ = start_token_;\n";
+        os_ << "    bool end_state_ = *ptr_ != 0;\n";
+        os_ << "    std::size_t id_ = *(ptr_ + id_index);\n";
+        os_ << "    std::size_t uid_ = *(ptr_ + unique_id_index);\n";
+        if (dfas_ > 1)
+        {
+            os_ << "    std::size_t end_start_state_ = start_state_;\n";
+        }
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "    bool end_bol_ = bol_;\n";
+        }
+        os_ << "    Iterator end_token_ = start_token_;\n\n";
+
+        os_ << "    while (curr_ != end_)\n";
+        os_ << "    {\n";
+
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        std::size_t const BOL_state_ = ptr_[bol_index];\n\n";
+        }
+
+        if (sm_.data()._seen_EOL_assertion)
+        {
+            os_ << "        std::size_t const EOL_state_ = ptr_[eol_index];\n\n";
+        }
+
+        if (sm_.data()._seen_BOL_assertion && sm_.data()._seen_EOL_assertion)
+        {
+            os_ << "        if (BOL_state_ && bol)\n";
+            os_ << "        {\n";
+            os_ << "            ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];\n";
+            os_ << "        }\n";
+            os_ << "        else if (EOL_state_ && *curr_ == '\\n')\n";
+            os_ << "        {\n";
+            os_ << "            ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];\n";
+            os_ << "        }\n";
+            os_ << "        else\n";
+            os_ << "        {\n";
+            if (lookups_ == 256)
+            {
+                os_ << "            unsigned char index = \n";
+                os_ << "                static_cast<unsigned char>(*curr_++);\n";
+            }
+            else
+            {
+                os_ << "            std::size_t index = *curr_++\n";
+            }
+            os_ << "            bol = (index == '\n') ? true : false;\n";
+            os_ << "            std::size_t const state_ = ptr_[\n";
+            os_ << "                lookup_[static_cast<std::size_t>(index)]];\n";
+
+            os_ << '\n';
+            os_ << "            if (state_ == 0) break;\n";
+            os_ << '\n';
+            os_ << "            ptr_ = &dfa_[state_ * dfa_alphabet_];\n";
+            os_ << "        }\n\n";
+        }
+        else if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        if (BOL_state_ && bol)\n";
+            os_ << "        {\n";
+            os_ << "            ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];\n";
+            os_ << "        }\n";
+            os_ << "        else\n";
+            os_ << "        {\n";
+            if (lookups_ == 256)
+            {
+                os_ << "            unsigned char index = \n";
+                os_ << "                static_cast<unsigned char>(*curr_++);\n";
+            }
+            else
+            {
+                os_ << "            std::size_t index = *curr_++\n";
+            }
+            os_ << "            bol = (index == '\n') ? true : false;\n";
+            os_ << "            std::size_t const state_ = ptr_[\n";
+            os_ << "                lookup_[static_cast<std::size_t>(index)]];\n";
+
+            os_ << '\n';
+            os_ << "            if (state_ == 0) break;\n";
+            os_ << '\n';
+            os_ << "            ptr_ = &dfa_[state_ * dfa_alphabet_];\n";
+            os_ << "        }\n\n";
+        }
+        else if (sm_.data()._seen_EOL_assertion)
+        {
+            os_ << "        if (EOL_state_ && *curr_ == '\\n')\n";
+            os_ << "        {\n";
+            os_ << "            ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];\n";
+            os_ << "        }\n";
+            os_ << "        else\n";
+            os_ << "        {\n";
+            if (lookups_ == 256)
+            {
+                os_ << "            unsigned char index = \n";
+                os_ << "                static_cast<unsigned char>(*curr_++);\n";
+            }
+            else
+            {
+                os_ << "            std::size_t index = *curr_++\n";
+            }
+            os_ << "            bol = (index == '\n') ? true : false;\n";
+            os_ << "            std::size_t const state_ = ptr_[\n";
+            os_ << "                lookup_[static_cast<std::size_t>(index)]];\n";
+
+            os_ << '\n';
+            os_ << "            if (state_ == 0) break;\n";
+            os_ << '\n';
+            os_ << "            ptr_ = &dfa_[state_ * dfa_alphabet_];\n";
+            os_ << "        }\n\n";
+        }
+        else
+        {
+            os_ << "        std::size_t const state_ =\n";
+
+            if (lookups_ == 256)
+            {
+                os_ << "            ptr_[lookup_["
+                       "static_cast<unsigned char>(*curr_++)]];\n";
+            }
+            else
+            {
+                os_ << "            ptr_[lookup_[*curr_++]];\n";
+            }
+
+            os_ << '\n';
+            os_ << "        if (state_ == 0) break;\n";
+            os_ << '\n';
+            os_ << "        ptr_ = &dfa_[state_ * dfa_alphabet_];\n\n";
+        }
+
+        os_ << "        if (*ptr_)\n";
+        os_ << "        {\n";
+        os_ << "            end_state_ = true;\n";
+        os_ << "            id_ = *(ptr_ + id_index);\n";
+        os_ << "            uid_ = *(ptr_ + unique_id_index);\n";
+        if (dfas_ > 1)
+        {
+            os_ << "            end_start_state_ = *(ptr_ + state_index);\n";
+        }
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "            end_bol_ = bol;\n";
+        }
+        os_ << "            end_token_ = curr_;\n";
+        os_ << "        }\n";
+        os_ << "    }\n\n";
+
+        if (sm_.data()._seen_EOL_assertion)
+        {
+            os_ << "    std::size_t const EOL_state_ = ptr_[eol_index];\n\n";
+
+            os_ << "    if (EOL_state_ && curr_ == end_)\n";
+            os_ << "    {\n";
+            os_ << "        ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];\n\n";
+
+            os_ << "        if (*ptr_)\n";
+            os_ << "        {\n";
+            os_ << "            end_state_ = true;\n";
+            os_ << "            id_ = *(ptr_ + id_index);\n";
+            os_ << "            uid_ = *(ptr_ + unique_id_index);\n";
+            if (dfas_ > 1)
+            {
+                os_ << "            end_start_state_ = *(ptr_ + state_index);\n";
+            }
+            if (sm_.data()._seen_BOL_assertion)
+            {
+                os_ << "            end_bol_ = bol;\n";
+            }
+            os_ << "            end_token_ = curr_;\n";
+            os_ << "        }\n";
+            os_ << "    }\n\n";
+        }
+
+        os_ << "    if (end_state_)\n";
+        os_ << "    {\n";
+        os_ << "        // return longest match\n";
+        os_ << "        start_token_ = end_token_;\n";
+
+        if (dfas_ > 1)
+        {
+            os_ << "        start_state_ = end_start_state_;\n";
+            os_ << "        if (id_ == 0)\n";
+            os_ << "        {\n";
+            if (sm_.data()._seen_BOL_assertion)
+            {
+                os_ << "            bol = end_bol_;\n";
+            }
+            os_ << "            goto again;\n";
+            os_ << "        }\n";
+            if (sm_.data()._seen_BOL_assertion)
+            {
+                os_ << "        else\n";
+                os_ << "        {\n";
+                os_ << "            bol_ = end_bol_;\n";
+                os_ << "        }\n";
+            }
+        }
+        else if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        bol_ = end_bol_;\n";
+        }
+
+        os_ << "    }\n";
+        os_ << "    else\n";
+        os_ << "    {\n";
+
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        bol_ = (*start_token_ == '\n') ? true : false;\n";
+        }
+
+        os_ << "        id_ = npos;\n";
+        os_ << "        uid_ = npos;\n";
+        os_ << "    }\n\n";
+
+        os_ << "    unique_id_ = uid_;\n";
+        os_ << "    return id_;\n";
+        return os_.good();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    inline std::basic_string<Char> get_charlit(Char ch)
+    {
+        std::basic_string<Char> result;
+        boost::lexer::basic_string_token<Char>::escape_char(ch, result);
+        return result;
+    }
+
+    // check whether state0_0 is referenced from any of the other states
+    template <typename Char>
+    bool need_label0_0(boost::lexer::basic_state_machine<Char> const &sm_)
+    {
+        typedef typename boost::lexer::basic_state_machine<Char>::iterator
+            iterator_type;
+        iterator_type iter_ = sm_.begin();
+        std::size_t const states_ = iter_->states;
+
+        for (std::size_t state_ = 0; state_ < states_; ++state_)
+        {
+            if (0 == iter_->bol_index || 0 == iter_->eol_index)
+            {
+                return true;
+            }
+
+            std::size_t const transitions_ = iter_->transitions;
+            for (std::size_t t_ = 0; t_ < transitions_; ++t_)
+            {
+                if (0 == iter_->goto_state)
+                {
+                    return true;
+                }
+                ++iter_;
+            }
+            if (transitions_ == 0) ++iter_;
+        }
+        return false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    bool generate_function_body_switch(std::basic_ostream<Char> & os_
+      , boost::lexer::basic_state_machine<Char> const &sm_)
+    {
+        typedef typename boost::lexer::basic_state_machine<Char>::iterator
+            iterator_type;
+
+        std::size_t const lookups_ = sm_.data()._lookup->front ()->size ();
+        iterator_type iter_ = sm_.begin();
+        iterator_type labeliter_ = iter_;
+        iterator_type end_ = sm_.end();
+        std::size_t const dfas_ = sm_.data()._dfa->size ();
+
+        os_ << "    static std::size_t const npos = "
+               "static_cast<std::size_t>(~0);\n";
+
+        os_ << "\n    if (start_token_ == end_)\n";
+        os_ << "    {\n";
+        os_ << "        unique_id_ = npos;\n";
+        os_ << "        return 0;\n";
+        os_ << "    }\n\n";
+
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "    bool bol = bol_;\n";
+        }
+
+        if (dfas_ > 1)
+        {
+            os_ << "again:\n";
+        }
+
+        os_ << "    Iterator curr_ = start_token_;\n";
+        os_ << "    bool end_state_ = false;\n";
+        os_ << "    std::size_t id_ = npos;\n";
+        os_ << "    std::size_t uid_ = npos;\n";
+
+        if (dfas_ > 1)
+        {
+            os_ << "    std::size_t end_start_state_ = start_state_;\n";
+        }
+
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "    bool end_bol_ = bol_;\n";
+        }
+
+        os_ << "    Iterator end_token_ = start_token_;\n";
+        os_ << '\n';
+
+        os_ << "    " << ((lookups_ == 256) ? "char" : "wchar_t")
+            << " ch_ = 0;\n\n";
+
+        if (dfas_ > 1)
+        {
+            os_ << "    switch (start_state_)\n";
+            os_ << "    {\n";
+
+            for (std::size_t i_ = 0; i_ < dfas_; ++i_)
+            {
+                os_ << "    case " << i_ << ":\n";
+                os_ << "        goto state" << i_ << "_0;\n";
+                os_ << "        break;\n";
+            }
+
+            os_ << "    default:\n";
+            os_ << "        goto end;\n";
+            os_ << "        break;\n";
+            os_ << "    }\n";
+        }
+
+        bool need_state0_0_label = need_label0_0(sm_);
+
+        for (std::size_t dfa_ = 0; dfa_ < dfas_; ++dfa_)
+        {
+            std::size_t const states_ = iter_->states;
+            for (std::size_t state_ = 0; state_ < states_; ++state_)
+            {
+                std::size_t const transitions_ = iter_->transitions;
+                std::size_t t_ = 0;
+
+                if (dfas_ > 1 || dfa_ != 0 || state_ != 0 || need_state0_0_label)
+                {
+                    os_ << "\nstate" << dfa_ << '_' << state_ << ":\n";
+                }
+
+                if (iter_->end_state)
+                {
+                    os_ << "    end_state_ = true;\n";
+                    os_ << "    id_ = " << iter_->id << ";\n";
+                    os_ << "    uid_ = " << iter_->unique_id << ";\n";
+                    os_ << "    end_token_ = curr_;\n";
+
+                    if (dfas_ > 1)
+                    {
+                        os_ << "    end_start_state_ = " << iter_->goto_dfa <<
+                            ";\n";
+                    }
+
+                    if (sm_.data()._seen_BOL_assertion)
+                    {
+                        os_ << "    end_bol_ = bol;\n";
+                    }
+
+                    if (transitions_) os_ << '\n';
+                }
+
+                if (t_ < transitions_ ||
+                    iter_->bol_index != boost::lexer::npos ||
+                    iter_->eol_index != boost::lexer::npos)
+                {
+                    os_ << "    if (curr_ == end_) goto end;\n";
+                    os_ << "    ch_ = *curr_;\n";
+                    if (iter_->bol_index != boost::lexer::npos)
+                    {
+                        os_ << "\n    if (bol) goto state" << dfa_ << '_'
+                            << iter_->bol_index << ";\n";
+                    }
+                    if (iter_->eol_index != boost::lexer::npos)
+                    {
+                        os_ << "\n    if (ch_ == '\n') goto state" << dfa_
+                            << '_' << iter_->eol_index << ";\n";
+                    }
+                    os_ << "    ++curr_;\n";
+                }
+
+                for (/**/; t_ < transitions_; ++t_)
+                {
+                    Char const *ptr_ = iter_->token._charset.c_str();
+                    Char const *end_ = ptr_ + iter_->token._charset.size();
+                    Char start_char_ = 0;
+                    Char curr_char_ = 0;
+                    bool range_ = false;
+                    bool first_char_ = true;
+
+                    os_ << "\n    if (";
+
+                    while (ptr_ != end_)
+                    {
+                        curr_char_ = *ptr_++;
+
+                        if (*ptr_ == curr_char_ + 1)
+                        {
+                            if (!range_)
+                            {
+                                start_char_ = curr_char_;
+                            }
+                            range_ = true;
+                        }
+                        else
+                        {
+                            if (!first_char_)
+                            {
+                                os_ << ((iter_->token._negated) ? " && " : " || ");
+                            }
+                            else
+                            {
+                                first_char_ = false;
+                            }
+                            if (range_)
+                            {
+                                if (iter_->token._negated)
+                                {
+                                    os_ << "!";
+                                }
+                                os_ << "(ch_ >= '" << get_charlit(start_char_)
+                                    << "' && ch_ <= '"
+                                    << get_charlit(curr_char_) << "')";
+                                range_ = false;
+                            }
+                            else
+                            {
+                                os_ << "ch_ "
+                                    << ((iter_->token._negated) ? "!=" : "==")
+                                    << " '" << get_charlit(curr_char_) << "'";
+                            }
+                        }
+                    }
+
+                    os_ << ") goto state" << dfa_ << '_' << iter_->goto_state
+                        << ";\n";
+                    ++iter_;
+                }
+
+                if (!(dfa_ == dfas_ - 1 && state_ == states_ - 1))
+                {
+                    os_ << "    goto end;\n";
+                }
+
+                if (transitions_ == 0) ++iter_;
+            }
+        }
+
+        os_ << "\nend:\n";
+        os_ << "    if (end_state_)\n";
+        os_ << "    {\n";
+        os_ << "        // return longest match\n";
+        os_ << "        start_token_ = end_token_;\n";
+
+        if (dfas_ > 1)
+        {
+            os_ << "        start_state_ = end_start_state_;\n";
+            os_ << "\n        if (id_ == 0)\n";
+            os_ << "        {\n";
+
+            if (sm_.data()._seen_BOL_assertion)
+            {
+                os_ << "            bol = end_bol_;\n";
+            }
+
+            os_ << "            goto again;\n";
+            os_ << "        }\n";
+
+            if (sm_.data()._seen_BOL_assertion)
+            {
+                os_ << "        else\n";
+                os_ << "        {\n";
+                os_ << "            bol_ = end_bol_;\n";
+                os_ << "        }\n";
+            }
+        }
+        else if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        bol_ = end_bol_;\n";
+        }
+
+        os_ << "    }\n";
+        os_ << "    else\n";
+        os_ << "    {\n";
+
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "        bol_ = (*start_token_ == '\\n') ? true : false;\n";
+        }
+        os_ << "        id_ = npos;\n";
+        os_ << "        uid_ = npos;\n";
+        os_ << "    }\n\n";
+
+        os_ << "    unique_id_ = uid_;\n";
+        os_ << "    return id_;\n";
+        return os_.good();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generate a tokenizer for the given state machine.
+    template <typename Char, typename F>
+    inline bool
+    generate_cpp (boost::lexer::basic_state_machine<Char> const& sm_
+      , boost::lexer::basic_rules<Char> const& rules_
+      , std::basic_ostream<Char> &os_, Char const* name_suffix
+      , F generate_function_body)
+    {
+        if (sm_.data()._lookup->empty())
+            return false;
+
+        std::size_t const dfas_ = sm_.data()._dfa->size();
+//         std::size_t const lookups_ = sm_.data()._lookup->front()->size();
+
+        os_ << "// Copyright (c) 2008-2009 Ben Hanson\n";
+        os_ << "// Copyright (c) 2008-2011 Hartmut Kaiser\n";
+        os_ << "//\n";
+        os_ << "// Distributed under the Boost Software License, "
+            "Version 1.0. (See accompanying\n";
+        os_ << "// file licence_1_0.txt or copy at "
+            "http://www.boost.org/LICENSE_1_0.txt)\n\n";
+        os_ << "// Auto-generated by boost::lexer, do not edit\n\n";
+
+        std::basic_string<Char> guard(name_suffix);
+        guard += L<Char>(name_suffix[0] ? "_" : "");
+        guard += L<Char>(__DATE__ "_" __TIME__);
+        typename std::basic_string<Char>::size_type p = 
+            guard.find_first_of(L<Char>(": "));
+        while (std::string::npos != p)
+        {
+            guard.replace(p, 1, L<Char>("_"));
+            p = guard.find_first_of(L<Char>(": "), p);
+        }
+        boost::to_upper(guard);
+
+        os_ << "#if !defined(BOOST_SPIRIT_LEXER_NEXT_TOKEN_" << guard << ")\n";
+        os_ << "#define BOOST_SPIRIT_LEXER_NEXT_TOKEN_" << guard << "\n\n";
+
+        os_ << "#include <boost/detail/iterator.hpp>\n";
+        os_ << "#include <boost/spirit/home/support/detail/lexer/char_traits.hpp>\n\n";
+
+        generate_delimiter(os_);
+        os_ << "// the generated table of state names and the tokenizer have to be\n"
+               "// defined in the boost::spirit::lex::lexertl::static_ namespace\n";
+        os_ << "namespace boost { namespace spirit { namespace lex { "
+            "namespace lexertl { namespace static_ {\n\n";
+
+        // generate the lexer state information variables
+        if (!generate_cpp_state_info(rules_, os_, name_suffix))
+            return false;
+
+        generate_delimiter(os_);
+        os_ << "// this function returns the next matched token\n";
+        os_ << "template<typename Iterator>\n";
+        os_ << "std::size_t next_token" << (name_suffix[0] ? "_" : "")
+            << name_suffix  << " (";
+
+        if (dfas_ > 1)
+        {
+            os_ << "std::size_t& start_state_, ";
+        }
+        else
+        {
+            os_ << "std::size_t& /*start_state_*/, ";
+        }
+        if (sm_.data()._seen_BOL_assertion)
+        {
+            os_ << "bool& bol_, ";
+        }
+        else
+        {
+            os_ << "bool& /*bol_*/, ";
+        }
+        os_ << "\n    ";
+
+        os_ << "Iterator &start_token_, Iterator const& end_, ";
+        os_ << "std::size_t& unique_id_)\n";
+        os_ << "{\n";
+        if (!generate_function_body(os_, sm_))
+            return false;
+        os_ << "}\n\n";
+
+        if (!generate_cpp_state_table<Char>(os_, name_suffix
+            , sm_.data()._seen_BOL_assertion, sm_.data()._seen_EOL_assertion))
+        {
+            return false;
+        }
+
+        os_ << "}}}}}  // namespace boost::spirit::lex::lexertl::static_\n\n";
+
+        os_ << "#endif\n";
+
+        return os_.good();
+    }
+
+    }   // namespace detail
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Lexer, typename F>
+    inline bool
+    generate_static(Lexer const& lexer
+      , std::basic_ostream<typename Lexer::char_type>& os
+      , typename Lexer::char_type const* name_suffix, F f)
+    {
+        if (!lexer.init_dfa(true))    // always minimize DFA for static lexers
+            return false;
+        return detail::generate_cpp(lexer.state_machine_, lexer.rules_, os
+          , name_suffix, f);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // deprecated function, will be removed in the future (this has been
+    // replaced by the function generate_static_dfa - see below).
+    template <typename Lexer>
+    inline bool
+    generate_static(Lexer const& lexer
+      , std::basic_ostream<typename Lexer::char_type>& os
+      , typename Lexer::char_type const* name_suffix =
+          detail::L<typename Lexer::char_type>())
+    {
+        return generate_static(lexer, os, name_suffix
+          , &detail::generate_function_body_dfa<typename Lexer::char_type>);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Lexer>
+    inline bool
+    generate_static_dfa(Lexer const& lexer
+      , std::basic_ostream<typename Lexer::char_type>& os
+      , typename Lexer::char_type const* name_suffix =
+          detail::L<typename Lexer::char_type>())
+    {
+        return generate_static(lexer, os, name_suffix
+          , &detail::generate_function_body_dfa<typename Lexer::char_type>);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Lexer>
+    inline bool
+    generate_static_switch(Lexer const& lexer
+      , std::basic_ostream<typename Lexer::char_type>& os
+      , typename Lexer::char_type const* name_suffix =
+          detail::L<typename Lexer::char_type>())
+    {
+        return generate_static(lexer, os, name_suffix
+          , &detail::generate_function_body_switch<typename Lexer::char_type>);
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator.hpp
new file mode 100644 (file)
index 0000000..1b05720
--- /dev/null
@@ -0,0 +1,149 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_ITERATOR_MAR_16_2007_0353PM)
+#define BOOST_SPIRIT_LEX_LEXER_ITERATOR_MAR_16_2007_0353PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp>
+#else
+#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
+#endif
+#include <boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename FunctorData>
+    struct make_multi_pass
+    {
+        // Divide the given functor type into its components (unique and 
+        // shared) and build a std::pair from these parts
+        typedef std::pair<typename FunctorData::unique
+          , typename FunctorData::shared> functor_data_type;
+
+        // This is the result type returned from the iterator
+        typedef typename FunctorData::result_type result_type;
+
+        // Compose the multi_pass iterator policy type from the appropriate 
+        // policies
+        typedef iterator_policies::split_functor_input input_policy;
+        typedef iterator_policies::ref_counted ownership_policy;
+#if defined(BOOST_SPIRIT_DEBUG)
+        typedef iterator_policies::buf_id_check check_policy;
+#else
+        typedef iterator_policies::no_check check_policy;
+#endif
+        typedef iterator_policies::split_std_deque storage_policy;
+
+        typedef iterator_policies::default_policy<
+                ownership_policy, check_policy, input_policy, storage_policy>
+            policy_type;
+
+        // Compose the multi_pass iterator from the policy
+        typedef spirit::multi_pass<functor_data_type, policy_type> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  lexer_iterator exposes an iterator for a lexertl based dfa (lexer) 
+    //  The template parameters have the same semantics as described for the
+    //  functor above.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Functor>
+    class iterator : public make_multi_pass<Functor>::type
+    {
+    public:
+        typedef typename Functor::unique unique_functor_type;
+        typedef typename Functor::shared shared_functor_type;
+
+        typedef typename Functor::iterator_type base_iterator_type;
+        typedef typename Functor::result_type token_type;
+
+    private:
+        typedef typename make_multi_pass<Functor>::functor_data_type 
+            functor_type;
+        typedef typename make_multi_pass<Functor>::type base_type;
+        typedef typename Functor::char_type char_type;
+
+    public:
+        // create a new iterator encapsulating the lexer object to be used
+        // for tokenization
+        template <typename IteratorData>
+        iterator(IteratorData const& iterdata_, base_iterator_type& first
+              , base_iterator_type const& last, char_type const* state = 0)
+          : base_type(functor_type(unique_functor_type()
+              , shared_functor_type(iterdata_, first, last))) 
+        {
+            set_state(map_state(state));
+        }
+
+        // create an end iterator usable for end of range checking
+        iterator() {}
+
+        // (wash): < mgaunard> T it; T it2 = ++it; doesn't ocmpile
+        //         < mgaunard> this gets fixed by adding
+        iterator(const base_type& base)
+          : base_type(base) { }
+
+        // set the new required state for the underlying lexer object
+        std::size_t set_state(std::size_t state)
+        {
+            return unique_functor_type::set_state(*this, state);
+        }
+
+        // get the curent state for the underlying lexer object
+        std::size_t get_state()
+        {
+            return unique_functor_type::get_state(*this);
+        }
+
+        // map the given state name to a corresponding state id as understood
+        // by the underlying lexer object
+        std::size_t map_state(char_type const* statename)
+        {
+            return (0 != statename) 
+              ? unique_functor_type::map_state(*this, statename)
+              : 0;
+        }
+    };
+}}
+
+namespace traits 
+{ 
+    template <typename Functor>
+    struct is_multi_pass<spirit::lex::lexertl::iterator<Functor> >
+      : mpl::true_ {};
+
+    template <typename Functor>
+    void clear_queue(spirit::lex::lexertl::iterator<Functor> & mp
+        , BOOST_SCOPED_ENUM(traits::clear_mode) mode)
+    {
+        mp.clear_queue(mode);
+    }
+
+    template <typename Functor>
+    void inhibit_clear_queue(spirit::lex::lexertl::iterator<Functor>& mp, bool flag)
+    {
+        mp.inhibit_clear_queue(flag);
+    }
+
+    template <typename Functor> 
+    bool inhibit_clear_queue(spirit::lex::lexertl::iterator<Functor>& mp)
+    {
+        return mp.inhibit_clear_queue();
+    }
+}
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp
new file mode 100644 (file)
index 0000000..31dffce
--- /dev/null
@@ -0,0 +1,255 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXERTL_ITERATOR_TOKENISER_MARCH_22_2007_0859AM)
+#define BOOST_SPIRIT_LEXERTL_ITERATOR_TOKENISER_MARCH_22_2007_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/detail/iterator.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/detail/lexer/size_t.hpp>
+#include <boost/spirit/home/support/detail/lexer/char_traits.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Iterator>
+    class basic_iterator_tokeniser
+    {
+    public:
+        typedef std::vector<std::size_t> size_t_vector;
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+
+        static std::size_t next (
+            boost::lexer::basic_state_machine<char_type> const& state_machine_
+          , std::size_t &dfa_state_, bool& bol_, Iterator &start_token_
+          , Iterator const& end_, std::size_t& unique_id_)
+        {
+            if (start_token_ == end_) 
+            {
+                unique_id_ = boost::lexer::npos;
+                return 0;
+            }
+
+            bool bol = bol_;
+            boost::lexer::detail::internals const& internals_ =
+                state_machine_.data();
+
+        again:
+            std::size_t const* lookup_ = &internals_._lookup[dfa_state_]->
+                front ();
+            std::size_t dfa_alphabet_ = internals_._dfa_alphabet[dfa_state_];
+            std::size_t const* dfa_ = &internals_._dfa[dfa_state_]->front ();
+
+            std::size_t const* ptr_ = dfa_ + dfa_alphabet_;
+            Iterator curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + boost::lexer::id_index);
+            std::size_t uid_ = *(ptr_ + boost::lexer::unique_id_index);
+            std::size_t end_start_state_ = dfa_state_;
+            bool end_bol_ = bol_;
+            Iterator end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                std::size_t const BOL_state_ = ptr_[boost::lexer::bol_index];
+                std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+                if (BOL_state_ && bol)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    value_type;
+                    typedef typename 
+                        boost::lexer::char_traits<value_type>::index_type 
+                    index_type;
+
+                    index_type index = 
+                        boost::lexer::char_traits<value_type>::call(*curr_++);
+                    bol = (index == '\n') ? true : false;
+                    std::size_t const state_ = ptr_[
+                        lookup_[static_cast<std::size_t>(index)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_start_state_ = *(ptr_ + boost::lexer::state_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_start_state_ = *(ptr_ + boost::lexer::state_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_) {
+                // return longest match
+                dfa_state_ = end_start_state_;
+                start_token_ = end_token_;
+
+                if (id_ == 0)
+                {
+                    bol = end_bol_;
+                    goto again;
+                }
+                else
+                {
+                    bol_ = end_bol_;
+                }
+            }
+            else {
+                bol_ = (*start_token_ == '\n') ? true : false;
+                id_ = boost::lexer::npos;
+                uid_ = boost::lexer::npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        static std::size_t next (
+            boost::lexer::basic_state_machine<char_type> const& state_machine_
+          , bool& bol_, Iterator &start_token_, Iterator const& end_
+          , std::size_t& unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = boost::lexer::npos;
+                return 0;
+            }
+
+            bool bol = bol_;
+            std::size_t const* lookup_ = &state_machine_.data()._lookup[0]->front();
+            std::size_t dfa_alphabet_ = state_machine_.data()._dfa_alphabet[0];
+            std::size_t const* dfa_ = &state_machine_.data()._dfa[0]->front ();
+            std::size_t const* ptr_ = dfa_ + dfa_alphabet_;
+
+            Iterator curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + boost::lexer::id_index);
+            std::size_t uid_ = *(ptr_ + boost::lexer::unique_id_index);
+            bool end_bol_ = bol_;
+            Iterator end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                std::size_t const BOL_state_ = ptr_[boost::lexer::bol_index];
+                std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+                if (BOL_state_ && bol)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typedef typename 
+                        boost::detail::iterator_traits<Iterator>::value_type 
+                    value_type;
+                    typedef typename 
+                        boost::lexer::char_traits<value_type>::index_type 
+                    index_type;
+
+                    index_type index = 
+                        boost::lexer::char_traits<value_type>::call(*curr_++);
+                    bol = (index == '\n') ? true : false;
+                    std::size_t const state_ = ptr_[
+                        lookup_[static_cast<std::size_t>(index)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            std::size_t const EOL_state_ = ptr_[boost::lexer::eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + boost::lexer::id_index);
+                    uid_ = *(ptr_ + boost::lexer::unique_id_index);
+                    end_bol_ = bol;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_) {
+                // return longest match
+                bol_ = end_bol_;
+                start_token_ = end_token_;
+            }
+            else {
+                bol_ = *start_token_ == '\n';
+                id_ = boost::lexer::npos;
+                uid_ = boost::lexer::npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/lexer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
new file mode 100644 (file)
index 0000000..0f8af55
--- /dev/null
@@ -0,0 +1,399 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_MAR_17_2007_0139PM)
+#define BOOST_SPIRIT_LEX_LEXER_MAR_17_2007_0139PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <iosfwd>
+
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+#include <boost/spirit/home/lex/lexer/lexertl/token.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/functor.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/functor_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator.hpp>
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+#include <boost/spirit/home/support/detail/lexer/debug.hpp>
+#endif
+
+#include <boost/foreach.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  The must_escape function checks if the given character value needs
+        //  to be preceded by a backslash character to disable its special
+        //  meaning in the context of a regular expression
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Char>
+        inline bool must_escape(Char c)
+        {
+            // FIXME: more needed?
+            switch (c) {
+            case '+': case '/': case '*': case '?':
+            case '|':
+            case '(': case ')':
+            case '[': case ']':
+            case '{': case '}':
+            case '.':
+            case '^': case '$':
+            case '\\':
+            case '"':
+                return true;
+
+            default:
+                break;
+            }
+            return false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The escape function returns the string representation of the given
+        //  character value, possibly escaped with a backslash character, to
+        //  allow it being safely used in a regular expression definition.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Char>
+        inline std::basic_string<Char> escape(Char ch)
+        {
+            std::basic_string<Char> result(1, ch);
+            if (detail::must_escape(ch))
+            {
+                typedef typename std::basic_string<Char>::size_type size_type;
+                result.insert((size_type)0, 1, '\\');
+            }
+            return result;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //
+        ///////////////////////////////////////////////////////////////////////
+        inline boost::lexer::regex_flags map_flags(unsigned int flags)
+        {
+            unsigned int retval = boost::lexer::none;
+            if (flags & match_flags::match_not_dot_newline)
+                retval |= boost::lexer::dot_not_newline;
+            if (flags & match_flags::match_icase)
+                retval |= boost::lexer::icase;
+
+            return boost::lexer::regex_flags(retval);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Lexer, typename F>
+    bool generate_static(Lexer const&
+      , std::basic_ostream<typename Lexer::char_type>&
+      , typename Lexer::char_type const*, F);
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Every lexer type to be used as a lexer for Spirit has to conform to
+    //  the following public interface:
+    //
+    //    typedefs:
+    //        iterator_type   The type of the iterator exposed by this lexer.
+    //        token_type      The type of the tokens returned from the exposed
+    //                        iterators.
+    //
+    //    functions:
+    //        default constructor
+    //                        Since lexers are instantiated as base classes
+    //                        only it might be a good idea to make this
+    //                        constructor protected.
+    //        begin, end      Return a pair of iterators, when dereferenced
+    //                        returning the sequence of tokens recognized in
+    //                        the input stream given as the parameters to the
+    //                        begin() function.
+    //        add_token       Should add the definition of a token to be
+    //                        recognized by this lexer.
+    //        clear           Should delete all current token definitions
+    //                        associated with the given state of this lexer
+    //                        object.
+    //
+    //    template parameters:
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        Token           The type of the tokens to be returned from the
+    //                        exposed token iterator.
+    //        Functor         The type of the InputPolicy to use to instantiate
+    //                        the multi_pass iterator type to be used as the
+    //                        token iterator (returned from begin()/end()).
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The lexer class is a implementation of a Spirit.Lex lexer on
+    //  top of Ben Hanson's lexertl library as outlined above (For more
+    //  information about lexertl go here: http://www.benhanson.net/lexertl.html).
+    //
+    //  This class is supposed to be used as the first and only template
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor = functor<Token, lexertl::detail::data, Iterator> >
+    class lexer
+    {
+    private:
+        struct dummy { void true_() {} };
+        typedef void (dummy::*safe_bool)();
+
+        static std::size_t const all_states_id = static_cast<std::size_t>(-2);
+
+    public:
+        operator safe_bool() const
+            { return initialized_dfa_ ? &dummy::true_ : 0; }
+
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type
+            char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        typedef boost::lexer::basic_rules<char_type> basic_rules_type;
+
+        //  Every lexer type to be used as a lexer for Spirit has to conform to
+        //  a public interface .
+        typedef Token token_type;
+        typedef typename Token::id_type id_type;
+        typedef iterator<Functor> iterator_type;
+
+    private:
+        // this type is purely used for the iterator_type construction below
+        struct iterator_data_type
+        {
+            typedef typename Functor::semantic_actions_type semantic_actions_type;
+
+            iterator_data_type(
+                    boost::lexer::basic_state_machine<char_type> const& sm
+                  , boost::lexer::basic_rules<char_type> const& rules
+                  , semantic_actions_type const& actions)
+              : state_machine_(sm), rules_(rules), actions_(actions)
+            {}
+
+            boost::lexer::basic_state_machine<char_type> const& state_machine_;
+            boost::lexer::basic_rules<char_type> const& rules_;
+            semantic_actions_type const& actions_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            iterator_data_type& operator= (iterator_data_type const&);
+        };
+
+    public:
+        //  Return the start iterator usable for iterating over the generated
+        //  tokens.
+        iterator_type begin(Iterator& first, Iterator const& last
+          , char_type const* initial_state = 0) const
+        {
+            if (!init_dfa())    // never minimize DFA for dynamic lexers
+                return iterator_type();
+
+            iterator_data_type iterator_data(state_machine_, rules_, actions_);
+            return iterator_type(iterator_data, first, last, initial_state);
+        }
+
+        //  Return the end iterator usable to stop iterating over the generated
+        //  tokens.
+        iterator_type end() const
+        {
+            return iterator_type();
+        }
+
+    protected:
+        //  Lexer instances can be created by means of a derived class only.
+        lexer(unsigned int flags)
+          : flags_(detail::map_flags(flags))
+          , rules_(flags_)
+          , initialized_dfa_(false)
+        {}
+
+    public:
+        // interface for token definition management
+        std::size_t add_token(char_type const* state, char_type tokendef,
+            std::size_t token_id, char_type const* targetstate)
+        {
+            add_state(state);
+            initialized_dfa_ = false;
+            if (state == all_states())
+                return rules_.add(state, detail::escape(tokendef), token_id, rules_.dot());
+
+            if (0 == targetstate)
+                targetstate = state;
+            else
+                add_state(targetstate);
+            return rules_.add(state, detail::escape(tokendef), token_id, targetstate);
+        }
+        std::size_t add_token(char_type const* state, string_type const& tokendef,
+            std::size_t token_id, char_type const* targetstate)
+        {
+            add_state(state);
+            initialized_dfa_ = false;
+            if (state == all_states())
+                return rules_.add(state, tokendef, token_id, rules_.dot());
+
+            if (0 == targetstate)
+                targetstate = state;
+            else
+                add_state(targetstate);
+            return rules_.add(state, tokendef, token_id, targetstate);
+        }
+
+        // interface for pattern definition management
+        void add_pattern (char_type const* state, string_type const& name,
+            string_type const& patterndef)
+        {
+            add_state(state);
+            rules_.add_macro(name.c_str(), patterndef);
+            initialized_dfa_ = false;
+        }
+
+        boost::lexer::rules const& get_rules() const { return rules_; }
+
+        void clear(char_type const* state)
+        {
+            std::size_t s = rules_.state(state);
+            if (boost::lexer::npos != s)
+                rules_.clear(state);
+            initialized_dfa_ = false;
+        }
+        std::size_t add_state(char_type const* state)
+        {
+            if (state == all_states())
+                return all_states_id;
+
+            std::size_t stateid = rules_.state(state);
+            if (boost::lexer::npos == stateid) {
+                stateid = rules_.add_state(state);
+                initialized_dfa_ = false;
+            }
+            return stateid;
+        }
+        string_type initial_state() const
+        {
+            return string_type(rules_.initial());
+        }
+        string_type all_states() const
+        {
+            return string_type(rules_.all_states());
+        }
+
+        //  Register a semantic action with the given id
+        template <typename F>
+        void add_action(std::size_t unique_id, std::size_t state, F act)
+        {
+            // If you see an error here stating add_action is not a member of
+            // fusion::unused_type then you are probably having semantic actions
+            // attached to at least one token in the lexer definition without
+            // using the lex::lexertl::actor_lexer<> as its base class.
+            typedef typename Functor::wrap_action_type wrapper_type;
+            if (state == all_states_id) {
+                // add the action to all known states
+                typedef typename
+                    basic_rules_type::string_size_t_map::value_type
+                state_type;
+
+                std::size_t states = rules_.statemap().size();
+                BOOST_FOREACH(state_type const& s, rules_.statemap()) {
+                    for (std::size_t j = 0; j < states; ++j)
+                        actions_.add_action(unique_id + j, s.second, wrapper_type::call(act));
+                }
+            }
+            else {
+                actions_.add_action(unique_id, state, wrapper_type::call(act));
+            }
+        }
+//         template <typename F>
+//         void add_action(std::size_t unique_id, char_type const* state, F act)
+//         {
+//             typedef typename Functor::wrap_action_type wrapper_type;
+//             actions_.add_action(unique_id, add_state(state), wrapper_type::call(act));
+//         }
+
+        // We do not minimize the state machine by default anymore because
+        // Ben said: "If you can afford to generate a lexer at runtime, there
+        //            is little point in calling minimise."
+        // Go figure.
+        bool init_dfa(bool minimize = false) const
+        {
+            if (!initialized_dfa_) {
+                state_machine_.clear();
+                typedef boost::lexer::basic_generator<char_type> generator;
+                generator::build (rules_, state_machine_);
+                if (minimize)
+                    generator::minimise (state_machine_);
+
+#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
+                boost::lexer::debug::dump(state_machine_, std::cerr);
+#endif
+                initialized_dfa_ = true;
+
+//                 // release memory held by rules description
+//                 basic_rules_type rules;
+//                 rules.init_state_info(rules_);        // preserve states
+//                 std::swap(rules, rules_);
+            }
+            return true;
+        }
+
+    private:
+        // lexertl specific data
+        mutable boost::lexer::basic_state_machine<char_type> state_machine_;
+        boost::lexer::regex_flags flags_;
+        /*mutable*/ basic_rules_type rules_;
+
+        typename Functor::semantic_actions_type actions_;
+        mutable bool initialized_dfa_;
+
+        // generator functions must be able to access members directly
+        template <typename Lexer, typename F>
+        friend bool generate_static(Lexer const&
+          , std::basic_ostream<typename Lexer::char_type>&
+          , typename Lexer::char_type const*, F);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The actor_lexer class is another implementation of a Spirit.Lex
+    //  lexer on top of Ben Hanson's lexertl library as outlined above (For
+    //  more information about lexertl go here:
+    //  http://www.benhanson.net/lexertl.html).
+    //
+    //  The only difference to the lexer class above is that token_def
+    //  definitions may have semantic (lexer) actions attached while being
+    //  defined:
+    //
+    //      int w;
+    //      token_def word = "[^ \t\n]+";
+    //      self = word[++ref(w)];        // see example: word_count_lexer
+    //
+    //  This class is supposed to be used as the first and only template
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor = functor<Token, lexertl::detail::data, Iterator, mpl::true_> >
+    class actor_lexer : public lexer<Token, Iterator, Functor>
+    {
+    protected:
+        //  Lexer instances can be created by means of a derived class only.
+        actor_lexer(unsigned int flags)
+          : lexer<Token, Iterator, Functor>(flags) {}
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/position_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/position_token.hpp
new file mode 100644 (file)
index 0000000..7bf13db
--- /dev/null
@@ -0,0 +1,930 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_POSITION_TOKEN_MAY_13_2011_0846PM)
+#define BOOST_SPIRIT_LEX_POSITION_TOKEN_MAY_13_2011_0846PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/utree/utree_traits_fwd.hpp>
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/variant.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/static_assert.hpp>
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <iosfwd>
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The position_token is the type of the objects returned by the 
+    //  iterator if it has been specified while instantiating the lexer object.
+    //
+    //    template parameters:
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        AttributeTypes  A mpl sequence containing the types of all 
+    //                        required different token values to be supported 
+    //                        by this token type.
+    //        HasState        A mpl::bool_ indicating, whether this token type
+    //                        should support lexer states.
+    //        Idtype          The type to use for the token id (defaults to 
+    //                        std::size_t).
+    //
+    //  It is possible to use other token types with the spirit::lex 
+    //  framework as well. If you plan to use a different type as your token 
+    //  type, you'll need to expose the following things from your token type 
+    //  to make it compatible with spirit::lex:
+    //
+    //    typedefs
+    //        iterator_type   The type of the iterator used to access the
+    //                        underlying character stream.
+    //
+    //        id_type         The type of the token id used.
+    //
+    //    methods
+    //        default constructor
+    //                        This should initialize the token as an end of 
+    //                        input token.
+    //        constructors    The prototype of the other required 
+    //                        constructors should be:
+    //
+    //              token(int)
+    //                        This constructor should initialize the token as 
+    //                        an invalid token (not carrying any specific 
+    //                        values)
+    //
+    //              where:  the int is used as a tag only and its value is 
+    //                      ignored
+    //
+    //                        and:
+    //
+    //              token(Idtype id, std::size_t state, 
+    //                    iterator_type first, iterator_type last);
+    //
+    //              where:  id:           token id
+    //                      state:        lexer state this token was matched in
+    //                      first, last:  pair of iterators marking the matched 
+    //                                    range in the underlying input stream 
+    //
+    //        accessors
+    //              id()      return the token id of the matched input sequence
+    //              id(newid) set the token id of the token instance
+    //
+    //              state()   return the lexer state this token was matched in
+    //
+    //              value()   return the token value
+    //
+    //  Additionally, you will have to implement a couple of helper functions
+    //  in the same namespace as the token type: a comparison operator==() to 
+    //  compare your token instances, a token_is_valid() function and different 
+    //  specializations of the Spirit customization point 
+    //  assign_to_attribute_from_value as shown below.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator = char const*
+      , typename AttributeTypes = mpl::vector0<>
+      , typename HasState = mpl::true_
+      , typename Idtype = std::size_t> 
+    struct position_token;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data and
+    //  doesn't support working with lexer states. Although, like all other
+    //  variants of position_token, it carries a pair of iterators marking the
+    //  begin and the end of the matched character sequence.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct position_token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+        typedef Iterator iterator_type;
+        typedef iterator_range<iterator_type> iterpair_type;
+        typedef mpl::false_ has_state;
+        typedef Idtype id_type;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() 
+          : id_(id_type(boost::lexer::npos)) {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : id_(id_type(0)) {}
+
+        position_token(id_type id, std::size_t) 
+          : id_(id) {}
+
+        position_token(id_type id, std::size_t, token_value_type)
+          : id_(id) {}
+
+        position_token(id_type id, std::size_t, Iterator const& first
+              , Iterator const& last)
+          : id_(id), matched_(first, last) {}
+
+        //  this default conversion operator is needed to allow the direct 
+        //  usage of tokens in conjunction with the primitive parsers defined 
+        //  in Qi
+        operator id_type() const { return id_; }
+
+        //  Retrieve or set the token id of this token instance. 
+        id_type id() const { return id_; }
+        void id(id_type newid) { id_ = newid; }
+
+        std::size_t state() const { return 0; }   // always '0' (INITIAL state)
+
+        bool is_valid() const 
+        { 
+            return 0 != id_ && id_type(boost::lexer::npos) != id_; 
+        }
+
+        // access the stored iterator range of the matched input sequence
+        iterator_type begin() const { return matched_.begin(); }
+        iterator_type end() const { return matched_.end(); }
+
+        iterpair_type& matched() { return matched_; }
+        iterpair_type const& matched() const { return matched_; }
+
+        token_value_type& value() { static token_value_type u; return u; }
+        token_value_type const& value() const { return unused; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        position_token& operator= (position_token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                id_ = rhs.id_;
+                if (is_valid()) 
+                    matched_ = rhs.matched_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        id_type id_;              // token id, 0 if nothing has been matched
+        iterpair_type matched_;   // matched input sequence
+    };
+
+#if defined(BOOST_SPIRIT_DEBUG)
+    template <typename Char, typename Traits, typename Iterator
+      , typename AttributeTypes, typename HasState, typename Idtype> 
+    inline std::basic_ostream<Char, Traits>& 
+    operator<< (std::basic_ostream<Char, Traits>& os
+      , position_token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        if (t.is_valid()) {
+            Iterator end = t.end();
+            for (Iterator it = t.begin(); it != end; ++it)
+                os << *it;
+        }
+        else {
+            os << "<invalid token>";
+        }
+        return os;
+    }
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data but
+    //  supports working with lexer states.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct position_token<Iterator, lex::omit, mpl::true_, Idtype>
+      : position_token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+    private:
+        typedef position_token<Iterator, lex::omit, mpl::false_, Idtype> 
+            base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef Iterator iterator_type;
+        typedef mpl::true_ has_state;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() : state_(boost::lexer::npos) {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : base_type(0), state_(boost::lexer::npos) {}
+
+        position_token(id_type id, std::size_t state)
+          : base_type(id, boost::lexer::npos), state_(state) {}
+
+        position_token(id_type id, std::size_t state, token_value_type)
+          : base_type(id, boost::lexer::npos, unused)
+          , state_(state) {}
+
+        position_token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, boost::lexer::npos, first, last)
+          , state_(state) {}
+
+        std::size_t state() const { return state_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        position_token& operator= (position_token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                state_ = rhs.state_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        std::size_t state_;      // lexer state this token was matched in
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // These specializations for an empty attribute list cause all token 
+    // instances to expose as it attribute the iterator_range pointing to the
+    // matched input sequence.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename HasState, typename Idtype>
+    struct position_token<Iterator, mpl::vector<>, HasState, Idtype>
+      : position_token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private:
+        typedef position_token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename base_type::iterator_type iterator_type;
+        typedef typename base_type::iterpair_type iterpair_type;
+        typedef HasState has_state;
+        typedef iterpair_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : base_type(0) {}
+
+        position_token(id_type id, std::size_t state)
+          : base_type(id, state) {}
+
+        position_token(id_type id, std::size_t state, token_value_type)
+          : base_type(id, state, unused) {}
+
+        position_token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, state, first, last) {}
+
+        token_value_type& value() { return this->base_type::matched(); }
+        token_value_type const& value() const { return this->base_type::matched(); }
+    };
+
+    template <typename Iterator, typename HasState, typename Idtype>
+    struct position_token<Iterator, mpl::vector0<>, HasState, Idtype>
+      : position_token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private:
+        typedef position_token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename base_type::iterator_type iterator_type;
+        typedef typename base_type::iterpair_type iterpair_type;
+        typedef HasState has_state;
+        typedef iterpair_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : base_type(0) {}
+
+        position_token(id_type id, std::size_t state)
+          : base_type(id, state) {}
+
+        position_token(id_type id, std::size_t state, token_value_type)
+          : base_type(id, state, unused) {}
+
+        position_token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, state, first, last) {}
+
+        token_value_type& value() { return this->base_type::matched(); }
+        token_value_type const& value() const { return this->base_type::matched(); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // These specializations for an attribute list of length one cause all token 
+    // instances to expose the specified type as its attribute.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Attribute, typename HasState
+      , typename Idtype>
+    struct position_token<Iterator, mpl::vector<Attribute>, HasState, Idtype>
+      : position_token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private:
+        typedef position_token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename base_type::iterator_type iterator_type;
+        typedef typename base_type::iterpair_type iterpair_type;
+        typedef HasState has_state;
+        typedef boost::optional<Attribute> token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : base_type(0) {}
+
+        position_token(id_type id, std::size_t state)
+          : base_type(id, state) {}
+
+        position_token(id_type id, std::size_t state, token_value_type const& v)
+          : base_type(id, state, unused), value_(v) {}
+
+        position_token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, state, first, last) {}
+
+        token_value_type& value() { return value_; }
+        token_value_type const& value() const { return value_; }
+
+        bool has_value() const { return !!value_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        position_token& operator= (position_token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                if (this->is_valid()) 
+                    value_ = rhs.value_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        token_value_type value_; // token value
+    };
+
+    template <typename Iterator, typename Attribute, typename HasState
+      , typename Idtype>
+    struct position_token<Iterator, mpl::vector1<Attribute>, HasState, Idtype>
+      : position_token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private:
+        typedef position_token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename base_type::iterator_type iterator_type;
+        typedef typename base_type::iterpair_type iterpair_type;
+        typedef HasState has_state;
+        typedef boost::optional<Attribute> token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() {}
+
+        //  construct an invalid token
+        explicit position_token(int) 
+          : base_type(0) {}
+
+        position_token(id_type id, std::size_t state)
+          : base_type(id, state) {}
+
+        position_token(id_type id, std::size_t state, token_value_type const& v)
+          : base_type(id, state, unused), value_(v) {}
+
+        position_token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, state, first, last) {}
+
+        token_value_type& value() { return value_; }
+        token_value_type const& value() const { return value_; }
+
+        bool has_value() const { return value_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        position_token& operator= (position_token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                if (this->is_valid()) 
+                    value_ = rhs.value_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        token_value_type value_; // token value
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The generic version of the position_token type derives from the 
+    //  specialization above and adds a single data member holding the item 
+    //  data carried by the token instance.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  Meta-function to calculate the type of the variant data item to be 
+        //  stored with each token instance.
+        //
+        //  Note: The iterator pair needs to be the first type in the list of 
+        //        types supported by the generated variant type (this is being 
+        //        used to identify whether the stored data item in a particular 
+        //        token instance needs to be converted from the pair of 
+        //        iterators (see the first of the assign_to_attribute_from_value 
+        //        specializations below).
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct position_token_value_typesequence
+        {
+            typedef typename mpl::insert<
+                AttributeTypes
+              , typename mpl::begin<AttributeTypes>::type
+              , IteratorPair
+            >::type sequence_type;
+            typedef typename make_variant_over<sequence_type>::type type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The type of the data item stored with a token instance is defined 
+        //  by the template parameter 'AttributeTypes' and may be:
+        //  
+        //     lex::omit:         no data item is stored with the token 
+        //                        instance (this is handled by the 
+        //                        specializations of the token class
+        //                        below)
+        //     mpl::vector0<>:    each token instance stores a pair of 
+        //                        iterators pointing to the matched input 
+        //                        sequence
+        //     mpl::vector<...>:  each token instance stores a variant being 
+        //                        able to store the pair of iterators pointing 
+        //                        to the matched input sequence, or any of the 
+        //                        types a specified in the mpl::vector<>
+        //
+        //  All this is done to ensure the token type is as small (in terms 
+        //  of its byte-size) as possible.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct position_token_value
+          : mpl::eval_if<
+                mpl::or_<
+                    is_same<AttributeTypes, mpl::vector0<> >
+                  , is_same<AttributeTypes, mpl::vector<> > >
+              , mpl::identity<IteratorPair>
+              , position_token_value_typesequence<IteratorPair, AttributeTypes> >
+        {};
+    }
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    struct position_token 
+      : position_token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private: // precondition assertions
+        BOOST_STATIC_ASSERT((mpl::is_sequence<AttributeTypes>::value || 
+                            is_same<AttributeTypes, lex::omit>::value));
+        typedef position_token<Iterator, lex::omit, HasState, Idtype> 
+            base_type;
+
+    protected: 
+        //  If no additional token value types are given, the token will 
+        //  hold no token value at all as the base class already has the 
+        //  iterator pair of the matched range in the underlying input sequence. 
+        //  Otherwise the token value is stored as a variant and will 
+        //  initially hold an unused_type but is able to hold any of 
+        //  the given data types as well. The conversion from the iterator pair 
+        //  to the required data type is done when it is accessed for the first 
+        //  time.
+        typedef iterator_range<Iterator> iterpair_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename detail::position_token_value<
+            iterpair_type, AttributeTypes>::type token_value_type;
+
+        typedef Iterator iterator_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        position_token() {}
+
+        //  construct an invalid token
+        explicit position_token(int)
+          : base_type(0) {}
+
+        position_token(id_type id, std::size_t state, token_value_type const& value)
+          : base_type(id, state, value), value_(value) {}
+
+        position_token(id_type id, std::size_t state, Iterator const& first
+              , Iterator const& last)
+          : base_type(id, state, first, last)
+          , value_(iterpair_type(first, last)) 
+        {}
+
+        token_value_type& value() { return value_; }
+        token_value_type const& value() const { return value_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        position_token& operator= (position_token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                if (this->is_valid()) 
+                    value_ = rhs.value_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        token_value_type value_; // token value, by default a pair of iterators
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  tokens are considered equal, if their id's match (these are unique)
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    operator== (position_token<Iterator, AttributeTypes, HasState, Idtype> const& lhs, 
+                position_token<Iterator, AttributeTypes, HasState, Idtype> const& rhs)
+    {
+        return lhs.id() == rhs.id();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This overload is needed by the multi_pass/functor_input_policy to 
+    //  validate a token instance. It has to be defined in the same namespace 
+    //  as the token class itself to allow ADL to find it.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    token_is_valid(position_token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        return t.is_valid();
+    }
+}}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We have to provide specializations for the customization point
+    //  assign_to_attribute_from_value allowing to extract the needed value 
+    //  from the token. 
+    ///////////////////////////////////////////////////////////////////////////
+
+    //  This is called from the parse function of token_def if the token_def
+    //  has been defined to carry a special attribute type
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<
+                Iterator, AttributeTypes, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+        //  The goal of this function is to avoid the conversion of the pair of
+        //  iterators (to the matched character sequence) into the token value 
+        //  of the required type being done more than once. For this purpose it 
+        //  checks whether the stored value type is still the default one (pair 
+        //  of iterators) and if yes, replaces the pair of iterators with the 
+        //  converted value to be returned from subsequent calls.
+
+            if (0 == t.value().which()) {
+            //  first access to the token value
+                typedef iterator_range<Iterator> iterpair_type;
+                iterpair_type const& ip = t.matched();
+
+            // Interestingly enough we use the assign_to() framework defined in 
+            // Spirit.Qi allowing to convert the pair of iterators to almost any 
+            // required type (assign_to(), if available, uses the standard Spirit 
+            // parsers to do the conversion).
+                spirit::traits::assign_to(ip.begin(), ip.end(), attr);
+
+            //  If you get an error during the compilation of the following 
+            //  assignment expression, you probably forgot to list one or more 
+            //  types used as token value types (in your token_def<...> 
+            //  definitions) in your definition of the token class. I.e. any token 
+            //  value type used for a token_def<...> definition has to be listed 
+            //  during the declaration of the token type to use. For instance let's 
+            //  assume we have two token_def's:
+            //
+            //      token_def<int> number; number = "...";
+            //      token_def<std::string> identifier; identifier = "...";
+            //
+            //  Then you'll have to use the following token type definition 
+            //  (assuming you are using the token class):
+            //
+            //      typedef mpl::vector<int, std::string> token_values;
+            //      typedef token<base_iter_type, token_values> token_type;
+            //
+            //  where: base_iter_type is the iterator type used to expose the 
+            //         underlying input stream.
+            //
+            //  This token_type has to be used as the second template parameter 
+            //  to the lexer class:
+            //
+            //      typedef lexer<base_iter_type, token_type> lexer_type;
+            //
+            //  again, assuming you're using the lexer<> template for your 
+            //  tokenization.
+
+                typedef lex::lexertl::position_token<
+                    Iterator, AttributeTypes, HasState, Idtype> token_type;
+                spirit::traits::assign_to(
+                    attr, const_cast<token_type&>(t).value());   // re-assign value
+            }
+            else {
+            // reuse the already assigned value
+                spirit::traits::assign_to(get<Attribute>(t.value()), attr);
+            }
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  These are called from the parse function of token_def if the token type
+    //  has no special attribute type assigned 
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, mpl::vector0<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<
+                Iterator, mpl::vector0<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.begin(), t.end(), attr);
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename HasState
+//       , typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector0<>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector0<>, HasState, Idtype> >
+//     {};
+
+    // same as above but using mpl::vector<> instead of mpl::vector0<>
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, mpl::vector<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<
+                Iterator, mpl::vector<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.begin(), t.end(), attr);
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename HasState
+//       , typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector<>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector<>, HasState, Idtype> >
+//     {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  These are called from the parse function of token_def if the token type
+    //  has no special attribute type assigned 
+    template <typename Attribute, typename Iterator, typename Attr
+      , typename HasState, typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, mpl::vector1<Attr>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<
+                Iterator, mpl::vector1<Attr>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+        //  The goal of this function is to avoid the conversion of the pair of
+        //  iterators (to the matched character sequence) into the token value 
+        //  of the required type being done more than once.
+
+            if (!t.has_value()) {
+            //  first access to the token value
+                typedef iterator_range<Iterator> iterpair_type;
+                iterpair_type const& ip = t.matched();
+
+            // Interestingly enough we use the assign_to() framework defined in 
+            // Spirit.Qi allowing to convert the pair of iterators to almost any 
+            // required type (assign_to(), if available, uses the standard Spirit 
+            // parsers to do the conversion).
+                spirit::traits::assign_to(ip.begin(), ip.end(), attr);
+
+            // Re-assign the attribute to the stored value
+                typedef lex::lexertl::position_token<
+                    Iterator, mpl::vector1<Attr>, HasState, Idtype> token_type;
+                spirit::traits::assign_to(
+                    attr, const_cast<token_type&>(t).value());
+            }
+            else {
+            // reuse the already assigned value
+                spirit::traits::assign_to(t.value(), attr);
+            }
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename Attr
+//       , typename HasState, typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector1<Attr>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector1<Attr>, HasState, Idtype> >
+//     {};
+
+    // same as above but using mpl::vector<Attr> instead of mpl::vector1<Attr>
+    template <typename Attribute, typename Iterator, typename Attr
+      , typename HasState, typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, mpl::vector<Attr>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<
+                Iterator, mpl::vector<Attr>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+        //  The goal of this function is to avoid the conversion of the pair of
+        //  iterators (to the matched character sequence) into the token value 
+        //  of the required type being done more than once.
+
+            if (!t.has_value()) {
+            //  first access to the token value
+                typedef iterator_range<Iterator> iterpair_type;
+                iterpair_type const& ip = t.matched();
+
+            // Interestingly enough we use the assign_to() framework defined in 
+            // Spirit.Qi allowing to convert the pair of iterators to almost any 
+            // required type (assign_to(), if available, uses the standard Spirit 
+            // parsers to do the conversion).
+                spirit::traits::assign_to(ip.begin(), ip.end(), attr);
+
+            // Re-assign the attribute to the stored value
+                typedef lex::lexertl::position_token<
+                    Iterator, mpl::vector<Attr>, HasState, Idtype> token_type;
+                spirit::traits::assign_to(
+                    attr, const_cast<token_type&>(t).value());
+            }
+            else {
+            // reuse the already assigned value
+                spirit::traits::assign_to(t.value(), attr);
+            }
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename Attr
+//       , typename HasState, typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector<Attr>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::position_token<Iterator, mpl::vector<Attr>, HasState, Idtype> >
+//     {};
+
+    //  This is called from the parse function of token_def if the token type
+    //  has been explicitly omitted (i.e. no attribute value is used), which
+    //  essentially means that every attribute gets initialized using default 
+    //  constructed values.
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::position_token<Iterator, lex::omit, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<Iterator, lex::omit, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            // do nothing
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::position_token<Iterator, lex::omit, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::position_token<Iterator, lex::omit, HasState, Idtype> >
+    {};
+
+    //  This is called from the parse function of lexer_def_
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_attribute_from_value<
+        fusion::vector2<Idtype_, iterator_range<Iterator> >
+      , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> const& t
+          , fusion::vector2<Idtype_, iterator_range<Iterator> >& attr)
+        {
+            //  The type returned by the lexer_def_ parser components is a 
+            //  fusion::vector containing the token id of the matched token 
+            //  and the pair of iterators to the matched character sequence.
+            typedef iterator_range<Iterator> iterpair_type;
+            typedef fusion::vector2<Idtype_, iterator_range<Iterator> > 
+                attribute_type;
+
+            iterpair_type const& ip = t.matched();
+            attr = attribute_type(t.id(), ip);
+        }
+    };
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_container_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::position_token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Overload debug output for a single token, this integrates lexer tokens 
+    // with Qi's simple_trace debug facilities
+    template <typename Iterator, typename Attribute, typename HasState
+      , typename Idtype>
+    struct token_printer_debug<
+        lex::lexertl::position_token<Iterator, Attribute, HasState, Idtype> >
+    {
+        typedef lex::lexertl::position_token<Iterator, Attribute, HasState, Idtype> token_type;
+
+        template <typename Out>
+        static void print(Out& out, token_type const& val) 
+        {
+            out << '[';
+            spirit::traits::print_token(out, val.value());
+            out << ']';
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp
new file mode 100644 (file)
index 0000000..30748c5
--- /dev/null
@@ -0,0 +1,121 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_SEMANTIC_ACTION_DATA_JUN_10_2009_0417PM)
+#define BOOST_SPIRIT_LEX_LEXER_SEMANTIC_ACTION_DATA_JUN_10_2009_0417PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/function.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename SupportsState, typename Data>
+        struct semantic_actions;
+
+        // This specialization of semantic_actions will be used if the token
+        // type (lexer definition) does not support states, which simplifies 
+        // the data structures used to store the semantic action function 
+        // objects.
+        template <typename Iterator, typename Data>
+        struct semantic_actions<Iterator, mpl::false_, Data>
+        {
+            typedef void functor_type(Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, std::size_t&, Data&);
+            typedef boost::function<functor_type> functor_wrapper_type;
+
+            // add a semantic action function object
+            template <typename F>
+            void add_action(std::size_t unique_id, std::size_t, F act) 
+            {
+                if (actions_.size() <= unique_id)
+                    actions_.resize(unique_id + 1); 
+
+                actions_[unique_id] = act;
+            }
+
+            // try to invoke a semantic action for the given token (unique_id)
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t /*state*/
+              , std::size_t& id, std::size_t unique_id, Iterator& end
+              , Data& data) const
+            {
+                // if there is nothing to invoke, continue with 'match'
+                if (unique_id >= actions_.size() || !actions_[unique_id]) 
+                    return pass_flags::pass_normal;
+
+                // Note: all arguments might be changed by the invoked semantic 
+                //       action
+                BOOST_SCOPED_ENUM(pass_flags) match = pass_flags::pass_normal;
+                actions_[unique_id](data.get_first(), end, match, id, data);
+                return match;
+            }
+
+            std::vector<functor_wrapper_type> actions_;
+        }; 
+
+        // This specialization of semantic_actions will be used if the token
+        // type (lexer definition) needs to support states, resulting in a more
+        // complex data structure needed for storing the semantic action 
+        // function objects.
+        template <typename Iterator, typename Data>
+        struct semantic_actions<Iterator, mpl::true_, Data>
+        {
+            typedef void functor_type(Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, std::size_t&, Data&);
+            typedef boost::function<functor_type> functor_wrapper_type;
+
+            // add a semantic action function object
+            template <typename F>
+            void add_action(std::size_t unique_id, std::size_t state, F act) 
+            {
+                if (actions_.size() <= state)
+                    actions_.resize(state + 1); 
+
+                std::vector<functor_wrapper_type>& actions (actions_[state]);
+                if (actions.size() <= unique_id)
+                    actions.resize(unique_id + 1); 
+
+                actions[unique_id] = act;
+            }
+
+            // try to invoke a semantic action for the given token (unique_id)
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end
+              , Data& data) const
+            {
+                // if there is no action defined for this state, return match
+                if (state >= actions_.size())
+                    return pass_flags::pass_normal;
+
+                // if there is nothing to invoke, continue with 'match'
+                std::vector<functor_wrapper_type> const& actions = actions_[state];
+                if (unique_id >= actions.size() || !actions[unique_id]) 
+                    return pass_flags::pass_normal;
+
+                // set token value 
+                data.set_end(end);
+
+                // Note: all arguments might be changed by the invoked semantic 
+                //       action
+                BOOST_SCOPED_ENUM(pass_flags) match = pass_flags::pass_normal;
+                actions[unique_id](data.get_first(), end, match, id, data);
+                return match;
+            }
+
+            std::vector<std::vector<functor_wrapper_type> > actions_;
+        }; 
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp
new file mode 100644 (file)
index 0000000..725f5c8
--- /dev/null
@@ -0,0 +1,572 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXER_STATIC_FUNCTOR_DATA_FEB_10_2008_0755PM)
+#define BOOST_SPIRIT_LEX_LEXER_STATIC_FUNCTOR_DATA_FEB_10_2008_0755PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/state_machine.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Char, typename F>
+        inline std::size_t get_state_id(Char const* state, F f
+          , std::size_t numstates)
+        {
+            for (std::size_t i = 0; i < numstates; ++i)
+            {
+                if (boost::algorithm::equals(f(i), state))
+                    return i;
+            }
+            return boost::lexer::npos;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename HasActors, typename HasState
+          , typename TokenValue>
+        class static_data;    // no default specialization
+
+        ///////////////////////////////////////////////////////////////////////
+        //  doesn't support no state and no actors
+        template <typename Iterator, typename TokenValue>
+        class static_data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef typename 
+                boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef std::size_t state_type;
+            typedef char_type const* state_name_type;
+            typedef unused_type semantic_actions_type;
+            typedef detail::wrap_action<unused_type, Iterator, static_data
+              , std::size_t> wrap_action_type;
+            typedef std::size_t (*next_token_functor)(std::size_t&, 
+                bool&, Iterator&, Iterator const&, std::size_t&);
+            typedef char_type const* (*get_state_name_type)(std::size_t);
+
+            // initialize the shared data 
+            template <typename IterData>
+            static_data (IterData const& data, Iterator& first
+                  , Iterator const& last)
+              : first_(first), last_(last) 
+              , next_token_(data.next_)
+              , get_state_name_(data.get_state_name_)
+              , bol_(data.bol_) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            template <typename Char>
+            void set_state_name (Char const*) 
+            {
+// some (random) versions of gcc instantiate this function even if it's not 
+// needed leading to false static asserts
+#if !defined(__GNUC__)
+                // If you see a compile time assertion below you're probably 
+                // using a token type not supporting lexer states (the 3rd 
+                // template parameter of the token is mpl::false_), but your 
+                // code uses state changes anyways.
+                BOOST_STATIC_ASSERT(false);
+#endif
+            }
+            char_type const* get_state_name() const 
+            { 
+                return get_state_name_(0); 
+            }
+            std::size_t get_state_id(char_type const*) const 
+            { 
+                return 0; 
+            }
+
+            // The function get_eoi() is used by the implementation of the 
+            // placeholder '_eoi'.
+            Iterator const& get_eoi() const { return last_; }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream. 
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            Iterator const& less(Iterator const& it, int) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return it; 
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            // 
+            // These functions do nothing as long as no semantic actions are 
+            // used.
+            void more() 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?"); 
+            }
+            bool adjust_start() { return false; }
+            void revert_adjust_start() {}
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b):
+            //
+            // This function does nothing as long as no semantic actions are 
+            // used.
+            bool lookahead(std::size_t, std::size_t /*state*/ = std::size_t(~0)) 
+            { 
+                // The following assertion fires most likely because you are 
+                // using lexer semantic actions without using the actor_lexer
+                // as the base class for your token definition class.
+                BOOST_ASSERT(false && 
+                    "Are you using lexer semantic actions without using the "
+                    "actor_lexer base?");
+                return false; 
+            }
+
+            // the functions next, invoke_actions, and get_state are used by 
+            // the functor implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = bol_;
+
+                std::size_t state = 0;
+                return next_token_(state, bol_, end, last_, unique_id);
+            }
+
+            // nothing to invoke, so this is empty
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t
+              , std::size_t, std::size_t, Iterator const&) 
+            {
+                return pass_flags::pass_normal;    // always accept
+            }
+
+            std::size_t get_state() const { return 0; }
+            void set_state(std::size_t) {}
+
+            void set_end(Iterator const& it) {}
+
+            Iterator& get_first() { return first_; }
+            Iterator const& get_first() const { return first_; }
+            Iterator const& get_last() const { return last_; }
+
+            iterator_range<Iterator> get_value() const 
+            { 
+                return iterator_range<Iterator>(first_, last_); 
+            }
+            bool has_value() const { return false; }
+            void reset_value() {}
+
+            void reset_bol(bool bol) { bol_ = bol; }
+
+        protected:
+            Iterator& first_;
+            Iterator last_;
+
+            next_token_functor next_token_;
+            get_state_name_type get_state_name_;
+
+            bool bol_;      // helper storing whether last character was \n
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            static_data& operator= (static_data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  doesn't support lexer semantic actions, but supports state
+        template <typename Iterator, typename TokenValue>
+        class static_data<Iterator, mpl::false_, mpl::true_, TokenValue>
+          : public static_data<Iterator, mpl::false_, mpl::false_, TokenValue>
+        {
+        protected:
+            typedef static_data<Iterator, mpl::false_, mpl::false_, TokenValue> base_type;
+            typedef typename base_type::char_type char_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef iterator_range<Iterator> token_value_type;
+            typedef token_value_type get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+            typedef typename base_type::semantic_actions_type 
+                semantic_actions_type;
+
+            // initialize the shared data 
+            template <typename IterData>
+            static_data (IterData const& data, Iterator& first
+                  , Iterator const& last)
+              : base_type(data, first, last), state_(0)
+              , num_states_(data.num_states_) {}
+
+            // The following functions are used by the implementation of the 
+            // placeholder '_state'.
+            void set_state_name (char_type const* new_state) 
+            { 
+                std::size_t state_id = lexertl::detail::get_state_id(new_state
+                  , this->get_state_name_, num_states_);
+
+                // if the following assertion fires you've probably been using 
+                // a lexer state name which was not defined in your token 
+                // definition
+                BOOST_ASSERT(state_id != boost::lexer::npos);
+
+                if (state_id != boost::lexer::npos)
+                    state_ = state_id;
+            }
+            char_type const* get_state_name() const
+            {
+                return this->get_state_name_(state_);
+            }
+            std::size_t get_state_id(char_type const* state) const 
+            { 
+                return lexertl::detail::get_state_id(state
+                  , this->get_state_name_, num_states_); 
+            }
+
+            // the functions next() and get_state() are used by the functor 
+            // implementation below
+
+            // The function next() tries to match the next token from the 
+            // underlying input sequence. 
+            std::size_t next(Iterator& end, std::size_t& unique_id, bool& prev_bol)
+            {
+                prev_bol = this->bol_;
+                return this->next_token_(state_, this->bol_, end, this->last_
+                  , unique_id);
+            }
+
+            std::size_t& get_state() { return state_; }
+            void set_state(std::size_t state) { state_ = state; }
+
+        protected:
+            std::size_t state_;
+            std::size_t num_states_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            static_data& operator= (static_data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  does support actors, but may have no state
+        template <typename Iterator, typename HasState, typename TokenValue>
+        class static_data<Iterator, mpl::true_, HasState, TokenValue> 
+          : public static_data<Iterator, mpl::false_, HasState, TokenValue>
+        {
+        public:
+            typedef semantic_actions<Iterator, HasState, static_data>
+                semantic_actions_type;
+
+        protected:
+            typedef static_data<Iterator, mpl::false_, HasState, TokenValue> 
+                base_type;
+            typedef typename base_type::char_type char_type;
+            typedef typename semantic_actions_type::functor_wrapper_type
+                functor_wrapper_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef TokenValue token_value_type;
+            typedef TokenValue const& get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+
+            typedef detail::wrap_action<functor_wrapper_type
+              , Iterator, static_data, std::size_t> wrap_action_type;
+
+            template <typename IterData>
+            static_data (IterData const& data, Iterator& first
+                  , Iterator const& last)
+              : base_type(data, first, last)
+              , actions_(data.actions_), hold_()
+              , value_(iterator_range<Iterator>(first, last))
+              , has_value_(false)
+              , has_hold_(false)
+            {}
+
+            // invoke attached semantic actions, if defined
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end)
+            {
+                return actions_.invoke_actions(state, id, unique_id, end, *this); 
+            }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream). 
+            Iterator const& less(Iterator& it, int n) 
+            {
+                it = this->get_first();
+                std::advance(it, n);
+                return it;
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            void more()
+            {
+                hold_ = this->get_first();
+                has_hold_ = true;
+            }
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b)
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0))
+            {
+                Iterator end = end_;
+                std::size_t unique_id = boost::lexer::npos;
+                bool bol = this->bol_;
+
+                if (std::size_t(~0) == state)
+                    state = this->state_;
+
+                return id == this->next_token_(
+                    state, bol, end, this->get_eoi(), unique_id);
+            }
+
+            // The adjust_start() and revert_adjust_start() are helper 
+            // functions needed to implement the functionality required for 
+            // lex::more(). It is called from the functor body below.
+            bool adjust_start()
+            {
+                if (!has_hold_)
+                    return false;
+
+                std::swap(this->get_first(), hold_);
+                has_hold_ = false;
+                return true;
+            }
+            void revert_adjust_start()
+            {
+                // this will be called only if adjust_start above returned true
+                std::swap(this->get_first(), hold_);
+                has_hold_ = true;
+            }
+
+            TokenValue const& get_value() const 
+            {
+                if (!has_value_) {
+                    value_ = iterator_range<Iterator>(this->get_first(), end_);
+                    has_value_ = true;
+                }
+                return value_;
+            }
+            template <typename Value>
+            void set_value(Value const& val)
+            {
+                value_ = val;
+                has_value_ = true;
+            }
+            void set_end(Iterator const& it)
+            {
+                end_ = it;
+            }
+            bool has_value() const { return has_value_; }
+            void reset_value() { has_value_ = false; }
+
+        protected:
+            semantic_actions_type const& actions_;
+            Iterator hold_;     // iterator needed to support lex::more()
+            Iterator end_;      // iterator pointing to end of matched token
+            mutable TokenValue value_;  // token value to use
+            mutable bool has_value_;    // 'true' if value_ is valid
+            bool has_hold_;     // 'true' if hold_ is valid
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            static_data& operator= (static_data const&);
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  does support lexer semantic actions, may support state, is used for
+        //  position_token exposing exactly one type
+        template <typename Iterator, typename HasState, typename TokenValue>
+        class static_data<Iterator, mpl::true_, HasState, boost::optional<TokenValue> > 
+          : public static_data<Iterator, mpl::false_, HasState, TokenValue>
+        {
+        public:
+            typedef semantic_actions<Iterator, HasState, static_data> 
+                semantic_actions_type;
+
+        protected:
+            typedef static_data<Iterator, mpl::false_, HasState, TokenValue> 
+                base_type;
+            typedef typename base_type::char_type char_type;
+            typedef typename semantic_actions_type::functor_wrapper_type
+                functor_wrapper_type;
+
+        public:
+            typedef Iterator base_iterator_type;
+            typedef boost::optional<TokenValue> token_value_type;
+            typedef boost::optional<TokenValue> const& get_value_type;
+            typedef typename base_type::state_type state_type;
+            typedef typename base_type::state_name_type state_name_type;
+
+            typedef detail::wrap_action<functor_wrapper_type
+              , Iterator, static_data, std::size_t> wrap_action_type;
+
+            template <typename IterData>
+            static_data (IterData const& data_, Iterator& first, Iterator const& last)
+              : base_type(data_, first, last)
+              , actions_(data_.actions_), hold_()
+              , has_value_(false), has_hold_(false) 
+            {
+                spirit::traits::assign_to(first, last, value_);
+                has_value_ = true;
+            }
+
+            // invoke attached semantic actions, if defined
+            BOOST_SCOPED_ENUM(pass_flags) invoke_actions(std::size_t state
+              , std::size_t& id, std::size_t unique_id, Iterator& end)
+            {
+                return actions_.invoke_actions(state, id, unique_id, end, *this); 
+            }
+
+            // The function less() is used by the implementation of the support
+            // function lex::less(). Its functionality is equivalent to flex'
+            // function yyless(): it returns an iterator positioned to the 
+            // nth input character beyond the current start iterator (i.e. by
+            // assigning the return value to the placeholder '_end' it is 
+            // possible to return all but the first n characters of the current 
+            // token back to the input stream). 
+            Iterator const& less(Iterator& it, int n) 
+            {
+                it = this->get_first();
+                std::advance(it, n);
+                return it;
+            }
+
+            // The function more() is used by the implementation of the support 
+            // function lex::more(). Its functionality is equivalent to flex'
+            // function yymore(): it tells the lexer that the next time it 
+            // matches a rule, the corresponding token should be appended onto 
+            // the current token value rather than replacing it.
+            void more()
+            {
+                hold_ = this->get_first();
+                has_hold_ = true;
+            }
+
+            // The function lookahead() is used by the implementation of the 
+            // support function lex::lookahead. It can be used to implement 
+            // lookahead for lexer engines not supporting constructs like flex'
+            // a/b  (match a, but only when followed by b)
+            bool lookahead(std::size_t id, std::size_t state = std::size_t(~0))
+            {
+                Iterator end = end_;
+                std::size_t unique_id = boost::lexer::npos;
+                bool bol = this->bol_;
+
+                if (std::size_t(~0) == state)
+                    state = this->state_;
+
+                return id == this->next_token_(
+                    state, bol, end, this->get_eoi(), unique_id);
+            }
+
+            // The adjust_start() and revert_adjust_start() are helper 
+            // functions needed to implement the functionality required for 
+            // lex::more(). It is called from the functor body below.
+            bool adjust_start()
+            {
+                if (!has_hold_)
+                    return false;
+
+                std::swap(this->get_first(), hold_);
+                has_hold_ = false;
+                return true;
+            }
+            void revert_adjust_start()
+            {
+                // this will be called only if adjust_start above returned true
+                std::swap(this->get_first(), hold_);
+                has_hold_ = true;
+            }
+
+            TokenValue const& get_value() const 
+            {
+                if (!has_value_) {
+                    spirit::traits::assign_to(this->get_first(), end_, value_);
+                    has_value_ = true;
+                }
+                return value_;
+            }
+            template <typename Value>
+            void set_value(Value const& val)
+            {
+                value_ = val;
+                has_value_ = true;
+            }
+            void set_end(Iterator const& it)
+            {
+                end_ = it;
+            }
+            bool has_value() const { return has_value_; }
+            void reset_value() { has_value_ = false; }
+
+        protected:
+            semantic_actions_type const& actions_;
+            Iterator hold_;     // iterator needed to support lex::more()
+            Iterator end_;      // iterator pointing to end of matched token
+            mutable token_value_type value_;  // token value to use
+            mutable bool has_value_;    // 'true' if value_ is valid
+            bool has_hold_;     // 'true' if hold_ is valid
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            static_data& operator= (static_data const&);
+        };
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp
new file mode 100644 (file)
index 0000000..d6deffc
--- /dev/null
@@ -0,0 +1,279 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STATIC_LEXER_FEB_10_2008_0753PM)
+#define BOOST_SPIRIT_LEX_STATIC_LEXER_FEB_10_2008_0753PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/lexertl/token.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/functor.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/iterator.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/static_version.hpp>
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <boost/spirit/home/support/detail/lexer/debug.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //  forward declaration
+    ///////////////////////////////////////////////////////////////////////////
+    namespace static_
+    {
+        struct lexer;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Every lexer type to be used as a lexer for Spirit has to conform to 
+    //  the following public interface:
+    //
+    //    typedefs: 
+    //        iterator_type   The type of the iterator exposed by this lexer.
+    //        token_type      The type of the tokens returned from the exposed 
+    //                        iterators.
+    //
+    //    functions:
+    //        default constructor
+    //                        Since lexers are instantiated as base classes 
+    //                        only it might be a good idea to make this 
+    //                        constructor protected.
+    //        begin, end      Return a pair of iterators, when dereferenced
+    //                        returning the sequence of tokens recognized in 
+    //                        the input stream given as the parameters to the 
+    //                        begin() function.
+    //        add_token       Should add the definition of a token to be 
+    //                        recognized by this lexer.
+    //        clear           Should delete all current token definitions
+    //                        associated with the given state of this lexer 
+    //                        object.
+    //
+    //    template parameters:
+    //        Token           The type of the tokens to be returned from the
+    //                        exposed token iterator.
+    //        LexerTables     See explanations below.
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        Functor         The type of the InputPolicy to use to instantiate
+    //                        the multi_pass iterator type to be used as the 
+    //                        token iterator (returned from begin()/end()).
+    //
+    //    Additionally, this implementation of a static lexer has a template
+    //    parameter LexerTables allowing to customize the static lexer tables
+    //    to be used. The LexerTables is expected to be a type exposing 
+    //    the following functions:
+    //
+    //        static std::size_t const state_count()
+    //
+    //                This function needs toreturn the number of lexer states
+    //                contained in the table returned from the state_names()
+    //                function.
+    //
+    //        static char const* const* state_names()
+    //
+    //                This function needs to return a pointer to a table of
+    //                names of all lexer states. The table needs to have as 
+    //                much entries as the state_count() function returns
+    //
+    //        template<typename Iterator>
+    //        std::size_t next(std::size_t &start_state_, Iterator const& start_
+    //          , Iterator &start_token_, Iterator const& end_
+    //          , std::size_t& unique_id_);
+    //
+    //                This function is expected to return the next matched
+    //                token from the underlying input stream.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The static_lexer class is a implementation of a Spirit.Lex 
+    //  lexer on top of Ben Hanson's lexertl library (For more information 
+    //  about lexertl go here: http://www.benhanson.net/lexertl.html). 
+    //
+    //  This class is designed to be used in conjunction with a generated, 
+    //  static lexer. For more information see the documentation (The Static 
+    //  Lexer Model).
+    //
+    //  This class is supposed to be used as the first and only template 
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename LexerTables = static_::lexer
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor = functor<Token, detail::static_data, Iterator> >
+    class static_lexer 
+    {
+    private:
+        struct dummy { void true_() {} };
+        typedef void (dummy::*safe_bool)();
+
+    public:
+        // object is always valid
+        operator safe_bool() const { return &dummy::true_; }
+
+        typedef typename boost::detail::iterator_traits<Iterator>::value_type 
+            char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        //  Every lexer type to be used as a lexer for Spirit has to conform to 
+        //  a public interface 
+        typedef Token token_type;
+        typedef typename Token::id_type id_type;
+        typedef iterator<Functor> iterator_type;
+
+    private:
+        // this type is purely used for the iterator_type construction below
+        struct iterator_data_type 
+        {
+            typedef typename Functor::next_token_functor next_token_functor;
+            typedef typename Functor::semantic_actions_type semantic_actions_type;
+            typedef typename Functor::get_state_name_type get_state_name_type;
+
+            iterator_data_type(next_token_functor next
+                  , semantic_actions_type const& actions
+                  , get_state_name_type get_state_name, std::size_t num_states
+                  , bool bol)
+              : next_(next), actions_(actions), get_state_name_(get_state_name)
+              , num_states_(num_states), bol_(bol)
+            {}
+
+            next_token_functor next_;
+            semantic_actions_type const& actions_;
+            get_state_name_type get_state_name_;
+            std::size_t num_states_;
+            bool bol_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            iterator_data_type& operator= (iterator_data_type const&);
+        };
+
+        typedef LexerTables tables_type;
+
+        // The following static assertion fires if the referenced static lexer 
+        // tables are generated by a different static lexer version as used for
+        // the current compilation unit. Please regenerate your static lexer
+        // tables before trying to create a static_lexer<> instance.
+        BOOST_SPIRIT_ASSERT_MSG(
+            tables_type::static_version == SPIRIT_STATIC_LEXER_VERSION
+          , incompatible_static_lexer_version, (LexerTables));
+
+    public:
+        //  Return the start iterator usable for iterating over the generated
+        //  tokens, the generated function next_token(...) is called to match 
+        //  the next token from the input.
+        template <typename Iterator_>
+        iterator_type begin(Iterator_& first, Iterator_ const& last
+          , char_type const* initial_state = 0) const
+        { 
+            iterator_data_type iterator_data( 
+                    &tables_type::template next<Iterator_>, actions_
+                  , &tables_type::state_name, tables_type::state_count()
+                  , tables_type::supports_bol
+                );
+            return iterator_type(iterator_data, first, last, initial_state);
+        }
+
+        //  Return the end iterator usable to stop iterating over the generated 
+        //  tokens.
+        iterator_type end() const
+        { 
+            return iterator_type(); 
+        }
+
+    protected:
+        //  Lexer instances can be created by means of a derived class only.
+        static_lexer(unsigned int) : unique_id_(0) {}
+
+    public:
+        // interface for token definition management
+        std::size_t add_token (char_type const*, char_type, std::size_t
+          , char_type const*) 
+        {
+            return unique_id_++;
+        }
+        std::size_t add_token (char_type const*, string_type const&
+          , std::size_t, char_type const*) 
+        {
+            return unique_id_++;
+        }
+
+        // interface for pattern definition management
+        void add_pattern (char_type const*, string_type const&
+          , string_type const&) {}
+
+        void clear(char_type const*) {}
+
+        std::size_t add_state(char_type const* state)
+        {
+            return detail::get_state_id(state, &tables_type::state_name
+              , tables_type::state_count());
+        }
+        string_type initial_state() const 
+        { 
+            return tables_type::state_name(0);
+        }
+
+        // register a semantic action with the given id
+        template <typename F>
+        void add_action(id_type unique_id, std::size_t state, F act) 
+        {
+            typedef typename Functor::wrap_action_type wrapper_type;
+            actions_.add_action(unique_id, state, wrapper_type::call(act));
+        }
+
+        bool init_dfa(bool minimize = false) const { return true; }
+
+    private:
+        typename Functor::semantic_actions_type actions_;
+        std::size_t unique_id_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The static_actor_lexer class is another implementation of a 
+    //  Spirit.Lex lexer on top of Ben Hanson's lexertl library as outlined 
+    //  above (For more information about lexertl go here: 
+    //  http://www.benhanson.net/lexertl.html).
+    //
+    //  Just as the static_lexer class it is meant to be used with 
+    //  a statically generated lexer as outlined above.
+    //
+    //  The only difference to the static_lexer class above is that 
+    //  token_def definitions may have semantic (lexer) actions attached while 
+    //  being defined:
+    //
+    //      int w;
+    //      token_def<> word = "[^ \t\n]+";
+    //      self = word[++ref(w)];        // see example: word_count_lexer
+    //
+    //  This class is supposed to be used as the first and only template 
+    //  parameter while instantiating instances of a lex::lexer class.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Token = token<>
+      , typename LexerTables = static_::lexer
+      , typename Iterator = typename Token::iterator_type
+      , typename Functor 
+          = functor<Token, detail::static_data, Iterator, mpl::true_> >
+    class static_actor_lexer 
+      : public static_lexer<Token, LexerTables, Iterator, Functor>
+    {
+    protected:
+        // Lexer instances can be created by means of a derived class only.
+        static_actor_lexer(unsigned int flags) 
+          : static_lexer<Token, LexerTables, Iterator, Functor>(flags) 
+        {}
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_version.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/static_version.hpp
new file mode 100644 (file)
index 0000000..8163dc5
--- /dev/null
@@ -0,0 +1,20 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STATIC_LEXER_VERSION_SEP_10_2009_0811PM)
+#define BOOST_SPIRIT_LEX_STATIC_LEXER_VERSION_SEP_10_2009_0811PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// This is the version of the static lexer format. It is used to ensure a
+// static lexer has been generated using the same data format as expected 
+// by the executing application.
+///////////////////////////////////////////////////////////////////////////////
+#define SPIRIT_STATIC_LEXER_VERSION 0x010000
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/token.hpp
new file mode 100644 (file)
index 0000000..9f4bdb3
--- /dev/null
@@ -0,0 +1,650 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TOKEN_FEB_10_2008_0751PM)
+#define BOOST_SPIRIT_LEX_TOKEN_FEB_10_2008_0751PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/detail/lexer/generator.hpp>
+#include <boost/spirit/home/support/detail/lexer/rules.hpp>
+#include <boost/spirit/home/support/detail/lexer/consts.hpp>
+#include <boost/spirit/home/support/utree/utree_traits_fwd.hpp>
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/variant.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/static_assert.hpp>
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <iosfwd>
+#endif
+
+namespace boost { namespace spirit { namespace lex { namespace lexertl
+{ 
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The token is the type of the objects returned by default by the 
+    //  iterator.
+    //
+    //    template parameters:
+    //        Iterator        The type of the iterator used to access the
+    //                        underlying character stream.
+    //        AttributeTypes  A mpl sequence containing the types of all 
+    //                        required different token values to be supported 
+    //                        by this token type.
+    //        HasState        A mpl::bool_ indicating, whether this token type
+    //                        should support lexer states.
+    //        Idtype          The type to use for the token id (defaults to 
+    //                        std::size_t).
+    //
+    //  It is possible to use other token types with the spirit::lex 
+    //  framework as well. If you plan to use a different type as your token 
+    //  type, you'll need to expose the following things from your token type 
+    //  to make it compatible with spirit::lex:
+    //
+    //    typedefs
+    //        iterator_type   The type of the iterator used to access the
+    //                        underlying character stream.
+    //
+    //        id_type         The type of the token id used.
+    //
+    //    methods
+    //        default constructor
+    //                        This should initialize the token as an end of 
+    //                        input token.
+    //        constructors    The prototype of the other required 
+    //                        constructors should be:
+    //
+    //              token(int)
+    //                        This constructor should initialize the token as 
+    //                        an invalid token (not carrying any specific 
+    //                        values)
+    //
+    //              where:  the int is used as a tag only and its value is 
+    //                      ignored
+    //
+    //                        and:
+    //
+    //              token(Idtype id, std::size_t state, 
+    //                    iterator_type first, iterator_type last);
+    //
+    //              where:  id:           token id
+    //                      state:        lexer state this token was matched in
+    //                      first, last:  pair of iterators marking the matched 
+    //                                    range in the underlying input stream 
+    //
+    //        accessors
+    //              id()      return the token id of the matched input sequence
+    //              id(newid) set the token id of the token instance
+    //
+    //              state()   return the lexer state this token was matched in
+    //
+    //              value()   return the token value
+    //
+    //  Additionally, you will have to implement a couple of helper functions
+    //  in the same namespace as the token type: a comparison operator==() to 
+    //  compare your token instances, a token_is_valid() function and different 
+    //  specializations of the Spirit customization point 
+    //  assign_to_attribute_from_value as shown below.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator = char const*
+      , typename AttributeTypes = mpl::vector0<>
+      , typename HasState = mpl::true_
+      , typename Idtype = std::size_t> 
+    struct token;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data and
+    //  doesn't support working with lexer states.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+        typedef Iterator iterator_type;
+        typedef mpl::false_ has_state;
+        typedef Idtype id_type;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : id_(id_type(boost::lexer::npos)) {}
+
+        //  construct an invalid token
+        explicit token(int) : id_(id_type(0)) {}
+
+        token(id_type id, std::size_t) : id_(id) {}
+
+        token(id_type id, std::size_t, token_value_type)
+          : id_(id) {}
+
+        token_value_type& value() { static token_value_type u; return u; }
+        token_value_type const& value() const { return unused; }
+
+#if defined(BOOST_SPIRIT_DEBUG)
+        token(id_type id, std::size_t, Iterator const& first
+              , Iterator const& last)
+          : matched_(first, last)
+          , id_(id) {}
+#else
+        token(id_type id, std::size_t, Iterator const&, Iterator const&)
+          : id_(id) {}
+#endif
+
+        //  this default conversion operator is needed to allow the direct 
+        //  usage of tokens in conjunction with the primitive parsers defined 
+        //  in Qi
+        operator id_type() const { return id_; }
+
+        //  Retrieve or set the token id of this token instance. 
+        id_type id() const { return id_; }
+        void id(id_type newid) { id_ = newid; }
+
+        std::size_t state() const { return 0; }   // always '0' (INITIAL state)
+
+        bool is_valid() const 
+        { 
+            return 0 != id_ && id_type(boost::lexer::npos) != id_; 
+        }
+
+#if defined(BOOST_SPIRIT_DEBUG)
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                id_ = rhs.id_;
+                if (is_valid()) 
+                    matched_ = rhs.matched_;
+            }
+            return *this;
+        }
+#endif
+        std::pair<Iterator, Iterator> matched_;
+#endif
+
+    protected:
+        id_type id_;            // token id, 0 if nothing has been matched
+    };
+
+#if defined(BOOST_SPIRIT_DEBUG)
+    template <typename Char, typename Traits, typename Iterator
+      , typename AttributeTypes, typename HasState, typename Idtype> 
+    inline std::basic_ostream<Char, Traits>& 
+    operator<< (std::basic_ostream<Char, Traits>& os
+      , token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        if (t.is_valid()) {
+            Iterator end = t.matched_.second;
+            for (Iterator it = t.matched_.first; it != end; ++it)
+                os << *it;
+        }
+        else {
+            os << "<invalid token>";
+        }
+        return os;
+    }
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This specialization of the token type doesn't contain any item data but
+    //  supports working with lexer states.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Idtype>
+    struct token<Iterator, lex::omit, mpl::true_, Idtype>
+      : token<Iterator, lex::omit, mpl::false_, Idtype>
+    {
+    private:
+        typedef token<Iterator, lex::omit, mpl::false_, Idtype> base_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef Iterator iterator_type;
+        typedef mpl::true_ has_state;
+        typedef unused_type token_value_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : state_(boost::lexer::npos) {}
+
+        //  construct an invalid token
+        explicit token(int) : base_type(0), state_(boost::lexer::npos) {}
+
+        token(id_type id, std::size_t state)
+          : base_type(id, boost::lexer::npos), state_(state) {}
+
+        token(id_type id, std::size_t state, token_value_type)
+          : base_type(id, boost::lexer::npos, unused)
+          , state_(state) {}
+
+        token(id_type id, std::size_t state
+              , Iterator const& first, Iterator const& last)
+          : base_type(id, boost::lexer::npos, first, last)
+          , state_(state) {}
+
+        std::size_t state() const { return state_; }
+
+#if defined(BOOST_SPIRIT_DEBUG) && BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                state_ = rhs.state_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        std::size_t state_;      // lexer state this token was matched in
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  The generic version of the token type derives from the 
+    //  specialization above and adds a single data member holding the item 
+    //  data carried by the token instance.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        //  Meta-function to calculate the type of the variant data item to be 
+        //  stored with each token instance.
+        //
+        //  Note: The iterator pair needs to be the first type in the list of 
+        //        types supported by the generated variant type (this is being 
+        //        used to identify whether the stored data item in a particular 
+        //        token instance needs to be converted from the pair of 
+        //        iterators (see the first of the assign_to_attribute_from_value 
+        //        specializations below).
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct token_value_typesequence
+        {
+            typedef typename mpl::insert<
+                AttributeTypes
+              , typename mpl::begin<AttributeTypes>::type
+              , IteratorPair
+            >::type sequence_type;
+            typedef typename make_variant_over<sequence_type>::type type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The type of the data item stored with a token instance is defined 
+        //  by the template parameter 'AttributeTypes' and may be:
+        //  
+        //     lex::omit:         no data item is stored with the token 
+        //                        instance (this is handled by the 
+        //                        specializations of the token class
+        //                        below)
+        //     mpl::vector0<>:    each token instance stores a pair of 
+        //                        iterators pointing to the matched input 
+        //                        sequence
+        //     mpl::vector<...>:  each token instance stores a variant being 
+        //                        able to store the pair of iterators pointing 
+        //                        to the matched input sequence, or any of the 
+        //                        types a specified in the mpl::vector<>
+        //
+        //  All this is done to ensure the token type is as small (in terms 
+        //  of its byte-size) as possible.
+        ///////////////////////////////////////////////////////////////////////
+        template <typename IteratorPair, typename AttributeTypes>
+        struct token_value_type
+          : mpl::eval_if<
+                mpl::or_<
+                    is_same<AttributeTypes, mpl::vector0<> >
+                  , is_same<AttributeTypes, mpl::vector<> > >
+              , mpl::identity<IteratorPair>
+              , token_value_typesequence<IteratorPair, AttributeTypes> >
+        {};
+    }
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    struct token : token<Iterator, lex::omit, HasState, Idtype>
+    {
+    private: // precondition assertions
+        BOOST_STATIC_ASSERT((mpl::is_sequence<AttributeTypes>::value || 
+                            is_same<AttributeTypes, lex::omit>::value));
+        typedef token<Iterator, lex::omit, HasState, Idtype> base_type;
+
+    protected: 
+        //  If no additional token value types are given, the token will 
+        //  hold the plain pair of iterators pointing to the matched range
+        //  in the underlying input sequence. Otherwise the token value is 
+        //  stored as a variant and will again hold the pair of iterators but
+        //  is able to hold any of the given data types as well. The conversion 
+        //  from the iterator pair to the required data type is done when it is
+        //  accessed for the first time.
+        typedef iterator_range<Iterator> iterpair_type;
+
+    public:
+        typedef typename base_type::id_type id_type;
+        typedef typename detail::token_value_type<
+            iterpair_type, AttributeTypes
+        >::type token_value_type;
+
+        typedef Iterator iterator_type;
+
+        //  default constructed tokens correspond to EOI tokens
+        token() : value_(iterpair_type(iterator_type(), iterator_type())) {}
+
+        //  construct an invalid token
+        explicit token(int)
+          : base_type(0)
+          , value_(iterpair_type(iterator_type(), iterator_type())) {}
+
+        token(id_type id, std::size_t state, token_value_type const& value)
+          : base_type(id, state, value)
+          , value_(value) {}
+
+        token(id_type id, std::size_t state, Iterator const& first
+              , Iterator const& last)
+          : base_type(id, state, first, last)
+          , value_(iterpair_type(first, last)) {}
+
+        token_value_type& value() { return value_; }
+        token_value_type const& value() const { return value_; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        // workaround for MSVC10 which has problems copying a default 
+        // constructed iterator_range
+        token& operator= (token const& rhs)
+        {
+            if (this != &rhs) 
+            {
+                this->base_type::operator=(static_cast<base_type const&>(rhs));
+                if (this->is_valid()) 
+                    value_ = rhs.value_;
+            }
+            return *this;
+        }
+#endif
+
+    protected:
+        token_value_type value_; // token value, by default a pair of iterators
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  tokens are considered equal, if their id's match (these are unique)
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    operator== (token<Iterator, AttributeTypes, HasState, Idtype> const& lhs, 
+                token<Iterator, AttributeTypes, HasState, Idtype> const& rhs)
+    {
+        return lhs.id() == rhs.id();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This overload is needed by the multi_pass/functor_input_policy to 
+    //  validate a token instance. It has to be defined in the same namespace 
+    //  as the token class itself to allow ADL to find it.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype>
+    inline bool 
+    token_is_valid(token<Iterator, AttributeTypes, HasState, Idtype> const& t)
+    {
+        return t.is_valid();
+    }
+}}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We have to provide specializations for the customization point
+    //  assign_to_attribute_from_value allowing to extract the needed value 
+    //  from the token. 
+    ///////////////////////////////////////////////////////////////////////////
+
+    //  This is called from the parse function of token_def if the token_def
+    //  has been defined to carry a special attribute type
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+        //  The goal of this function is to avoid the conversion of the pair of
+        //  iterators (to the matched character sequence) into the token value 
+        //  of the required type being done more than once. For this purpose it 
+        //  checks whether the stored value type is still the default one (pair 
+        //  of iterators) and if yes, replaces the pair of iterators with the 
+        //  converted value to be returned from subsequent calls.
+
+            if (0 == t.value().which()) {
+            //  first access to the token value
+                typedef iterator_range<Iterator> iterpair_type;
+                iterpair_type const& ip = boost::get<iterpair_type>(t.value());
+
+            // Interestingly enough we use the assign_to() framework defined in 
+            // Spirit.Qi allowing to convert the pair of iterators to almost any 
+            // required type (assign_to(), if available, uses the standard Spirit 
+            // parsers to do the conversion).
+                spirit::traits::assign_to(ip.begin(), ip.end(), attr);
+
+            //  If you get an error during the compilation of the following 
+            //  assignment expression, you probably forgot to list one or more 
+            //  types used as token value types (in your token_def<...> 
+            //  definitions) in your definition of the token class. I.e. any token 
+            //  value type used for a token_def<...> definition has to be listed 
+            //  during the declaration of the token type to use. For instance let's 
+            //  assume we have two token_def's:
+            //
+            //      token_def<int> number; number = "...";
+            //      token_def<std::string> identifier; identifier = "...";
+            //
+            //  Then you'll have to use the following token type definition 
+            //  (assuming you are using the token class):
+            //
+            //      typedef mpl::vector<int, std::string> token_values;
+            //      typedef token<base_iter_type, token_values> token_type;
+            //
+            //  where: base_iter_type is the iterator type used to expose the 
+            //         underlying input stream.
+            //
+            //  This token_type has to be used as the second template parameter 
+            //  to the lexer class:
+            //
+            //      typedef lexer<base_iter_type, token_type> lexer_type;
+            //
+            //  again, assuming you're using the lexer<> template for your 
+            //  tokenization.
+
+                typedef lex::lexertl::token<
+                    Iterator, AttributeTypes, HasState, Idtype> token_type;
+                spirit::traits::assign_to(
+                    attr, const_cast<token_type&>(t).value());   // re-assign value
+            }
+            else {
+            // reuse the already assigned value
+                spirit::traits::assign_to(boost::get<Attribute>(t.value()), attr);
+            }
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    template <typename Iterator, typename AttributeTypes
+      , typename HasState, typename Idtype>
+    struct assign_to_container_from_value<utree
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<utree
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    template <typename Iterator>
+    struct assign_to_container_from_value<
+        iterator_range<Iterator>, iterator_range<Iterator> >
+    {
+        static void 
+        call(iterator_range<Iterator> const& val, iterator_range<Iterator>& attr)
+        {
+            attr = val;
+        }
+    };
+
+    //  These are called from the parse function of token_def if the token type
+    //  has no special attribute type assigned 
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.value().begin(), t.value().end(), attr);
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename HasState
+//       , typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::token<Iterator, mpl::vector0<>, HasState, Idtype> >
+//     {};
+
+    // same as above but using mpl::vector<> instead of mpl::vector0<>
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            //  The default type returned by the token_def parser component (if 
+            //  it has no token value type assigned) is the pair of iterators 
+            //  to the matched character sequence.
+            spirit::traits::assign_to(t.value().begin(), t.value().end(), attr);
+        }
+    };
+
+//     template <typename Attribute, typename Iterator, typename HasState
+//       , typename Idtype>
+//     struct assign_to_container_from_value<Attribute
+//           , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+//       : assign_to_attribute_from_value<Attribute
+//           , lex::lexertl::token<Iterator, mpl::vector<>, HasState, Idtype> >
+//     {};
+
+    //  This is called from the parse function of token_def if the token type
+    //  has been explicitly omitted (i.e. no attribute value is used), which
+    //  essentially means that every attribute gets initialized using default 
+    //  constructed values.
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_attribute_from_value<Attribute
+      , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> const& t
+          , Attribute& attr)
+        {
+            // do nothing
+        }
+    };
+
+    template <typename Attribute, typename Iterator, typename HasState
+      , typename Idtype>
+    struct assign_to_container_from_value<Attribute
+          , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+      : assign_to_attribute_from_value<Attribute
+          , lex::lexertl::token<Iterator, lex::omit, HasState, Idtype> >
+    {};
+
+    //  This is called from the parse function of lexer_def_
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_attribute_from_value<
+        fusion::vector2<Idtype_, iterator_range<Iterator> >
+      , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {
+        static void 
+        call(lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> const& t
+          , fusion::vector2<Idtype_, iterator_range<Iterator> >& attr)
+        {
+            //  The type returned by the lexer_def_ parser components is a 
+            //  fusion::vector containing the token id of the matched token 
+            //  and the pair of iterators to the matched character sequence.
+            typedef iterator_range<Iterator> iterpair_type;
+            typedef fusion::vector2<Idtype_, iterator_range<Iterator> > 
+                attribute_type;
+
+            iterpair_type const& ip = boost::get<iterpair_type>(t.value());
+            attr = attribute_type(t.id(), ip);
+        }
+    };
+
+    template <typename Iterator, typename AttributeTypes, typename HasState
+      , typename Idtype_, typename Idtype>
+    struct assign_to_container_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+      : assign_to_attribute_from_value<
+            fusion::vector2<Idtype_, iterator_range<Iterator> >
+          , lex::lexertl::token<Iterator, AttributeTypes, HasState, Idtype> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Overload debug output for a single token, this integrates lexer tokens 
+    // with Qi's simple_trace debug facilities
+    template <typename Iterator, typename Attribute, typename HasState
+      , typename Idtype>
+    struct token_printer_debug<
+        lex::lexertl::token<Iterator, Attribute, HasState, Idtype> >
+    {
+        typedef lex::lexertl::token<Iterator, Attribute, HasState, Idtype> token_type;
+
+        template <typename Out>
+        static void print(Out& out, token_type const& val) 
+        {
+            out << '[';
+            spirit::traits::print_token(out, val.value());
+            out << ']';
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
new file mode 100644 (file)
index 0000000..e128d27
--- /dev/null
@@ -0,0 +1,154 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_WRAP_ACTION_APR_19_2008_0103PM)
+#define BOOST_SPIRIT_WRAP_ACTION_APR_19_2008_0103PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_bind.hpp>
+#include <boost/spirit/include/phoenix_scope.hpp>
+
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex { namespace lexertl 
+{ 
+    namespace detail
+    {
+        template <typename FunctionType, typename Iterator, typename Context
+          , typename IdType>
+        struct wrap_action
+        {
+            // plain functions with 5 arguments, function objects (including 
+            // phoenix actors) are not touched at all
+            template <typename F>
+            static FunctionType call(F const& f)
+            {
+                return f;
+            }
+
+            // semantic actions with 4 arguments
+            template <typename F>
+            static void arg4_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)& pass, IdType& id
+              , Context const&)
+            {
+                f(start, end, pass, id);
+            }
+
+            template <typename A0, typename A1, typename A2, typename A3>
+            static FunctionType call(void (*f)(A0, A1, A2, A3))
+            {
+                void (*pf)(void(*)(A0, A1, A2, A3)
+                  , Iterator&, Iterator&, BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType&, Context const&) = &wrap_action::arg4_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // semantic actions with 3 arguments
+            template <typename F>
+            static void arg3_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)& pass, IdType
+              , Context const&)
+            {
+                f(start, end, pass);
+            }
+
+            template <typename A0, typename A1, typename A2>
+            static FunctionType call(void (*f)(A0, A1, A2))
+            {
+                void (*pf)(void(*)(A0, A1, A2), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&, IdType
+                  , Context const&) = &wrap_action::arg3_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // semantic actions with 2 arguments
+            template <typename F>
+            static void arg2_action(F* f, Iterator& start, Iterator& end
+              , BOOST_SCOPED_ENUM(pass_flags)&, IdType, Context const&)
+            {
+                f (start, end);
+            }
+
+            template <typename A0, typename A1>
+            static FunctionType call(void (*f)(A0, A1))
+            {
+                void (*pf)(void(*)(A0, A1), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType, Context const&) = &wrap_action::arg2_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+
+            // we assume that either both iterators are to be passed to the 
+            // semantic action or none iterator at all (i.e. it's not possible 
+            // to have a lexer semantic action function taking one arguments).
+
+            // semantic actions with 0 argument
+            template <typename F>
+            static void arg0_action(F* f, Iterator&, Iterator&
+              , BOOST_SCOPED_ENUM(pass_flags)&, IdType, Context const&)
+            {
+                f();
+            }
+
+            static FunctionType call(void (*f)())
+            {
+                void (*pf)(void(*)(), Iterator&, Iterator&
+                  , BOOST_SCOPED_ENUM(pass_flags)&
+                  , IdType, Context const&) = &arg0_action;
+
+                using phoenix::arg_names::_1;
+                using phoenix::arg_names::_2;
+                using phoenix::arg_names::_3;
+                using phoenix::arg_names::_4;
+                using phoenix::arg_names::_5;
+                return phoenix::bind(pf, f, _1, _2, _3, _4, _5);
+            }
+        };
+
+        // specialization allowing to skip wrapping for lexer types not 
+        // supporting semantic actions
+        template <typename Iterator, typename Context, typename Idtype>
+        struct wrap_action<unused_type, Iterator, Context, Idtype>
+        {
+            // plain function objects are not touched at all
+            template <typename F>
+            static F const& call(F const& f)
+            {
+                return f;
+            }
+        };
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/pass_flags.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/pass_flags.hpp
new file mode 100644 (file)
index 0000000..6cda3ba
--- /dev/null
@@ -0,0 +1,28 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PASS_FLAGS_JUN_09_2009_0840PM)
+#define BOOST_SPIRIT_LEX_PASS_FLAGS_JUN_09_2009_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SCOPED_ENUM_START(pass_flags) 
+    { 
+        pass_fail = 0,        // make the current match fail in retrospective
+        pass_normal = 1,      // continue normal token matching, that's the default 
+        pass_ignore = 2       // ignore the current token and start matching the next
+    };
+    BOOST_SCOPED_ENUM_END
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/sequence.hpp
new file mode 100644 (file)
index 0000000..b7fad61
--- /dev/null
@@ -0,0 +1,72 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM)
+#define SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/detail/sequence_function.hpp>
+#include <boost/fusion/include/any.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<lex::domain, proto::tag::bitwise_or>  // enables |
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<lex::domain, proto::tag::bitwise_or>  // flattens |
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Elements>
+    struct sequence : nary_lexer<sequence<Elements> >
+    {
+        sequence(Elements const& elements)
+          : elements(elements) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            typedef detail::sequence_collect_function<LexerDef, String>
+                collect_function_type;
+            collect_function_type f (lexdef, state, targetstate);
+            fusion::any(elements, f);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const 
+        {
+            detail::sequence_add_actions_function<LexerDef> f (lexdef);
+            fusion::any(elements, f);
+        }
+
+        Elements elements;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lexer generator: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::bitwise_or, Elements, Modifiers>
+      : make_nary_composite<Elements, sequence>
+    {};
+
+}}} // namespace boost::spirit::lex
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/string_token_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/string_token_def.hpp
new file mode 100644 (file)
index 0000000..9eb9870
--- /dev/null
@@ -0,0 +1,178 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STRING_TOKEN_DEF_MAR_28_2007_0722PM)
+#define BOOST_SPIRIT_LEX_STRING_TOKEN_DEF_MAR_28_2007_0722PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables strings
+    template <typename T>
+    struct use_terminal<lex::domain, T
+      , typename enable_if<traits::is_string<T> >::type>
+      : mpl::true_ {};
+
+    // enables string(str)
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector1<A0> > > 
+      : traits::is_string<A0> {};
+
+    // enables string(str, ID)
+    template <typename CharEncoding, typename A0, typename A1>
+    struct use_terminal<lex::domain
+      , terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector2<A0, A1> > > 
+      : traits::is_string<A0> {};
+}}
+
+namespace boost { namespace spirit { namespace lex
+{ 
+    // use string from standard character set by default
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::standard::string;
+#endif
+    using spirit::standard::string_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  string_token_def 
+    //      represents a string based token definition
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String, typename IdType = std::size_t
+      , typename CharEncoding = char_encoding::standard>
+    struct string_token_def
+      : primitive_lexer<string_token_def<String, IdType, CharEncoding> >
+    {
+        typedef typename
+            remove_const<typename traits::char_type_of<String>::type>::type
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        string_token_def(typename add_reference<String>::type str, IdType const& id)
+          : str_(str), id_(id), unique_id_(std::size_t(~0))
+          , token_state_(std::size_t(~0)) 
+        {}
+
+        template <typename LexerDef, typename String_>
+        void collect(LexerDef& lexdef, String_ const& state
+          , String_ const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single string_token_def instance in more than one lexer state. 
+            // This is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single string_token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+
+            typedef typename LexerDef::id_type id_type;
+            if (IdType(~0) == id_)
+                id_ = IdType(lexdef.get_next_id());
+
+            unique_id_ = lexdef.add_token (state.c_str(), str_, id_, target);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+        std::size_t id() const { return id_; }
+        std::size_t unique_id() const { return unique_id_; }
+        std::size_t state() const { return token_state_; }
+
+        string_type str_;
+        mutable IdType id_;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Lex generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Modifiers>
+    struct make_primitive<T, Modifiers
+      , typename enable_if<traits::is_string<T> >::type>
+    {
+        typedef typename add_const<T>::type const_string;
+        typedef string_token_def<const_string> result_type;
+
+        result_type operator()(
+            typename add_reference<const_string>::type str, unused_type) const
+        {
+            return result_type(str, std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename CharEncoding, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef typename add_const<A0>::type const_string;
+        typedef string_token_def<const_string, std::size_t, CharEncoding> 
+            result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args), std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename CharEncoding, typename A0, typename A1>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector2<A0, A1> >
+      , Modifiers>
+    {
+        typedef typename add_const<A0>::type const_string;
+        typedef string_token_def<const_string, A1, CharEncoding> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(term.args), fusion::at_c<1>(term.args));
+        }
+    };
+}}}  // namespace boost::spirit::lex
+
+#endif 
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions.hpp
new file mode 100644 (file)
index 0000000..8467560
--- /dev/null
@@ -0,0 +1,205 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_SUPPORT_FUNCTIONS_JUN_08_2009_0211PM)
+#define SPIRIT_LEX_SUPPORT_FUNCTIONS_JUN_08_2009_0211PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+#include <boost/spirit/home/lex/lexer/pass_flags.hpp>
+
+#include <boost/spirit/home/lex/lexer/support_functions_expression.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object less_type is used by the implementation of the 
+    // support function lex::less(). Its functionality is equivalent to flex' 
+    // function yyless(): it returns an iterator positioned to the nth input 
+    // character beyond the current start iterator (i.e. by assigning the 
+    // return value to the placeholder '_end' it is possible to return all but
+    // the first n characters of the current token back to the input stream. 
+    //
+    //  This Phoenix actor is invoked whenever the function lex::less(n) is 
+    //  used inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ _end = lex::less(4) ];
+    //
+    //  The example shows how to limit the length of the matched identifier to 
+    //  four characters.
+    //
+    //  Note: the function lex::less() has no effect if used on it's own, you 
+    //        need to use the returned result in order to make use of its 
+    //        functionality.
+    template <typename Actor>
+    struct less_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename remove_reference< 
+                typename remove_const<
+                    typename mpl::at_c<typename Env::args_type, 4>::type
+                >::type
+            >::type context_type;
+            typedef typename context_type::base_iterator_type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type 
+        eval(Env const& env) const
+        {
+            typename result<Env>::type it;
+            return fusion::at_c<4>(env.args()).less(it, actor_());
+        }
+
+        less_type(Actor const& actor)
+          : actor_(actor) {}
+
+        Actor actor_;
+    };
+
+    //  The function lex::less() is used to create a Phoenix actor allowing to
+    //  implement functionality similar to flex' function yyless().
+    template <typename T>
+    inline typename expression::less<
+        typename phoenix::as_actor<T>::type
+    >::type const
+    less(T const& v)
+    {
+        return expression::less<T>::make(phoenix::as_actor<T>::convert(v));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object more_type is used by the implementation of the  
+    // support function lex::more(). Its functionality is equivalent to flex' 
+    // function yymore(): it tells the lexer that the next time it matches a 
+    // rule, the corresponding token should be appended onto the current token 
+    // value rather than replacing it.
+    //
+    //  This Phoenix actor is invoked whenever the function lex::more(n) is 
+    //  used inside a lexer semantic action:
+    //
+    //      lex::token_def<> identifier = "[a-zA-Z_][a-zA-Z0-9_]*";
+    //      this->self = identifier [ lex::more() ];
+    //
+    //  The example shows how prefix the next matched token with the matched
+    //  identifier.
+    struct more_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef void type;
+        };
+
+        template <typename Env>
+        void eval(Env const& env) const
+        {
+            fusion::at_c<4>(env.args()).more();
+        }
+    };
+
+    //  The function lex::more() is used to create a Phoenix actor allowing to
+    //  implement functionality similar to flex' function yymore(). 
+    //inline expression::more<mpl::void_>::type const
+    inline phoenix::actor<more_type> more()
+    {
+        return phoenix::actor<more_type>();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The function object lookahead_type is used by the implementation of the  
+    // support function lex::lookahead(). Its functionality is needed to 
+    // emulate the flex' lookahead operator a/b. Use lex::lookahead() inside
+    // of lexer semantic actions to test whether the argument to this function
+    // matches the current look ahead input. lex::lookahead() can be used with
+    // either a token id or a token_def instance as its argument. It returns
+    // a bool indicating whether the look ahead has been matched.
+    template <typename IdActor, typename StateActor>
+    struct lookahead_type
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef bool type;
+        };
+
+        template <typename Env>
+        bool eval(Env const& env) const
+        {
+            return fusion::at_c<4>(env.args()).
+                lookahead(id_actor_(), state_actor_());
+        }
+
+        lookahead_type(IdActor const& id_actor, StateActor const& state_actor)
+          : id_actor_(id_actor), state_actor_(state_actor) {}
+
+        IdActor id_actor_;
+        StateActor state_actor_;
+    };
+
+    //  The function lex::lookahead() is used to create a Phoenix actor 
+    //  allowing to implement functionality similar to flex' lookahead operator
+    //  a/b.
+    template <typename T>
+    inline typename expression::lookahead<
+        typename phoenix::as_actor<T>::type
+      , typename phoenix::as_actor<std::size_t>::type
+    >::type const
+    lookahead(T const& id)
+    {
+        typedef typename phoenix::as_actor<T>::type id_actor_type;
+        typedef typename phoenix::as_actor<std::size_t>::type state_actor_type;
+
+        return expression::lookahead<id_actor_type, state_actor_type>::make(
+            phoenix::as_actor<T>::convert(id),
+            phoenix::as_actor<std::size_t>::convert(std::size_t(~0)));
+    }
+
+    template <typename Attribute, typename Char, typename Idtype>
+    inline typename expression::lookahead<
+        typename phoenix::as_actor<Idtype>::type
+      , typename phoenix::as_actor<std::size_t>::type
+    >::type const
+    lookahead(token_def<Attribute, Char, Idtype> const& tok)
+    {
+        typedef typename phoenix::as_actor<Idtype>::type id_actor_type;
+        typedef typename phoenix::as_actor<std::size_t>::type state_actor_type;
+
+        std::size_t state = tok.state();
+
+        // The following assertion fires if you pass a token_def instance to 
+        // lex::lookahead without first associating this instance with the 
+        // lexer.
+        BOOST_ASSERT(std::size_t(~0) != state && 
+            "token_def instance not associated with lexer yet");
+
+        return expression::lookahead<id_actor_type, state_actor_type>::make(
+            phoenix::as_actor<Idtype>::convert(tok.id()),
+            phoenix::as_actor<std::size_t>::convert(state));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    inline BOOST_SCOPED_ENUM(pass_flags) ignore()
+    {
+        return pass_flags::pass_ignore;
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions_expression.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/support_functions_expression.hpp
new file mode 100644 (file)
index 0000000..3c7572d
--- /dev/null
@@ -0,0 +1,102 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2011 Thomas Heller
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_LEX_SUPPORT_FUNCTIONS_EXPRESSION_MAR_22_2011_0711PM)
+#define SPIRIT_LEX_SUPPORT_FUNCTIONS_EXPRESSION_MAR_22_2011_0711PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename> struct less_type;
+    struct more_type;
+    template <typename, typename> struct lookahead_type;
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_PHOENIX_DEFINE_EXPRESSION(
+    (boost)(spirit)(lex)(less)
+  , (boost::phoenix::meta_grammar)
+)
+
+BOOST_PHOENIX_DEFINE_EXPRESSION(
+    (boost)(spirit)(lex)(lookahead)
+  , (boost::phoenix::meta_grammar)
+    (boost::phoenix::meta_grammar)
+)
+
+namespace boost { namespace phoenix
+{
+
+    namespace result_of
+    {
+        template <>
+        struct is_nullary<custom_terminal<boost::spirit::lex::more_type> >
+          : mpl::false_
+        {};
+    }
+    
+    template <typename Dummy>
+    struct is_custom_terminal<boost::spirit::lex::more_type, Dummy> : mpl::true_ {};
+    
+    template <typename Dummy>
+    struct custom_terminal<boost::spirit::lex::more_type, Dummy>
+        : proto::call<
+            v2_eval(
+                proto::make<boost::spirit::lex::more_type()>
+              , proto::call<functional::env(proto::_state)>
+            )
+        >
+    {};
+
+
+    template <typename Dummy>
+    struct is_nullary::when<spirit::lex::rule::less, Dummy>
+      : proto::make<mpl::false_()>
+    {};
+
+    template <typename Dummy>
+    struct default_actions::when<spirit::lex::rule::less, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<
+                    spirit::lex::less_type<proto::_child0>(proto::_child0)
+                >
+              , _env
+            )
+        >
+    {};
+
+    template <typename Dummy>
+    struct is_nullary::when<spirit::lex::rule::lookahead, Dummy>
+      : proto::make<mpl::false_()>
+    {};
+
+    template <typename Dummy>
+    struct default_actions::when<spirit::lex::rule::lookahead, Dummy>
+      : proto::call<
+            v2_eval(
+                proto::make<
+                    spirit::lex::lookahead_type<
+                        proto::_child0
+                      , proto::_child1
+                    >(
+                        proto::_child0
+                      , proto::_child1
+                    )
+                >
+              , _env
+            )
+        >
+    {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/terminals.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/terminals.hpp
new file mode 100644 (file)
index 0000000..b5059cc
--- /dev/null
@@ -0,0 +1,23 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TERMINALS_APR_20_2009_0550PM)
+#define BOOST_SPIRIT_LEX_TERMINALS_APR_20_2009_0550PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Define a more convenient name for an omitted token attribute type
+    typedef spirit::omit_type omit;
+    using spirit::omit_type;
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/token_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer/token_def.hpp
new file mode 100644 (file)
index 0000000..1bd2534
--- /dev/null
@@ -0,0 +1,246 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_TOKEN_DEF_MAR_13_2007_0145PM)
+#define BOOST_SPIRIT_LEX_TOKEN_DEF_MAR_13_2007_0145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/construct.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/lex/reference.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/lex/lexer/terminals.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/variant.hpp>
+
+#include <string>
+#include <cstdlib>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This component represents a token definition
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Attribute = unused_type
+      , typename Char = char
+      , typename Idtype = std::size_t>
+    struct token_def
+      : proto::extends<
+            typename proto::terminal<
+                lex::reference<token_def<Attribute, Char, Idtype> const, Idtype> 
+            >::type
+          , token_def<Attribute, Char, Idtype> >
+      , qi::parser<token_def<Attribute, Char, Idtype> >
+      , lex::lexer_type<token_def<Attribute, Char, Idtype> >
+    {
+    private:
+        // initialize proto base class
+        typedef lex::reference<token_def const, Idtype> reference_;
+        typedef typename proto::terminal<reference_>::type terminal_type;
+        typedef proto::extends<terminal_type, token_def> proto_base_type;
+
+        static std::size_t const all_states_id = static_cast<std::size_t>(-2);
+
+    public:
+        // Qi interface: meta-function calculating parser return type
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            //  The return value of the token_def is either the specified 
+            //  attribute type, or the pair of iterators from the match of the 
+            //  corresponding token (if no attribute type has been specified),
+            //  or unused_type (if omit has been specified).
+            typedef typename Iterator::base_iterator_type iterator_type;
+            typedef typename mpl::if_<
+                traits::not_is_unused<Attribute>
+              , typename mpl::if_<
+                    is_same<Attribute, lex::omit>, unused_type, Attribute
+                >::type
+              , iterator_range<iterator_type>
+            >::type type;
+        };
+
+    public:
+        // Qi interface: parse functionality
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute_>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute_& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                typedef typename 
+                    boost::detail::iterator_traits<Iterator>::value_type 
+                token_type;
+
+                //  If the following assertion fires you probably forgot to  
+                //  associate this token definition with a lexer instance.
+                BOOST_ASSERT(std::size_t(~0) != token_state_);
+
+                token_type const& t = *first;
+                if (token_id_ == t.id() && 
+                    (all_states_id == token_state_ || token_state_ == t.state())) 
+                {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            if (0 == def_.which()) 
+                return info("token_def", boost::get<string_type>(def_));
+
+            return info("token_def", boost::get<char_type>(def_));
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // Lex interface: collect token definitions and put it into the 
+        // provided lexer def
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            std::size_t state_id = lexdef.add_state(state.c_str());
+
+            // If the following assertion fires you are probably trying to use 
+            // a single token_def instance in more than one lexer state. This 
+            // is not possible. Please create a separate token_def instance 
+            // from the same regular expression for each lexer state it needs 
+            // to be associated with.
+            BOOST_ASSERT(
+                (std::size_t(~0) == token_state_ || state_id == token_state_) &&
+                "Can't use single token_def with more than one lexer state");
+
+            char_type const* target = targetstate.empty() ? 0 : targetstate.c_str();
+            if (target)
+                lexdef.add_state(target);
+
+            token_state_ = state_id;
+            if (0 == token_id_)
+                token_id_ = lexdef.get_next_id();
+
+            if (0 == def_.which()) {
+                unique_id_ = lexdef.add_token(state.c_str()
+                  , boost::get<string_type>(def_), token_id_, target);
+            }
+            else {
+                unique_id_ = lexdef.add_token(state.c_str()
+                  , boost::get<char_type>(def_), token_id_, target);
+            }
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef&) const {}
+
+    public:
+        typedef Char char_type;
+        typedef Idtype id_type;
+        typedef std::basic_string<char_type> string_type;
+
+        // Lex interface: constructing token definitions
+        token_def() 
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_('\0'), token_id_()
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        token_def(token_def const& rhs) 
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(rhs.def_), token_id_(rhs.token_id_)
+          , unique_id_(rhs.unique_id_), token_state_(rhs.token_state_) {}
+
+        explicit token_def(char_type def_, Idtype id_ = Idtype())
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(def_)
+          , token_id_(Idtype() == id_ ? Idtype(def_) : id_)
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        explicit token_def(string_type const& def_, Idtype id_ = Idtype())
+          : proto_base_type(terminal_type::make(reference_(*this)))
+          , def_(def_), token_id_(id_)
+          , unique_id_(std::size_t(~0)), token_state_(std::size_t(~0)) {}
+
+        template <typename String>
+        token_def& operator= (String const& definition)
+        {
+            def_ = definition;
+            token_id_ = Idtype();
+            unique_id_ = std::size_t(~0);
+            token_state_ = std::size_t(~0);
+            return *this;
+        }
+        token_def& operator= (token_def const& rhs)
+        {
+            def_ = rhs.def_;
+            token_id_ = rhs.token_id_;
+            unique_id_ = rhs.unique_id_;
+            token_state_ = rhs.token_state_;
+            return *this;
+        }
+
+        // general accessors 
+        Idtype const& id() const { return token_id_; }
+        void id(Idtype const& id) { token_id_ = id; }
+        std::size_t unique_id() const { return unique_id_; }
+
+        string_type definition() const 
+        { 
+            return (0 == def_.which()) ? 
+                boost::get<string_type>(def_) : 
+                string_type(1, boost::get<char_type>(def_));
+        }
+        std::size_t state() const { return token_state_; }
+
+    private:
+        variant<string_type, char_type> def_;
+        mutable Idtype token_id_;
+        mutable std::size_t unique_id_;
+        mutable std::size_t token_state_;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Attribute, typename Char, typename Idtype
+      , typename Attr, typename Context, typename Iterator>
+    struct handles_container<
+            lex::token_def<Attribute, Char, Idtype>, Attr, Context, Iterator>
+      : traits::is_container<
+            typename attribute_of<
+                lex::token_def<Attribute, Char, Idtype>, Context, Iterator
+            >::type>
+    {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_lexertl.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_lexertl.hpp
new file mode 100644 (file)
index 0000000..0706bd9
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_LEXERTL_MAR_17_2007_1008PM)
+#define BOOST_SPIRIT_LEX_LEXERTL_MAR_17_2007_1008PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//  These includes make available everything needed to use lexertl either 
+//  standalone or as a lexer component for spirit::qi
+#include <boost/spirit/home/lex.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/lexer.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_static_lexertl.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_static_lexertl.hpp
new file mode 100644 (file)
index 0000000..e959760
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STATIC_LEXERTL_FEB_11_2008_1045AM)
+#define BOOST_SPIRIT_LEX_STATIC_LEXERTL_FEB_11_2008_1045AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//  These includes make available everything needed to use lexertl either 
+//  standalone or as a lexer component for spirit::qi
+#include <boost/spirit/home/lex.hpp>
+#include <boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_type.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/lexer_type.hpp
new file mode 100644 (file)
index 0000000..e58bce0
--- /dev/null
@@ -0,0 +1,100 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_TYPE_APR_20_2009_0759PM)
+#define BOOST_SPIRIT_LEXER_TYPE_APR_20_2009_0759PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Derived>
+    struct lexer_type
+    {
+        struct lexer_id;
+        typedef Derived derived_type;
+        typedef lex::domain domain;
+
+        // Requirement: l.collect(def, state, targetstate) -> void
+        //
+        //  l:           a lexer component
+        //  def:         token definition container
+        //  state:       lexer state this token definition needs to be added to
+        //  targetstate: an optional lexer state the lexer should be switched 
+        //               into after matching this token 
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+
+    template <typename Derived>
+    struct primitive_lexer : lexer_type<Derived>
+    {
+        struct primitive_lexer_id;
+    };
+
+    template <typename Derived>
+    struct unary_lexer : lexer_type<Derived>
+    {
+        struct unary_lexer_id;
+
+        // Requirement: l.subject -> subject lexer component
+        //
+        // l:   a unary lexer component
+
+        // Requirement: L::subject_type -> subject lexer component type
+        //
+        // L:   a unary lexer component type
+    };
+
+    template <typename Derived>
+    struct nary_lexer : lexer_type<Derived>
+    {
+        struct nary_lexer_id;
+
+        // Requirement: l.elements -> fusion sequence
+        //
+        // l:   a composite lexer component
+
+        // Requirement: L::elements_type -> fusion sequence
+        //
+        // L:   a composite lexer component type
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_lexer_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_lexer_id)
+    }
+
+    template <typename T>
+    struct is_lexer : detail::has_lexer_id<T> {};
+
+    template <typename T>
+    struct is_primitive_lexer : detail::has_primitive_lexer_id<T> {};
+
+    template <typename T>
+    struct is_unary_lexer : detail::has_unary_lexer_id<T> {};
+
+    template <typename T>
+    struct is_nary_lexer : detail::has_nary_lexer_id<T> {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/meta_compiler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/meta_compiler.hpp
new file mode 100644 (file)
index 0000000..6e13d37
--- /dev/null
@@ -0,0 +1,104 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_META_COMPILER_APR_20_2009_0756PM)
+#define BOOST_SPIRIT_LEX_META_COMPILER_APR_20_2009_0756PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/lex/domain.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename T>
+    struct use_terminal<lex::domain, T
+      , typename enable_if<traits::is_lexer<T> >::type> // enables lexers
+      : mpl::true_ {};
+
+    namespace lex
+    {
+        template <typename T, typename Modifiers, typename Enable = void>
+        struct make_primitive // by default, return it as-is
+        {
+            typedef T result_type;
+
+            template <typename T_>
+            T_& operator()(T_& val, unused_type) const
+            {
+                return val;
+            }
+
+            template <typename T_>
+            T_ const& operator()(T_ const& val, unused_type) const
+            {
+                return val;
+            }
+        };
+
+        template <typename Tag, typename Elements
+          , typename Modifiers, typename Enable = void>
+        struct make_composite;
+    }
+
+    // Lex primitive meta-compiler
+    template <>
+    struct make_component<lex::domain, proto::tag::terminal>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename lex::make_primitive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            typedef typename remove_const<typename Elements::car_type>::type term;
+            return lex::make_primitive<term, Modifiers>()(elements.car, modifiers);
+        }
+    };
+
+    // Lex composite meta-compiler
+    template <typename Tag>
+    struct make_component<lex::domain, Tag>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                lex::make_composite<Tag, Elements
+                  , typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return lex::make_composite<Tag, Elements, Modifiers>()(
+                elements, modifiers);
+        }
+    };
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/primitives.hpp
new file mode 100644 (file)
index 0000000..226ce23
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2010 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_PRIMITIVES_SEP_12_2009_0234PM)
+#define BOOST_SPIRIT_LEXER_PRIMITIVES_SEP_12_2009_0234PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/char_token_def.hpp>
+#include <boost/spirit/home/lex/lexer/string_token_def.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi.hpp
new file mode 100644 (file)
index 0000000..3b4e704
--- /dev/null
@@ -0,0 +1,20 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_QI_APR_21_2009_0205PM)
+#define BOOST_SPIRIT_LEXER_QI_APR_21_2009_0205PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/qi/state_switcher.hpp>
+#include <boost/spirit/home/lex/qi/in_state.hpp>
+#include <boost/spirit/home/lex/qi/plain_token.hpp>
+#include <boost/spirit/home/lex/qi/plain_tokenid.hpp>
+#include <boost/spirit/home/lex/qi/plain_tokenid_mask.hpp>
+#include <boost/spirit/home/lex/qi/plain_raw_token.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/in_state.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/in_state.hpp
new file mode 100644 (file)
index 0000000..fe7580b
--- /dev/null
@@ -0,0 +1,32 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_IN_STATE_OCT_09_2007_0748PM)
+#define BOOST_SPIRIT_LEX_IN_STATE_OCT_09_2007_0748PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/proto/core.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The following is a helper template allowing to use the in_state()[] as 
+    // a skip parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Skipper, typename String = char const*>
+    struct in_state_skipper
+      : proto::subscript<
+            typename proto::terminal<
+                terminal_ex<tag::in_state, fusion::vector1<String> > 
+            >::type
+          , Skipper
+        >::type {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_raw_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_raw_token.hpp
new file mode 100644 (file)
index 0000000..ebe980d
--- /dev/null
@@ -0,0 +1,149 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_RAW_TOKEN_JUN_03_2011_0853PM)
+#define BOOST_SPIRIT_LEX_PLAIN_RAW_TOKEN_JUN_03_2011_0853PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/lexical_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables raw_token
+    template <>
+    struct use_terminal<qi::domain, tag::raw_token>
+      : mpl::true_ {};
+
+    // enables raw_token(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::raw_token, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables *lazy* raw_token(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::raw_token, 1
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::raw_token;
+#endif
+    using spirit::raw_token_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename TokenId>
+    struct plain_raw_token
+      : primitive_parser<plain_raw_token<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        plain_raw_token(TokenId const& id)
+          : id(id) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (id_type(~0) == id_type(id) || id_type(id) == t.id()) {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("raw_token",
+                "raw_token(" + boost::lexical_cast<utf8_string>(id) + ")");
+        }
+
+        TokenId id;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::raw_token, Modifiers>
+    {
+        typedef plain_raw_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::raw_token, fusion::vector1<TokenId> >
+      , Modifiers>
+    {
+        typedef plain_raw_token<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Idtype, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_raw_token<Idtype>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_token.hpp
new file mode 100644 (file)
index 0000000..b77e2a9
--- /dev/null
@@ -0,0 +1,242 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_TOKEN_NOV_11_2007_0451PM)
+#define BOOST_SPIRIT_LEX_PLAIN_TOKEN_NOV_11_2007_0451PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/lexical_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables token
+    template <>
+    struct use_terminal<qi::domain, tag::token>
+      : mpl::true_ {};
+
+    // enables token(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::token, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables token(idmin, idmax)
+    template <typename A0, typename A1>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::token, fusion::vector2<A0, A1> >
+    > : mpl::and_<
+            mpl::or_<is_integral<A0>, is_enum<A0> >
+          , mpl::or_<is_integral<A1>, is_enum<A1> >
+        > {};
+
+    // enables *lazy* token(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::token, 1
+    > : mpl::true_ {};
+
+    // enables *lazy* token(idmin, idmax)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::token, 2
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::token;
+#endif
+    using spirit::token_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename TokenId>
+    struct plain_token
+      : primitive_parser<plain_token<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename Iterator::base_iterator_type iterator_type;
+            typedef iterator_range<iterator_type> type;
+        };
+
+        plain_token(TokenId const& id)
+          : id(id) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (id_type(~0) == id_type(id) || id_type(id) == t.id()) {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("token",
+                "token(" + boost::lexical_cast<utf8_string>(id) + ")");
+        }
+
+        TokenId id;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename TokenId>
+    struct plain_token_range
+      : primitive_parser<plain_token_range<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename Iterator::base_iterator_type iterator_type;
+            typedef iterator_range<iterator_type> type;
+        };
+
+        plain_token_range(TokenId const& idmin, TokenId const& idmax)
+          : idmin(idmin), idmax(idmax) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (id_type(idmin) >= t.id() && id_type(idmin) <= t.id())
+                {
+                    spirit::traits::assign_to(t, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("token_range"
+              , "token(" +
+                    boost::lexical_cast<utf8_string>(idmin) + ", " +
+                    boost::lexical_cast<utf8_string>(idmax) + ")"
+            );
+            return info("token_range");
+        }
+
+        TokenId idmin, idmax;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::token, Modifiers>
+    {
+        typedef plain_token<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::token, fusion::vector1<TokenId> >
+      , Modifiers>
+    {
+        typedef plain_token<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::token, fusion::vector2<TokenId, TokenId> >
+      , Modifiers>
+    {
+        typedef plain_token_range<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)
+              , fusion::at_c<1>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Idtype, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_token<Idtype>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+
+    template<typename Idtype, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_token_range<Idtype>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid.hpp
new file mode 100644 (file)
index 0000000..7a70c77
--- /dev/null
@@ -0,0 +1,242 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_TOKENID_NOV_26_2010_0944AM)
+#define BOOST_SPIRIT_LEX_PLAIN_TOKENID_NOV_26_2010_0944AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/lexical_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables tokenid
+    template <>
+    struct use_terminal<qi::domain, tag::tokenid>
+      : mpl::true_ {};
+
+    // enables tokenid(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::tokenid, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables tokenid(idmin, idmax)
+    template <typename A0, typename A1>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::tokenid, fusion::vector2<A0, A1> >
+    > : mpl::and_<
+            mpl::or_<is_integral<A0>, is_enum<A0> >
+          , mpl::or_<is_integral<A1>, is_enum<A1> >
+        > {};
+
+    // enables *lazy* tokenid(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::tokenid, 1
+    > : mpl::true_ {};
+
+    // enables *lazy* tokenid(idmin, idmax)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::tokenid, 2
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::tokenid;
+#endif
+    using spirit::tokenid_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The plain_tokenid represents a simple token defined by the lexer inside
+    // a Qi grammar. The difference to plain_token is that it exposes the
+    // matched token id instead of the iterator_range of the matched input.
+    template <typename TokenId>
+    struct plain_tokenid
+      : primitive_parser<plain_tokenid<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef TokenId type;
+        };
+
+        plain_tokenid(TokenId const& id)
+          : id(id) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (id_type(~0) == id_type(id) || id_type(id) == t.id()) {
+                    spirit::traits::assign_to(id, attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("tokenid",
+                "tokenid(" + boost::lexical_cast<utf8_string>(id) + ")");
+        }
+
+        TokenId id;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename TokenId>
+    struct plain_tokenid_range
+      : primitive_parser<plain_tokenid_range<TokenId> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef TokenId type;
+        };
+
+        plain_tokenid_range(TokenId const& idmin, TokenId const& idmax)
+          : idmin(idmin), idmax(idmax) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the id this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if (id_type(idmin) >= t.id() && id_type(idmin) <= t.id())
+                {
+                    spirit::traits::assign_to(t.id(), attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("tokenid_range"
+              , "token(" +
+                    boost::lexical_cast<utf8_string>(idmin) + ", " +
+                    boost::lexical_cast<utf8_string>(idmax) + ")"
+            );
+        }
+
+        TokenId idmin, idmax;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::tokenid, Modifiers>
+    {
+        typedef plain_tokenid<std::size_t> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(std::size_t(~0));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::tokenid, fusion::vector1<TokenId> >
+      , Modifiers>
+    {
+        typedef plain_tokenid<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename Modifiers, typename TokenId>
+    struct make_primitive<terminal_ex<tag::tokenid, fusion::vector2<TokenId, TokenId> >
+      , Modifiers>
+    {
+        typedef plain_tokenid_range<TokenId> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)
+              , fusion::at_c<1>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Idtype, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_tokenid<Idtype>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+
+    template<typename Idtype, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_tokenid_range<Idtype>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid_mask.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/plain_tokenid_mask.hpp
new file mode 100644 (file)
index 0000000..92ac126
--- /dev/null
@@ -0,0 +1,138 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_PLAIN_TOKENID_MASK_JUN_03_2011_0929PM)
+#define BOOST_SPIRIT_LEX_PLAIN_TOKENID_MASK_JUN_03_2011_0929PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/lexical_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables tokenid_mask(id)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::tokenid_mask, fusion::vector1<A0> >
+    > : mpl::or_<is_integral<A0>, is_enum<A0> > {};
+
+    // enables *lazy* tokenid_mask(id)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::tokenid_mask, 1
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::tokenid_mask;
+#endif
+    using spirit::tokenid_mask_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The plain_tokenid represents a simple token defined by the lexer inside
+    // a Qi grammar. The difference to plain_token is that it exposes the
+    // matched token id instead of the iterator_range of the matched input.
+    // Additionally it applies the given mask to the matched token id.
+    template <typename Mask>
+    struct plain_tokenid_mask
+      : primitive_parser<plain_tokenid_mask<Mask> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef Mask type;
+        };
+
+        plain_tokenid_mask(Mask const& mask)
+          : mask(mask) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            if (first != last) {
+                // simply match the token id with the mask this component has
+                // been initialized with
+
+                typedef typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                token_type;
+                typedef typename token_type::id_type id_type;
+
+                token_type const& t = *first;
+                if ((t.id() & mask) == id_type(mask))
+                {
+                    spirit::traits::assign_to(t.id(), attr);
+                    ++first;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("tokenid_mask",
+                "tokenid_mask(" + boost::lexical_cast<utf8_string>(mask) + ")");
+        }
+
+        Mask mask;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename Mask>
+    struct make_primitive<terminal_ex<tag::tokenid_mask, fusion::vector1<Mask> >
+      , Modifiers>
+    {
+        typedef plain_tokenid_mask<Mask> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Mask, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::plain_tokenid_mask<Mask>, Attr, Context, Iterator>
+      : mpl::true_
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/state_switcher.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/qi/state_switcher.hpp
new file mode 100644 (file)
index 0000000..a8fd55a
--- /dev/null
@@ -0,0 +1,270 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c)      2010 Bryce Lelbach
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_STATE_SWITCHER_SEP_23_2007_0714PM)
+#define BOOST_SPIRIT_LEX_STATE_SWITCHER_SEP_23_2007_0714PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/mpl/print.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables set_state(s)
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::set_state, fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    // enables *lazy* set_state(s)
+    template <>
+    struct use_lazy_terminal<
+        qi::domain, tag::set_state, 1
+    > : mpl::true_ {};
+
+    // enables in_state(s)[p]
+    template <typename A0>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::in_state, fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    // enables *lazy* in_state(s)[p]
+    template <>
+    struct use_lazy_directive<
+        qi::domain, tag::in_state, 1
+    > : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::set_state;
+    using spirit::in_state;
+#endif
+    using spirit::set_state_type;
+    using spirit::in_state_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Iterator>
+        inline std::size_t
+        set_lexer_state(Iterator& it, std::size_t state)
+        {
+            return it.set_state(state);
+        }
+
+        template <typename Iterator, typename Char>
+        inline std::size_t
+        set_lexer_state(Iterator& it, Char const* statename)
+        {
+            std::size_t state = it.map_state(statename);
+
+            //  If the following assertion fires you probably used the
+            //  set_state(...) or in_state(...)[...] lexer state switcher with
+            //  a lexer state name unknown to the lexer (no token definitions
+            //  have been associated with this lexer state).
+            BOOST_ASSERT(std::size_t(~0) != state);
+            return it.set_state(state);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Parser switching the state of the underlying lexer component.
+    //  This parser gets used for the set_state(...) construct.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename State>
+    struct state_switcher
+      : primitive_parser<state_switcher<State> >
+    {
+        typedef typename 
+            remove_const<typename traits::char_type_of<State>::type>::type 
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        state_switcher(char_type const* state)
+          : state(state) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            // just switch the state and return success
+            detail::set_lexer_state(first, state.c_str());
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("set_state");
+        }
+
+        string_type state;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Iterator>
+        struct reset_state_on_exit
+        {
+            template <typename State>
+            reset_state_on_exit(Iterator& it_, State state_)
+              : it(it_)
+              , state(set_lexer_state(it_, traits::get_c_string(state_))) 
+            {}
+
+            ~reset_state_on_exit()
+            {
+                // reset the state of the underlying lexer instance
+                set_lexer_state(it, state);
+            }
+
+            Iterator& it;
+            std::size_t state;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            reset_state_on_exit& operator= (reset_state_on_exit const&);
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser, which switches the state of the underlying lexer component
+    // for the execution of the embedded sub-parser, switching the state back
+    // afterwards. This parser gets used for the in_state(...)[p] construct.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State>
+    struct state_switcher_context 
+      : unary_parser<state_switcher_context<Subject, State> >
+    {
+        typedef Subject subject_type;
+        typedef typename traits::char_type_of<State>::type char_type;
+        typedef typename remove_const<char_type>::type non_const_char_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        state_switcher_context(Subject const& subject
+              , typename add_reference<State>::type state)
+          : subject(subject), state(state) {}
+
+        // The following conversion constructors are needed to make the 
+        // in_state_switcher template usable
+        template <typename String>
+        state_switcher_context(
+                state_switcher_context<Subject, String> const& rhs)
+          : subject(rhs.subject), state(traits::get_c_string(rhs.state)) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            qi::skip_over(first, last, skipper);   // always do a pre-skip
+
+            // the state has to be reset at exit in any case
+            detail::reset_state_on_exit<Iterator> guard(first, state);
+            return subject.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("in_state", subject.what(context));
+        }
+
+        Subject subject;
+        State state;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        state_switcher_context& operator= (state_switcher_context const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename State>
+    struct make_primitive<terminal_ex<tag::set_state, fusion::vector1<State> >
+      , Modifiers, typename enable_if<traits::is_string<State> >::type>
+    {
+        typedef typename add_const<State>::type const_string;
+        typedef state_switcher<const_string> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(traits::get_c_string(fusion::at_c<0>(term.args)));
+        }
+    };
+
+    template <typename State, typename Subject, typename Modifiers>
+    struct make_directive<terminal_ex<tag::in_state, fusion::vector1<State> >
+      , Subject, Modifiers>
+    {
+        typedef typename add_const<State>::type const_string;
+        typedef state_switcher_context<Subject, const_string> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State>
+    struct has_semantic_action<qi::state_switcher_context<Subject, State> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::state_switcher_context<Subject, State>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {}; 
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/reference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/reference.hpp
new file mode 100644 (file)
index 0000000..d1aaabf
--- /dev/null
@@ -0,0 +1,85 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEX_REFERENCE_APR_20_2009_0827AM)
+#define BOOST_SPIRIT_LEX_REFERENCE_APR_20_2009_0827AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/meta_compiler.hpp>
+#include <boost/spirit/home/lex/lexer_type.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // reference is a lexer that references another lexer (its Subject)
+    // all lexer components are at the same time
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename IdType = unused_type>
+    struct reference; 
+
+    template <typename Subject>
+    struct reference<Subject, unused_type>
+      : qi::reference<Subject>
+      , lexer_type<reference<Subject> >
+    {
+        reference(Subject& subject)
+          : qi::reference<Subject>(subject) {}
+
+        template <typename LexerDef, typename String>
+        void collect(LexerDef& lexdef, String const& state
+          , String const& targetstate) const
+        {
+            this->ref.get().collect(lexdef, state, targetstate);
+        }
+
+        template <typename LexerDef>
+        void add_actions(LexerDef& lexdef) const 
+        {
+            this->ref.get().add_actions(lexdef);
+        }
+    };
+
+    template <typename Subject, typename IdType>
+    struct reference : reference<Subject>
+    {
+        reference(Subject& subject)
+          : reference<Subject>(subject) {}
+
+        IdType id() const 
+        { 
+            return this->ref.get().id(); 
+        }
+        std::size_t unique_id() const 
+        { 
+            return this->ref.get().unique_id(); 
+        }
+        std::size_t state() const 
+        { 
+            return this->ref.get().state(); 
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename IdType
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<lex::reference<Subject, IdType>
+          , Attribute, Context, Iterator>
+      : handles_container<
+            typename remove_const<Subject>::type, Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse.hpp
new file mode 100644 (file)
index 0000000..db12935
--- /dev/null
@@ -0,0 +1,325 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_LEXER_PARSE_NOV_17_2007_0246PM)
+#define BOOST_SPIRIT_LEXER_PARSE_NOV_17_2007_0246PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/nonterminal/grammar.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/lex/lexer.hpp>
+#include <boost/mpl/assert.hpp>
+
+namespace boost { namespace spirit { namespace lex
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Import skip_flag enumerator type from Qi namespace
+    using qi::skip_flag;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize_and_parse() function is one of the main Spirit API 
+    //  functions. It simplifies using a lexer as the underlying token source
+    //  while parsing a given input sequence.
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to parse, the lexer object (built from the token definitions) 
+    //  and a parser object (built from the parser grammar definition).
+    //
+    //  The second version of this function additionally takes an attribute to 
+    //  be used as the top level data structure instance the parser should use 
+    //  to store the recognized input to.
+    //
+    //  The function returns true if the parsing succeeded (the given input
+    //  sequence has been successfully matched by the given grammar).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. This token sequence is passed to the parsing 
+    //                  process. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  xpr:            The grammar object (encoding the parser grammar) to be
+    //                  used to match the token sequence generated by the lex 
+    //                  object instance. The ParserExpr type must conform to 
+    //                  the grammar interface described in the corresponding 
+    //                  section of the documentation.
+    //  attr:           The top level attribute passed to the parser. It will 
+    //                  be populated during the parsing of the input sequence.
+    //                  On exit it will hold the 'parser result' corresponding 
+    //                  to the matched input sequence.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex,
+        ParserExpr const& xpr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(xpr).parse(
+            iter, lex.end(), unused, unused, unused);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Attribute>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& xpr, Attribute& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(xpr).parse(
+            iter, lex.end(), unused, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize_and_phrase_parse() function is one of the main Spirit API 
+    //  functions. It simplifies using a lexer as the underlying token source
+    //  while phrase parsing a given input sequence.
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to parse, the lexer object (built from the token definitions) 
+    //  and a parser object (built from the parser grammar definition). The 
+    //  additional skipper parameter will be used as the skip parser during
+    //  the parsing process.
+    //
+    //  The second version of this function additionally takes an attribute to 
+    //  be used as the top level data structure instance the parser should use 
+    //  to store the recognized input to.
+    //
+    //  The function returns true if the parsing succeeded (the given input
+    //  sequence has been successfully matched by the given grammar).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. This token sequence is passed to the parsing 
+    //                  process. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  xpr:            The grammar object (encoding the parser grammar) to be
+    //                  used to match the token sequence generated by the lex 
+    //                  object instance. The ParserExpr type must conform to 
+    //                  the grammar interface described in the corresponding 
+    //                  section of the documentation.
+    //  skipper:        The skip parser to be used while parsing the given 
+    //                  input sequence. Note, the skip parser will have to 
+    //                  act on the same token sequence as the main parser 
+    //                  'xpr'.
+    //  post_skip:      The post_skip flag controls whether the function will
+    //                  invoke an additional post skip after the main parser
+    //                  returned.
+    //  attr:           The top level attribute passed to the parser. It will 
+    //                  be populated during the parsing of the input sequence.
+    //                  On exit it will hold the 'parser result' corresponding 
+    //                  to the matched input sequence.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename spirit::result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        typename Lexer::iterator_type end = lex.end();
+        if (!compile<qi::domain>(xpr).parse(
+                iter, end, unused, skipper_, unused))
+            return false;
+
+        // do a final post-skip
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(iter, end, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, typename Attribute>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip, Attribute& attr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename spirit::result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        typename Lexer::iterator_type end = lex.end();
+        if (!compile<qi::domain>(xpr).parse(
+                iter, end, unused, skipper_, attr))
+            return false;
+
+        // do a final post-skip
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(iter, end, skipper_);
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, typename Attribute>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last
+      , Lexer const& lex, ParserExpr const& xpr, Skipper const& skipper
+      , Attribute& attr)
+    {
+        return tokenize_and_phrase_parse(first, last, lex, xpr, skipper
+          , skip_flag::postskip, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The tokenize() function is one of the main Spirit API functions. It 
+    //  simplifies using a lexer to tokenize a given input sequence. It's main
+    //  purpose is to use the lexer to tokenize all the input. 
+    //
+    //  The second version below discards all generated tokens afterwards. 
+    //  This is useful whenever all the needed functionality has been 
+    //  implemented directly inside the lexer semantic actions, which are being 
+    //  executed while the tokens are matched. 
+    //
+    //  The function takes a pair of iterators spanning the underlying input 
+    //  stream to scan, the lexer object (built from the token definitions),
+    //  and a (optional) functor being called for each of the generated tokens. 
+    //
+    //  The function returns true if the scanning of the input succeeded (the 
+    //  given input sequence has been successfully matched by the given token
+    //  definitions).
+    //
+    //  first, last:    The pair of iterators spanning the underlying input 
+    //                  sequence to parse. These iterators must at least 
+    //                  conform to the requirements of the std::intput_iterator 
+    //                  category.
+    //                  On exit the iterator 'first' will be updated to the 
+    //                  position right after the last successfully matched 
+    //                  token. 
+    //  lex:            The lexer object (encoding the token definitions) to be
+    //                  used to convert the input sequence into a sequence of 
+    //                  tokens. The LexerExpr type must conform to the 
+    //                  lexer interface described in the corresponding section
+    //                  of the documentation.
+    //  f:              A functor (callable object) taking a single argument of
+    //                  the token type and returning a bool, indicating whether
+    //                  the tokenization should be canceled.
+    //  initial_state:  The name of the state the lexer should start matching.
+    //                  The default value is zero, causing the lexer to start 
+    //                  in its 'INITIAL' state.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Token, typename F>
+        bool tokenize_callback(Token const& t, F f)
+        {
+            return f(t);
+        }
+
+        template <typename Token, typename Eval>
+        bool tokenize_callback(Token const& t, phoenix::actor<Eval> const& f)
+        {
+            f(t);
+            return true;
+        }
+
+        template <typename Token>
+        bool tokenize_callback(Token const& t, void (*f)(Token const&))
+        {
+            f(t);
+            return true;
+        }
+
+        template <typename Token>
+        bool tokenize_callback(Token const& t, bool (*f)(Token const&))
+        {
+            return f(t);
+        }
+    }
+
+    template <typename Iterator, typename Lexer, typename F>
+    inline bool
+    tokenize(Iterator& first, Iterator last, Lexer const& lex, F f
+      , typename Lexer::char_type const* initial_state = 0)
+    {
+        typedef typename Lexer::iterator_type iterator_type;
+
+        iterator_type iter = lex.begin(first, last, initial_state);
+        iterator_type end = lex.end();
+        for (/**/; iter != end && token_is_valid(*iter); ++iter) 
+        {
+            if (!detail::tokenize_callback(*iter, f))
+                return false;
+        }
+        return (iter == end) ? true : false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer>
+    inline bool
+    tokenize(Iterator& first, Iterator last, Lexer const& lex
+      , typename Lexer::char_type const* initial_state = 0)
+    {
+        typedef typename Lexer::iterator_type iterator_type;
+
+        iterator_type iter = lex.begin(first, last, initial_state);
+        iterator_type end = lex.end();
+
+        while (iter != end && token_is_valid(*iter))
+            ++iter;
+
+        return (iter == end) ? true : false;
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/lex/tokenize_and_parse_attr.hpp
new file mode 100644 (file)
index 0000000..98d191d
--- /dev/null
@@ -0,0 +1,114 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2009 Carl Barron
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_LEXER_PARSE_ATTR_MAY_27_2009_0926AM)
+#define BOOST_SPIRIT_LEXER_PARSE_ATTR_MAY_27_2009_0926AM
+
+#include <boost/spirit/home/lex/tokenize_and_parse.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE(z, n, A) BOOST_PP_CAT(A, n)&
+
+namespace boost { namespace spirit { namespace lex
+{
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        return compile<qi::domain>(expr).parse(
+            iter, lex.end(), unused, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, ParserExpr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename spirit::result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        typename Lexer::iterator_type iter = lex.begin(first, last);
+        if (!compile<qi::domain>(expr).parse(
+                iter, lex.end(), unused, skipper_, attr))
+            return false;
+
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(first, last, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Lexer, typename ParserExpr
+      , typename Skipper, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    tokenize_and_phrase_parse(Iterator& first, Iterator last, Lexer const& lex
+      , ParserExpr const& expr, Skipper const& skipper
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        return tokenize_and_phrase_parse(first, last, expr, skipper
+          , skip_flag::postskip, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+}}}
+
+#undef BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi.hpp
new file mode 100644 (file)
index 0000000..e593d52
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_QI_MARCH_04_2007_0852PM)
+#define BOOST_SPIRIT_QI_MARCH_04_2007_0852PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/action.hpp>
+#include <boost/spirit/home/qi/auto.hpp>
+#include <boost/spirit/home/qi/auxiliary.hpp>
+#include <boost/spirit/home/qi/char.hpp>
+#include <boost/spirit/home/qi/copy.hpp>
+#include <boost/spirit/home/qi/binary.hpp>
+#include <boost/spirit/home/qi/directive.hpp>
+#include <boost/spirit/home/qi/nonterminal.hpp>
+#include <boost/spirit/home/qi/numeric.hpp>
+#include <boost/spirit/home/qi/operator.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/parse_attr.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/string.hpp>
+#include <boost/spirit/home/qi/what.hpp>
+#include <boost/spirit/home/qi/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/action.hpp
new file mode 100644 (file)
index 0000000..d963b75
--- /dev/null
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_ACTION_JANUARY_07_2007_1233PM)
+#define SPIRIT_ACTION_JANUARY_07_2007_1233PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/action/action.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/action/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/action/action.hpp
new file mode 100644 (file)
index 0000000..2bdf7d8
--- /dev/null
@@ -0,0 +1,202 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ACTION_JANUARY_07_2007_1128AM)
+#define SPIRIT_ACTION_JANUARY_07_2007_1128AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/action_dispatch.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+
+    template <typename Subject, typename Action>
+    struct action : unary_parser<action<Subject, Action> >
+    {
+        typedef Subject subject_type;
+        typedef Action action_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<Subject, Context, Iterator>
+        {};
+
+        action(Subject const& subject_, Action f_)
+          : subject(subject_), f(f_) {}
+
+#ifndef BOOST_SPIRIT_ACTIONS_ALLOW_ATTR_COMPAT
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef typename attribute<Context, Iterator>::type attr_type;
+            typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+            // create an attribute if one is not supplied
+            typedef traits::transform_attribute<
+                typename make_attribute::type, attr_type, domain> transform;
+
+            typename make_attribute::type made_attr = make_attribute::call(attr_);
+            typename transform::type attr = transform::pre(made_attr);
+
+            Iterator save = first;
+            if (subject.parse(first, last, context, skipper, attr))
+            {
+                // call the function, passing the attribute, the context.
+                // The client can return false to fail parsing.
+                if (traits::action_dispatch<Subject>()(f, attr, context)) 
+                {
+                    // Do up-stream transformation, this integrates the results
+                    // back into the original attribute value, if appropriate.
+                    traits::post_transform(attr_, attr);
+                    return true;
+                }
+
+                // reset iterators if semantic action failed the match
+                // retrospectively
+                first = save;
+            }
+            return false;
+        }
+#else
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            Iterator save = first;
+            if (subject.parse(first, last, context, skipper, attr)) // Use the attribute as-is
+            {
+                // call the function, passing the attribute, the context.
+                // The client can return false to fail parsing.
+                if (traits::action_dispatch<Subject>()(f, attr, context))
+                    return true;
+
+                // reset iterators if semantic action failed the match
+                // retrospectively
+                first = save;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , unused_type) const
+        {
+            typedef typename attribute<Context, Iterator>::type attr_type;
+            typedef traits::make_attribute<attr_type, unused_type> make_attribute;
+
+            // synthesize the attribute since one is not supplied
+            typedef traits::transform_attribute<
+                typename make_attribute::type, attr_type, domain> transform;
+
+            typename make_attribute::type made_attr = make_attribute::call(unused_type());
+            typename transform::type attr = transform::pre(made_attr);
+
+            Iterator save = first;
+            if (subject.parse(first, last, context, skipper, attr))
+            {
+                // call the function, passing the attribute, the context.
+                // The client can return false to fail parsing.
+                if (traits::action_dispatch<Subject>()(f, attr, context))
+                    return true;
+
+                // reset iterators if semantic action failed the match
+                // retrospectively
+                first = save;
+            }
+            return false;
+        }
+#endif
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // the action is transparent (does not add any info)
+            return subject.what(context);
+        }
+
+        Subject subject;
+        Action f;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        action& operator= (action const&);
+    };
+}}}
+
+namespace boost { namespace spirit
+{
+    // Qi action meta-compiler
+    template <>
+    struct make_component<qi::domain, tag::action>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                remove_const<typename Elements::car_type>::type
+            subject_type;
+
+            typedef typename
+                remove_const<typename Elements::cdr_type::car_type>::type
+            action_type;
+
+            typedef qi::action<subject_type, action_type> type;
+        };
+
+        template <typename Elements>
+        typename result<make_component(Elements, unused_type)>::type
+        operator()(Elements const& elements, unused_type) const
+        {
+            typename result<make_component(Elements, unused_type)>::type
+                result(elements.car, elements.cdr.car);
+            return result;
+        }
+    };
+}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action>
+    struct has_semantic_action<qi::action<Subject, Action> >
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Action, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::action<Subject, Action>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto.hpp
new file mode 100644 (file)
index 0000000..afc7667
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !defined(BOOST_SPIRIT_AUTO_NOV_29_2009_0335PM)
+#define BOOST_SPIRIT_AUTO_NOV_29_2009_0335PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auto/auto.hpp>
+#include <boost/spirit/home/qi/detail/parse_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/auto.hpp
new file mode 100644 (file)
index 0000000..59d1ab3
--- /dev/null
@@ -0,0 +1,90 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_AUTO_NOV_29_2009_0336PM)
+#define BOOST_SPIRIT_QI_AUTO_NOV_29_2009_0336PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/auto/create_parser.hpp>
+#include <boost/mpl/bool.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<qi::domain, tag::auto_>     // enables auto_
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::auto_;
+#endif
+    using spirit::auto_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct auto_parser
+      : parser<auto_parser<Modifiers> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef spirit::hold_any type;
+        };
+
+        auto_parser(Modifiers const& modifiers)
+          : modifiers_(modifiers) {}
+
+        template <typename Iterator, typename Context, typename Skipper
+          , typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr) const
+        {
+            return compile<qi::domain>(create_parser<Attribute>(), modifiers_)
+                      .parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("auto_");
+        }
+
+        Modifiers modifiers_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::auto_, Modifiers>
+    {
+        typedef auto_parser<Modifiers> result_type;
+
+        result_type operator()(unused_type, Modifiers const& modifiers) const
+        {
+            return result_type(modifiers);
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/create_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/create_parser.hpp
new file mode 100644 (file)
index 0000000..bca492f
--- /dev/null
@@ -0,0 +1,45 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_CREATE_NOV_21_2009_0444PM)
+#define BOOST_SPIRIT_QI_CREATE_NOV_21_2009_0444PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auto/meta_create.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename T>
+    struct create_parser
+      : spirit::traits::meta_create<qi::domain, T> {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    // Main API function for parser creation from data type
+    template <typename T>
+    typename result_of::create_parser<T>::type
+    create_parser()
+    {
+        return spirit::traits::meta_create<qi::domain, T>::call();
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    // Meta function returning true if create_parser does return a valid
+    // parser for the given type T.
+    template <typename T>
+    struct create_parser_exists
+      : meta_create_exists<qi::domain, T> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/meta_create.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auto/meta_create.hpp
new file mode 100644 (file)
index 0000000..334fd12
--- /dev/null
@@ -0,0 +1,274 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_META_CREATE_NOV_21_2009_0432PM)
+#define BOOST_SPIRIT_QI_META_CREATE_NOV_21_2009_0432PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/auto/meta_create.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/variant.hpp>
+#include <boost/optional.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // compatible STL containers
+    template <typename Container>
+    struct meta_create_container
+    {
+        typedef make_unary_proto_expr<
+            typename Container::value_type
+          , proto::tag::dereference, qi::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Fusion sequences
+    template <typename Sequence>
+    struct meta_create_sequence
+    {
+        // create a mpl sequence from the given fusion sequence
+        typedef typename mpl::fold<
+            typename fusion::result_of::as_vector<Sequence>::type
+          , mpl::vector<>, mpl::push_back<mpl::_, mpl::_>
+        >::type sequence_type;
+
+        typedef make_nary_proto_expr<
+            sequence_type, proto::tag::shift_right, qi::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the default is to use the standard streaming operator unless it's a
+    // STL container or a fusion sequence
+
+    // The default implementation will be chosen if no predefined mapping of
+    // the data type T to a Qi component is defined.
+    struct no_auto_mapping_exists {};
+
+    template <typename T, typename Enable = void>
+    struct meta_create_impl : mpl::identity<no_auto_mapping_exists> {};
+
+    template <typename T>
+    struct meta_create_impl<T
+          , typename enable_if<mpl::and_<
+                traits::is_container<T>, mpl::not_<traits::is_string<T> > >
+            >::type>
+      : meta_create_container<T> {};
+
+    template <typename T>
+    struct meta_create_impl<T, typename enable_if<
+                spirit::detail::is_fusion_sequence_but_not_proto_expr<T>
+            >::type>
+      : meta_create_sequence<T> {};
+
+    template <typename T, typename Enable = void>
+    struct meta_create : meta_create_impl<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // optional
+    template <typename T>
+    struct meta_create<boost::optional<T> >
+    {
+        typedef make_unary_proto_expr<
+            T, proto::tag::negate, qi::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // alternatives
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct meta_create<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        typedef make_nary_proto_expr<
+            typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types
+          , proto::tag::bitwise_or, qi::domain
+        > make_proto_expr;
+
+        typedef typename make_proto_expr::type type;
+
+        static type call()
+        {
+            return make_proto_expr::call();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // predefined specializations for primitive components
+
+    // character generator
+    template <>
+    struct meta_create<char>
+    {
+        typedef spirit::standard::char_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<signed char>
+    {
+        typedef spirit::standard::char_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<wchar_t>
+    {
+        typedef spirit::standard_wide::char_type type;
+        static type call() { return type(); }
+    };
+
+    template <>
+    struct meta_create<unsigned char>
+    {
+        typedef spirit::standard::char_type type;
+        static type call() { return type(); }
+    };
+
+    // boolean generator
+    template <>
+    struct meta_create<bool>
+    {
+        typedef spirit::bool_type type;
+        static type call() { return type(); }
+    };
+
+    // integral generators
+    template <>
+    struct meta_create<int>
+    {
+        typedef spirit::int_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<short>
+    {
+        typedef spirit::short_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<long>
+    {
+        typedef spirit::long_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<unsigned int>
+    {
+        typedef spirit::uint_type type;
+        static type call() { return type(); }
+    };
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <>
+    struct meta_create<unsigned short>
+    {
+        typedef spirit::ushort_type type;
+        static type call() { return type(); }
+    };
+#endif
+    template <>
+    struct meta_create<unsigned long>
+    {
+        typedef spirit::ulong_type type;
+        static type call() { return type(); }
+    };
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct meta_create<boost::long_long_type>
+    {
+        typedef spirit::long_long_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<boost::ulong_long_type>
+    {
+        typedef spirit::ulong_long_type type;
+        static type call() { return type(); }
+    };
+#endif
+
+    // floating point generators
+    template <>
+    struct meta_create<float>
+    {
+        typedef spirit::float_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<double>
+    {
+        typedef spirit::double_type type;
+        static type call() { return type(); }
+    };
+    template <>
+    struct meta_create<long double>
+    {
+        typedef spirit::long_double_type type;
+        static type call() { return type(); }
+    };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // main customization point for create_parser
+    template <typename T, typename Enable = void>
+    struct create_parser : qi::meta_create<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // dispatch this to the Qi related specializations
+    template <typename T>
+    struct meta_create<qi::domain, T>
+      : create_parser<typename spirit::detail::remove_const_ref<T>::type> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Check whether a valid mapping exits for the given data type to a Qi
+    // component
+    template <typename T>
+    struct meta_create_exists<qi::domain, T>
+      : mpl::not_<is_same<
+            qi::no_auto_mapping_exists
+          , typename meta_create<qi::domain, T>::type
+        > > {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary.hpp
new file mode 100644 (file)
index 0000000..0f972b5
--- /dev/null
@@ -0,0 +1,22 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_AUXILIARY_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_AUXILIARY_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/eps.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/auxiliary/eol.hpp>
+#include <boost/spirit/home/qi/auxiliary/eoi.hpp>
+#include <boost/spirit/home/qi/auxiliary/attr.hpp>
+#include <boost/spirit/home/qi/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr.hpp
new file mode 100644 (file)
index 0000000..fb018e7
--- /dev/null
@@ -0,0 +1,110 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTR_JUL_23_2008_0956AM)
+#define BOOST_SPIRIT_ATTR_JUL_23_2008_0956AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0>       // enables attr()
+    struct use_terminal<
+            qi::domain, terminal_ex<tag::attr, fusion::vector1<A0> > >
+      : mpl::true_ {};
+
+    template <>                  // enables *lazy* attr()
+    struct use_lazy_terminal<qi::domain, tag::attr, 1>
+      : mpl::true_ {};
+
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::attr;
+#endif
+    using spirit::attr_type;
+
+    template <typename Value>
+    struct attr_parser : primitive_parser<attr_parser<Value> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute : remove_const<Value> {};
+
+        attr_parser(typename add_reference<Value>::type value)
+          : value_(value) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& /*first*/, Iterator const& /*last*/
+          , Context& /*context*/, Skipper const& /*skipper*/
+          , Attribute& attr_) const
+        {
+            spirit::traits::assign_to(value_, attr_);
+            return true;        // never consume any input, succeed always
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("attr");
+        }
+
+        Value value_;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        attr_parser& operator= (attr_parser const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::attr, fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef typename add_const<A0>::type const_value;
+        typedef attr_parser<const_value> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::attr_parser<T>, Attr, Context, Iterator>
+      : traits::is_container<Attr> {}; 
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr_cast.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/attr_cast.hpp
new file mode 100644 (file)
index 0000000..93d646c
--- /dev/null
@@ -0,0 +1,145 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_QI_ATTR_CAST_SEP_26_2009_0735PM)
+#define SPIRIT_QI_ATTR_CAST_SEP_26_2009_0735PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/auxiliary/attr_cast.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables attr_cast<>() pseudo parser
+    template <typename Expr, typename Exposed, typename Transformed>
+    struct use_terminal<qi::domain
+          , tag::stateful_tag<Expr, tag::attr_cast, Exposed, Transformed> >
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    using spirit::attr_cast;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attr_cast_parser consumes the attribute of subject generator without
+    // generating anything
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Subject>
+    struct attr_cast_parser 
+      : unary_parser<attr_cast_parser<Exposed, Transformed, Subject> >
+    {
+        typedef typename result_of::compile<qi::domain, Subject>::type
+            subject_type;
+
+        typedef typename mpl::eval_if<
+            traits::not_is_unused<Transformed>
+          , mpl::identity<Transformed>
+          , traits::attribute_of<subject_type> >::type
+        transformed_attribute_type;
+
+        attr_cast_parser(Subject const& subject_)
+          : subject(subject_)
+        {
+            // If you got an error_invalid_expression error message here,
+            // then the expression (Subject) is not a valid spirit qi
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Subject);
+        }
+
+        // If Exposed is given, we use the given type, otherwise all we can do
+        // is to guess, so we expose our inner type as an attribute and
+        // deal with the passed attribute inside the parse function.
+        template <typename Context, typename Iterator>
+        struct attribute
+          : mpl::if_<traits::not_is_unused<Exposed>, Exposed
+              , transformed_attribute_type>
+        {};
+
+        template <typename Iterator, typename Context, typename Skipper
+          , typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            // Find the real exposed attribute. If exposed is given, we use it
+            // otherwise we assume the exposed attribute type to be the actual
+            // attribute type as passed by the user.
+            typedef typename mpl::if_<
+                traits::not_is_unused<Exposed>, Exposed, Attribute>::type
+            exposed_attribute_type;
+
+            // do down-stream transformation, provides attribute for embedded
+            // parser
+            typedef traits::transform_attribute<
+                exposed_attribute_type, transformed_attribute_type, domain>
+            transform;
+
+            typename transform::type attr_ = transform::pre(attr_param);
+
+            if (!compile<qi::domain>(subject).
+                    parse(first, last, context, skipper, attr_))
+            {
+                transform::fail(attr_param);
+                return false;
+            }
+
+            // do up-stream transformation, this mainly integrates the results
+            // back into the original attribute value, if appropriate
+            traits::post_transform(attr_param, attr_);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("attr_cast"
+              , compile<qi::domain>(subject).what(context));
+        }
+
+        Subject subject;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        attr_cast_parser& operator= (attr_cast_parser const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generator: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Exposed, typename Transformed
+      , typename Modifiers>
+    struct make_primitive<
+        tag::stateful_tag<Expr, tag::attr_cast, Exposed, Transformed>, Modifiers>
+    {
+        typedef attr_cast_parser<Exposed, Transformed, Expr> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            typedef tag::stateful_tag<
+                Expr, tag::attr_cast, Exposed, Transformed> tag_type;
+            using spirit::detail::get_stateful_data;
+            return result_type(get_stateful_data<tag_type>::call(term));
+        }
+    };
+
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eoi.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eoi.hpp
new file mode 100644 (file)
index 0000000..a1dffd4
--- /dev/null
@@ -0,0 +1,80 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EOI_APRIL_18_2008_0751PM)
+#define BOOST_SPIRIT_EOI_APRIL_18_2008_0751PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<qi::domain, tag::eoi>       // enables eoi
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::eoi;
+#endif
+    using spirit::eoi_type;
+
+    struct eoi_parser : primitive_parser<eoi_parser>
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);
+            return first == last;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("eoi");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::eoi, Modifiers>
+    {
+        typedef eoi_parser result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eol.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eol.hpp
new file mode 100644 (file)
index 0000000..4564c9c
--- /dev/null
@@ -0,0 +1,98 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EOL_APRIL_18_2008_0751PM)
+#define BOOST_SPIRIT_EOL_APRIL_18_2008_0751PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<qi::domain, tag::eol>       // enables eol
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::eol;
+#endif
+    using spirit::eol_type;
+
+    struct eol_parser : primitive_parser<eol_parser>
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);
+
+            Iterator it = first;
+            bool matched = false;
+            if (it != last && *it == '\r')  // CR
+            {
+                matched = true;
+                ++it;
+            }
+            if (it != last && *it == '\n')  // LF
+            {
+                matched = true;
+                ++it;
+            }
+
+            if (!matched)
+                return false;
+
+            first = it;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("eol");
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::eol, Modifiers>
+    {
+        typedef eol_parser result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eps.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/eps.hpp
new file mode 100644 (file)
index 0000000..4ba6aa4
--- /dev/null
@@ -0,0 +1,132 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EPS_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_EPS_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<qi::domain, tag::eps>       // enables eps
+      : mpl::true_ {};
+
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::eps, fusion::vector1<A0> > // enables eps(bool-condition)
+    > : is_convertible<A0, bool> {};
+
+    template <>                                     // enables eps(f)
+    struct use_lazy_terminal<
+        qi::domain, tag::eps, 1 /*arity*/
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::eps;
+#endif
+    using spirit::eps_type;
+
+    struct eps_parser : primitive_parser<eps_parser>
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("eps");
+        }
+    };
+
+    struct semantic_predicate : primitive_parser<semantic_predicate>
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        semantic_predicate(bool predicate_)
+          : predicate(predicate_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            qi::skip_over(first, last, skipper);
+            return predicate;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("semantic-predicate");
+        }
+
+        bool predicate;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::eps, Modifiers>
+    {
+        typedef eps_parser result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::eps, fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef semantic_predicate result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args) ? true : false);
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/auxiliary/lazy.hpp
new file mode 100644 (file)
index 0000000..60b61d4
--- /dev/null
@@ -0,0 +1,287 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_LAZY_MARCH_27_2007_1002AM)
+#define BOOST_SPIRIT_LAZY_MARCH_27_2007_1002AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/lazy.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval>
+    struct use_terminal<qi::domain, phoenix::actor<Eval> >  // enables phoenix actors
+        : mpl::true_ {};
+
+    // forward declaration
+    template <typename Terminal, typename Actor, int Arity>
+    struct lazy_terminal;
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    using spirit::lazy;
+    typedef modify<qi::domain> qi_modify;
+
+    namespace detail
+    {
+        template <typename Parser, typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool lazy_parse_impl(Parser const& p
+          , Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr, mpl::false_)
+        {
+            return p.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Parser, typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool lazy_parse_impl(Parser const& p
+          , Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& /*attr*/, mpl::true_)
+        {
+            // If DeducedAuto is false (semantic actions is present), the
+            // component's attribute is unused.
+            return p.parse(first, last, context, skipper, unused);
+        }
+
+        template <typename Parser, typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool lazy_parse_impl_main(Parser const& p
+          , Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr)
+        {
+            // If DeducedAuto is true (no semantic action), we pass the parser's
+            // attribute on to the component.
+            typedef typename traits::has_semantic_action<Parser>::type auto_rule;
+            return lazy_parse_impl(p, first, last, context, skipper, attr, auto_rule());
+        }
+    }
+
+    template <typename Function, typename Modifiers>
+    struct lazy_parser : parser<lazy_parser<Function, Modifiers> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                boost::result_of<qi_modify(tag::lazy_eval, Modifiers)>::type
+            modifier;
+
+            typedef typename
+                remove_reference<
+                    typename boost::result_of<Function(unused_type, Context)>::type
+                >::type
+            expr_type;
+
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr_type) is not a valid spirit qi
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, expr_type);
+
+            typedef typename
+                result_of::compile<qi::domain, expr_type, modifier>::type
+            parser_type;
+
+            typedef typename
+                traits::attribute_of<parser_type, Context, Iterator>::type
+            type;
+        };
+
+        lazy_parser(Function const& function_, Modifiers const& modifiers_)
+          : function(function_), modifiers(modifiers_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            return detail::lazy_parse_impl_main(
+                  compile<qi::domain>(function(unused, context)
+                , qi_modify()(tag::lazy_eval(), modifiers))
+                , first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("lazy"
+              , compile<qi::domain>(function(unused, context)
+                , qi_modify()(tag::lazy_eval(), modifiers))
+                    .what(context)
+            );
+        }
+
+        Function function;
+        Modifiers modifiers;
+    };
+
+
+    template <typename Function, typename Subject, typename Modifiers>
+    struct lazy_directive
+        : unary_parser<lazy_directive<Function, Subject, Modifiers> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                boost::result_of<qi_modify(tag::lazy_eval, Modifiers)>::type
+            modifier;
+
+            typedef typename
+                remove_reference<
+                    typename boost::result_of<Function(unused_type, Context)>::type
+                >::type
+            directive_expr_type;
+
+            typedef typename
+                proto::result_of::make_expr<
+                    proto::tag::subscript
+                  , directive_expr_type
+                  , Subject
+                >::type
+            expr_type;
+
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr_type) is not a valid spirit qi
+            // expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, expr_type);
+
+            typedef typename
+                result_of::compile<qi::domain, expr_type, modifier>::type
+            parser_type;
+
+            typedef typename
+                traits::attribute_of<parser_type, Context, Iterator>::type
+            type;
+        };
+
+        lazy_directive(
+            Function const& function_
+          , Subject const& subject_
+          , Modifiers const& modifiers_)
+          : function(function_), subject(subject_), modifiers(modifiers_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            return detail::lazy_parse_impl_main(compile<qi::domain>(
+                proto::make_expr<proto::tag::subscript>(
+                    function(unused, context)
+                  , subject)
+                , qi_modify()(tag::lazy_eval(), modifiers))
+                , first, last, context, skipper, attr);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("lazy-directive"
+              , compile<qi::domain>(
+                    proto::make_expr<proto::tag::subscript>(
+                        function(unused, context)
+                      , subject
+                    ), qi_modify()(tag::lazy_eval(), modifiers))
+                    .what(context)
+            );
+        }
+
+        Function function;
+        Subject subject;
+        Modifiers modifiers;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Eval, typename Modifiers>
+    struct make_primitive<phoenix::actor<Eval>, Modifiers>
+    {
+        typedef lazy_parser<phoenix::actor<Eval>, Modifiers> result_type;
+        result_type operator()(phoenix::actor<Eval> const& f
+          , Modifiers const& modifiers) const
+        {
+            return result_type(f, modifiers);
+        }
+    };
+
+    template <typename Terminal, typename Actor, int Arity, typename Modifiers>
+    struct make_primitive<lazy_terminal<Terminal, Actor, Arity>, Modifiers>
+    {
+        typedef lazy_parser<Actor, Modifiers> result_type;
+        result_type operator()(
+            lazy_terminal<Terminal, Actor, Arity> const& lt
+          , Modifiers const& modifiers) const
+        {
+            return result_type(lt.actor, modifiers);
+        }
+    };
+
+    template <typename Terminal, typename Actor, int Arity, typename Subject, typename Modifiers>
+    struct make_directive<lazy_terminal<Terminal, Actor, Arity>, Subject, Modifiers>
+    {
+        typedef lazy_directive<Actor, Subject, Modifiers> result_type;
+        result_type operator()(
+            lazy_terminal<Terminal, Actor, Arity> const& lt
+          , Subject const& subject, Modifiers const& modifiers) const
+        {
+            return result_type(lt.actor, subject, modifiers);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Actor, typename Modifiers, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<
+        qi::lazy_parser<Actor, Modifiers>, Attribute, Context, Iterator>
+      : handles_container<
+          typename qi::lazy_parser<Actor, Modifiers>::template
+              attribute<Context, Iterator>::parser_type
+        , Attribute, Context, Iterator>
+    {};
+
+    template <typename Subject, typename Actor, typename Modifiers
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<
+        qi::lazy_directive<Actor, Subject, Modifiers>, Attribute
+      , Context, Iterator>
+      : handles_container<
+          typename qi::lazy_directive<Actor, Subject, Modifiers>::template
+              attribute<Context, Iterator>::parser_type
+        , Attribute, Context, Iterator>
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/binary.hpp
new file mode 100644 (file)
index 0000000..f930a60
--- /dev/null
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_BINARY_MAY_08_2007_0906AM)
+#define BOOST_SPIRIT_BINARY_MAY_08_2007_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/binary/binary.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/binary/binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/binary/binary.hpp
new file mode 100644 (file)
index 0000000..a4e83f0
--- /dev/null
@@ -0,0 +1,413 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_BINARY_MAY_08_2007_0808AM)
+#define BOOST_SPIRIT_BINARY_MAY_08_2007_0808AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/detail/endian.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/config.hpp>
+
+#define BOOST_SPIRIT_ENABLE_BINARY(name)                                        \
+    template <>                                                                 \
+    struct use_terminal<qi::domain, tag::name>                                  \
+      : mpl::true_ {};                                                          \
+                                                                                \
+    template <typename A0>                                                      \
+    struct use_terminal<qi::domain                                              \
+        , terminal_ex<tag::name, fusion::vector1<A0> > >                        \
+      : mpl::or_<is_integral<A0>, is_enum<A0> > {};                             \
+                                                                                \
+    template <>                                                                 \
+    struct use_lazy_terminal<qi::domain, tag::name, 1> : mpl::true_ {};         \
+                                                                                \
+/***/
+
+#define BOOST_SPIRIT_ENABLE_BINARY_IEEE754(name)                              \
+    template<>                                                                \
+    struct use_terminal<qi::domain, tag::name>: mpl::true_ {};                \
+                                                                              \
+    template<typename A0>                                                     \
+    struct use_terminal<qi::domain, terminal_ex<tag::name,                    \
+        fusion::vector1<A0> > >: is_floating_point<A0> {};                    \
+                                                                              \
+    template<>                                                                \
+    struct use_lazy_terminal<qi::domain, tag::name, 1>: mpl::true_ {};        \
+                                                                              \
+/***/
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_ENABLE_BINARY(byte_)                   // enables byte_
+    BOOST_SPIRIT_ENABLE_BINARY(word)                    // enables word
+    BOOST_SPIRIT_ENABLE_BINARY(big_word)                // enables big_word
+    BOOST_SPIRIT_ENABLE_BINARY(little_word)             // enables little_word
+    BOOST_SPIRIT_ENABLE_BINARY(dword)                   // enables dword
+    BOOST_SPIRIT_ENABLE_BINARY(big_dword)               // enables big_dword
+    BOOST_SPIRIT_ENABLE_BINARY(little_dword)            // enables little_dword
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_SPIRIT_ENABLE_BINARY(qword)                   // enables qword
+    BOOST_SPIRIT_ENABLE_BINARY(big_qword)               // enables big_qword
+    BOOST_SPIRIT_ENABLE_BINARY(little_qword)            // enables little_qword
+#endif
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(big_bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(little_bin_float)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(bin_double)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(big_bin_double)
+    BOOST_SPIRIT_ENABLE_BINARY_IEEE754(little_bin_double)
+}}
+
+#undef BOOST_SPIRIT_ENABLE_BINARY
+#undef BOOST_SPIRIT_ENABLE_BINARY_IEEE754
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using boost::spirit::byte_;
+    using boost::spirit::word;
+    using boost::spirit::big_word;
+    using boost::spirit::little_word;
+    using boost::spirit::dword;
+    using boost::spirit::big_dword;
+    using boost::spirit::little_dword;
+#ifdef BOOST_HAS_LONG_LONG
+    using boost::spirit::qword;
+    using boost::spirit::big_qword;
+    using boost::spirit::little_qword;
+#endif
+    using boost::spirit::bin_float;
+    using boost::spirit::big_bin_float;
+    using boost::spirit::little_bin_float;
+    using boost::spirit::bin_double;
+    using boost::spirit::big_bin_double;
+    using boost::spirit::little_bin_double;
+#endif
+
+    using boost::spirit::byte_type;
+    using boost::spirit::word_type;
+    using boost::spirit::big_word_type;
+    using boost::spirit::little_word_type;
+    using boost::spirit::dword_type;
+    using boost::spirit::big_dword_type;
+    using boost::spirit::little_dword_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using boost::spirit::qword_type;
+    using boost::spirit::big_qword_type;
+    using boost::spirit::little_qword_type;
+#endif
+    using boost::spirit::bin_float_type;
+    using boost::spirit::big_bin_float_type;
+    using boost::spirit::little_bin_float_type;
+    using boost::spirit::bin_double_type;
+    using boost::spirit::big_bin_double_type;
+    using boost::spirit::little_bin_double_type;
+
+    namespace detail
+    {
+        template <int bits>
+        struct integer
+        {
+#ifdef BOOST_HAS_LONG_LONG
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 8 || bits == 16 || bits == 32 || bits == 64,
+                not_supported_binary_size, ());
+#else
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 8 || bits == 16 || bits == 32,
+                not_supported_binary_size, ());
+#endif
+        };
+
+        template <>
+        struct integer<8>
+        {
+            enum { size = 1 };
+            typedef uint_least8_t type;
+        };
+
+        template <>
+        struct integer<16>
+        {
+            enum { size = 2 };
+            typedef uint_least16_t type;
+        };
+
+        template <>
+        struct integer<32>
+        {
+            enum { size = 4 };
+            typedef uint_least32_t type;
+        };
+
+#ifdef BOOST_HAS_LONG_LONG
+        template <>
+        struct integer<64>
+        {
+            enum { size = 8 };
+            typedef uint_least64_t type;
+        };
+#endif
+
+        template <int bits>
+        struct floating_point
+        {
+            BOOST_SPIRIT_ASSERT_MSG(
+                bits == 32 || bits == 64,
+                not_supported_binary_size, ());
+        };
+
+        template <>
+        struct floating_point<32>
+        {
+            enum { size = 4 };
+            typedef float type;
+        };
+
+        template <>
+        struct floating_point<64>
+        {
+            enum { size = 8 };
+            typedef double type;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <BOOST_SCOPED_ENUM(boost::endian::endianness) bits>
+        struct what;
+
+        template <>
+        struct what<boost::endian::endianness::native>
+        {
+            static std::string is()
+            {
+                return "native-endian binary";
+            }
+        };
+
+        template <>
+        struct what<boost::endian::endianness::little>
+        {
+            static char const* is()
+            {
+                return "little-endian binary";
+            }
+        };
+
+        template <>
+        struct what<boost::endian::endianness::big>
+        {
+            static char const* is()
+            {
+                return "big-endian binary";
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct any_binary_parser : primitive_parser<any_binary_parser<T, endian, bits> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef boost::endian::endian<endian, typename T::type,
+                bits> type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            qi::skip_over(first, last, skipper);
+
+            typename attribute<Context, Iterator>::type attr_;
+            unsigned char* bytes = reinterpret_cast<unsigned char*>(&attr_);
+
+            Iterator it = first;
+            for (unsigned int i = 0; i < sizeof(attr_); ++i)
+            {
+                if (it == last)
+                    return false;
+                *bytes++ = *it++;
+            }
+
+            first = it;
+            spirit::traits::assign_to(attr_, attr_param);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(qi::detail::what<endian>::is());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename V, typename T
+      , BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct binary_lit_parser
+      : primitive_parser<binary_lit_parser<V, T, endian, bits> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        binary_lit_parser(V n_)
+          : n(n_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            qi::skip_over(first, last, skipper);
+
+            // Even if the endian types are not pod's (at least not in the
+            // definition of C++03) it seems to be safe to assume they are
+            // (but in C++0x the endian types _are_ PODs).
+            // This allows us to treat them as a sequence of consecutive bytes.
+            boost::endian::endian<endian, typename T::type, bits> attr_;
+
+#if defined(BOOST_MSVC)
+// warning C4244: 'argument' : conversion from 'const int' to 'foo', possible loss of data
+#pragma warning(push)
+#pragma warning(disable: 4244)
+#endif
+            attr_ = n;
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+            unsigned char* bytes = reinterpret_cast<unsigned char*>(&attr_);
+
+            Iterator it = first;
+            for (unsigned int i = 0; i < sizeof(attr_); ++i)
+            {
+                if (it == last || *bytes++ != static_cast<unsigned char>(*it++))
+                    return false;
+            }
+
+            first = it;
+            spirit::traits::assign_to(attr_, attr_param);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(qi::detail::what<endian>::is());
+        }
+
+        V n;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct make_binary_parser
+    {
+        typedef any_binary_parser<T, endian, bits> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename V, typename T
+      , BOOST_SCOPED_ENUM(boost::endian::endianness) endian, int bits>
+    struct make_binary_lit_parser
+    {
+        typedef binary_lit_parser<V, T, endian, bits> result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+#define BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(name, endiantype, bits)            \
+    template <typename Modifiers>                                             \
+    struct make_primitive<tag::name, Modifiers>                               \
+      : make_binary_parser<detail::integer<bits>,                             \
+        boost::endian::endianness::endiantype, bits> {};                      \
+                                                                              \
+    template <typename Modifiers, typename A0>                                \
+    struct make_primitive<                                                    \
+        terminal_ex<tag::name, fusion::vector1<A0> > , Modifiers>             \
+      : make_binary_lit_parser<A0, detail::integer<bits>,                     \
+        boost::endian::endianness::endiantype, bits> {};                      \
+                                                                              \
+    /***/
+
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(byte_, native, 8)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(word, native, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_word, big, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_word, little, 16)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(dword, native, 32)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_dword, big, 32)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_dword, little, 32)
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(qword, native, 64)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(big_qword, big, 64)
+    BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE(little_qword, little, 64)
+#endif
+
+#undef BOOST_SPIRIT_MAKE_BINARY_PRIMITIVE
+
+#define BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(name, endiantype, bits)    \
+    template<typename Modifiers>                                              \
+    struct make_primitive<tag::name, Modifiers>                               \
+      : make_binary_parser<detail::floating_point<bits>,                      \
+        boost::endian::endianness::endiantype, bits> {};                      \
+                                                                              \
+    template<typename Modifiers, typename A0>                                 \
+    struct make_primitive<                                                    \
+        terminal_ex<tag::name, fusion::vector1<A0> >, Modifiers>              \
+      : make_binary_lit_parser<A0, detail::floating_point<bits>,              \
+        boost::endian::endianness::endiantype,                                \
+        bits> {};                                                             \
+                                                                              \
+    /***/
+
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(bin_float, native, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(big_bin_float, big, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(little_bin_float, little, 32)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(bin_double, native, 64)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(big_bin_double, big, 64)
+    BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE(little_bin_double, little, 64)
+
+#undef BOOST_SPIRIT_MAKE_BINARY_IEEE754_PRIMITIVE
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/char.hpp
new file mode 100644 (file)
index 0000000..66739db
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_FEBRUARY_02_2007_0921AM)
+#define BOOST_SPIRIT_CHAR_FEBRUARY_02_2007_0921AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/char/char_parser.hpp>
+#include <boost/spirit/home/qi/char/char.hpp>
+#include <boost/spirit/home/qi/char/char_class.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char.hpp
new file mode 100644 (file)
index 0000000..8c22aaa
--- /dev/null
@@ -0,0 +1,615 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/char_set/basic_chset.hpp>
+#include <boost/spirit/home/qi/char/char_parser.hpp>
+#include <boost/spirit/home/qi/char/char_class.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <string>
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_terminal<qi::domain
+      , terminal<
+            tag::char_code<tag::char_, CharEncoding>    // enables char_
+        >
+    > : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>    // enables char_('x'), char_("x")
+          , fusion::vector1<A0>                         // and char_("a-z0-9")
+        >
+    > : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0, typename A1>
+    struct use_terminal<qi::domain
+      , terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>    // enables char_('a','z')
+          , fusion::vector2<A0, A1>
+        >
+    > : mpl::true_ {};
+
+    template <typename CharEncoding>                    // enables *lazy* char_('x'), char_("x")
+    struct use_lazy_terminal<                           // and char_("a-z0-9")
+        qi::domain
+      , tag::char_code<tag::char_, CharEncoding>
+      , 1 // arity
+    > : mpl::true_ {};
+
+    template <typename CharEncoding>                    // enables *lazy* char_('a','z')
+    struct use_lazy_terminal<
+        qi::domain
+      , tag::char_code<tag::char_, CharEncoding>
+      , 2 // arity
+    > : mpl::true_ {};
+
+    template <>
+    struct use_terminal<qi::domain, char>               // enables 'x'
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<qi::domain, char[2]>            // enables "x"
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<qi::domain, wchar_t>            // enables wchar_t
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<qi::domain, wchar_t[2]>         // enables L"x"
+      : mpl::true_ {};
+
+    // enables lit(...)
+    template <typename A0>
+    struct use_terminal<qi::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_char<A0> >::type>
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::lit; // lit('x') is equivalent to 'x'
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser for a single character
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, bool no_attribute, bool no_case = false>
+    struct literal_char
+      : char_parser<
+            literal_char<CharEncoding, no_attribute, false>
+          , typename CharEncoding::char_type
+          , typename mpl::if_c<no_attribute, unused_type
+              , typename CharEncoding::char_type>::type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename Char>
+        literal_char(Char ch_)
+          : ch(static_cast<char_type>(ch_)) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename mpl::if_c<
+                no_attribute, unused_type, char_type>::type
+            type;
+        };
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch_, Context&) const
+        {
+            return traits::ischar<CharParam, char_encoding>::call(ch_) &&
+                   ch == char_type(ch_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("literal-char", char_encoding::toucs4(ch));
+        }
+
+        char_type ch;
+    };
+
+    template <typename CharEncoding, bool no_attribute>
+    struct literal_char<CharEncoding, no_attribute, true> // case insensitive
+      : char_parser<
+            literal_char<CharEncoding, no_attribute, true>
+          , typename mpl::if_c<no_attribute, unused_type
+              , typename CharEncoding::char_type>::type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        literal_char(char_type ch)
+          : lo(static_cast<char_type>(char_encoding::tolower(ch)))
+          , hi(static_cast<char_type>(char_encoding::toupper(ch))) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename mpl::if_c<
+                no_attribute, unused_type, char_type>::type
+            type;
+        };
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch_, Context&) const
+        {
+            if (!traits::ischar<CharParam, char_encoding>::call(ch_))
+                return false;
+
+            char_type ch = char_type(ch_);  // optimize for token based parsing
+            return this->lo == ch || this->hi == ch;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("no-case-literal-char", char_encoding::toucs4(lo));
+        }
+
+        char_type lo, hi;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser for a character range
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, bool no_case = false>
+    struct char_range
+      : char_parser<char_range<CharEncoding, false>, typename CharEncoding::char_type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        char_range(char_type from_, char_type to_)
+          : from(from_), to(to_) {}
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch_, Context&) const
+        {
+            if (!traits::ischar<CharParam, char_encoding>::call(ch_))
+                return false;
+
+            char_type ch = char_type(ch_);  // optimize for token based parsing
+            return !(ch < from) && !(to < ch);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            info result("char-range", char_encoding::toucs4(from));
+            boost::get<std::string>(result.value) += '-';
+            boost::get<std::string>(result.value) += to_utf8(char_encoding::toucs4(to));
+            return result;
+        }
+
+        char_type from, to;
+    };
+
+    template <typename CharEncoding>
+    struct char_range<CharEncoding, true> // case insensitive
+      : char_parser<char_range<CharEncoding, true>, typename CharEncoding::char_type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        char_range(char_type from, char_type to)
+          : from_lo(static_cast<char_type>(char_encoding::tolower(from)))
+          , to_lo(static_cast<char_type>(char_encoding::tolower(to)))
+          , from_hi(static_cast<char_type>(char_encoding::toupper(from)))
+          , to_hi(static_cast<char_type>(char_encoding::toupper(to)))
+        {}
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch_, Context&) const
+        {
+            if (!traits::ischar<CharParam, char_encoding>::call(ch_))
+                return false;
+
+            char_type ch = char_type(ch_);  // optimize for token based parsing
+            return (!(ch < from_lo) && !(to_lo < ch))
+                || (!(ch < from_hi) && !(to_hi < ch))
+            ;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            info result("no-case-char-range", char_encoding::toucs4(from_lo));
+            boost::get<std::string>(result.value) += '-';
+            boost::get<std::string>(result.value) += to_utf8(char_encoding::toucs4(to_lo));
+            return result;
+        }
+
+        char_type from_lo, to_lo, from_hi, to_hi;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser for a character set
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, bool no_attribute, bool no_case = false>
+    struct char_set
+      : char_parser<char_set<CharEncoding, no_attribute, false>
+          , typename mpl::if_c<no_attribute, unused_type
+              , typename CharEncoding::char_type>::type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename String>
+        char_set(String const& str)
+        {
+            using spirit::detail::cast_char;
+
+            typedef typename
+                remove_const<
+                    typename traits::char_type_of<String>::type
+                >::type
+            in_type;
+
+            BOOST_SPIRIT_ASSERT_MSG((
+                (sizeof(char_type) >= sizeof(in_type))
+            ), cannot_convert_string, (String));
+
+            in_type const* definition =
+                (in_type const*)traits::get_c_string(str);
+            in_type ch = *definition++;
+            while (ch)
+            {
+                in_type next = *definition++;
+                if (next == '-')
+                {
+                    next = *definition++;
+                    if (next == 0)
+                    {
+                        chset.set(cast_char<char_type>(ch));
+                        chset.set('-');
+                        break;
+                    }
+                    chset.set(
+                        cast_char<char_type>(ch),
+                        cast_char<char_type>(next)
+                    );
+                }
+                else
+                {
+                    chset.set(cast_char<char_type>(ch));
+                }
+                ch = next;
+            }
+        }
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch, Context&) const
+        {
+            return traits::ischar<CharParam, char_encoding>::call(ch) &&
+                   chset.test(char_type(ch));
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("char-set");
+        }
+
+        support::detail::basic_chset<char_type> chset;
+    };
+
+    template <typename CharEncoding, bool no_attribute>
+    struct char_set<CharEncoding, no_attribute, true> // case insensitive
+      : char_parser<char_set<CharEncoding, no_attribute, true>
+          , typename mpl::if_c<no_attribute, unused_type
+              , typename CharEncoding::char_type>::type>
+    {
+        typedef typename CharEncoding::char_type char_type;
+        typedef CharEncoding char_encoding;
+
+        template <typename String>
+        char_set(String const& str)
+        {
+            typedef typename traits::char_type_of<String>::type in_type;
+
+            BOOST_SPIRIT_ASSERT_MSG((
+                (sizeof(char_type) == sizeof(in_type))
+            ), cannot_convert_string, (String));
+
+            char_type const* definition =
+                (char_type const*)traits::get_c_string(str);
+            char_type ch = *definition++;
+            while (ch)
+            {
+                char_type next = *definition++;
+                if (next == '-')
+                {
+                    next = *definition++;
+                    if (next == 0)
+                    {
+                        chset.set(static_cast<char_type>(CharEncoding::tolower(ch)));
+                        chset.set(static_cast<char_type>(CharEncoding::toupper(ch)));
+                        chset.set('-');
+                        break;
+                    }
+                    chset.set(static_cast<char_type>(CharEncoding::tolower(ch))
+                      , static_cast<char_type>(CharEncoding::tolower(next)));
+                    chset.set(static_cast<char_type>(CharEncoding::toupper(ch))
+                      , static_cast<char_type>(CharEncoding::toupper(next)));
+                }
+                else
+                {
+                    chset.set(static_cast<char_type>(CharEncoding::tolower(ch)));
+                    chset.set(static_cast<char_type>(CharEncoding::toupper(ch)));
+                }
+                ch = next;
+            }
+        }
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch, Context&) const
+        {
+            return traits::ischar<CharParam, char_encoding>::call(ch) &&
+                   chset.test(char_type(ch));
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("no-case-char-set");
+        }
+
+        support::detail::basic_chset<char_type> chset;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Modifiers, typename Encoding>
+        struct basic_literal
+        {
+            static bool const no_case =
+                has_modifier<
+                    Modifiers
+                  , tag::char_code_base<tag::no_case>
+                >::value;
+
+            static bool const no_attr =
+                !has_modifier<
+                    Modifiers
+                  , tag::lazy_eval
+                >::value;
+
+            typedef literal_char<
+                typename spirit::detail::get_encoding_with_case<
+                    Modifiers, Encoding, no_case>::type
+              , no_attr
+              , no_case>
+            result_type;
+
+            template <typename Char>
+            result_type operator()(Char ch, unused_type) const
+            {
+                return result_type(ch);
+            }
+
+            template <typename Char>
+            result_type operator()(Char const* str, unused_type) const
+            {
+                return result_type(str[0]);
+            }
+        };
+    }
+
+    template <typename Modifiers>
+    struct make_primitive<char, Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard> {};
+
+    template <typename Modifiers>
+    struct make_primitive<char const(&)[2], Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard> {};
+
+    template <typename Modifiers>
+    struct make_primitive<wchar_t, Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard_wide> {};
+
+    template <typename Modifiers>
+    struct make_primitive<wchar_t const(&)[2], Modifiers>
+      : detail::basic_literal<Modifiers, char_encoding::standard_wide> {};
+
+    template <typename CharEncoding, typename Modifiers>
+    struct make_primitive<
+        terminal<tag::char_code<tag::char_, CharEncoding> >, Modifiers>
+    {
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef tag::char_code<tag::char_, char_encoding> tag;
+        typedef char_class<tag> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // char_('x')
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<A0> >
+      , Modifiers>
+    {
+        static bool const no_case =
+            has_modifier<Modifiers, tag::char_code_base<tag::no_case> >::value;
+
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef typename
+            mpl::if_<
+                traits::is_string<A0>
+              , char_set<char_encoding, false, no_case>
+              , literal_char<char_encoding, false, no_case>
+            >::type
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    // lit('x')
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::lit, fusion::vector1<A0> >
+      , Modifiers
+      , typename enable_if<traits::is_char<A0> >::type>
+    {
+        static bool const no_case =
+            has_modifier<
+                Modifiers
+              , tag::char_code_base<tag::no_case>
+            >::value;
+
+        typedef typename traits::char_encoding_from_char<
+                typename traits::char_type_of<A0>::type>::type encoding;
+
+        typedef literal_char<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers, encoding, no_case>::type
+          , true, no_case>
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector1<Char(&)[2]> // For single char strings
+        >
+      , Modifiers>
+    {
+        static bool const no_case =
+            has_modifier<Modifiers, tag::char_code_base<tag::no_case> >::value;
+
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef literal_char<char_encoding, false, no_case> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args)[0]);
+        }
+    };
+
+    template <typename CharEncoding, typename Modifiers, typename A0, typename A1>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<A0, A1>
+        >
+      , Modifiers>
+    {
+        static bool const no_case =
+            has_modifier<Modifiers, tag::char_code_base<tag::no_case> >::value;
+
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef char_range<char_encoding, no_case> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(term.args)
+              , fusion::at_c<1>(term.args)
+            );
+        }
+    };
+
+    template <typename CharEncoding, typename Modifiers, typename Char>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::char_, CharEncoding>
+          , fusion::vector2<Char(&)[2], Char(&)[2]> // For single char strings
+        >
+      , Modifiers>
+    {
+        static bool const no_case =
+            has_modifier<Modifiers, tag::char_code_base<tag::no_case> >::value;
+
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef char_range<char_encoding, no_case> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(term.args)[0]
+              , fusion::at_c<1>(term.args)[0]
+            );
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_class.hpp
new file mode 100644 (file)
index 0000000..9b77b7d
--- /dev/null
@@ -0,0 +1,118 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_CLASS_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_CHAR_CLASS_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/char/char_parser.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    // enables alnum, alpha, graph, etc.
+    template <typename CharClass, typename CharEncoding>
+    struct use_terminal<qi::domain, tag::char_code<CharClass, CharEncoding> >
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    // hoist the char classification namespaces into qi sub-namespaces of the
+    // same name
+    namespace ascii { using namespace boost::spirit::ascii; }
+    namespace iso8859_1 { using namespace boost::spirit::iso8859_1; }
+    namespace standard { using namespace boost::spirit::standard; }
+    namespace standard_wide { using namespace boost::spirit::standard_wide; }
+#if defined(BOOST_SPIRIT_UNICODE)
+    namespace unicode { using namespace boost::spirit::unicode; }
+#endif
+
+    // Import the standard namespace into the qi namespace. This allows
+    // for default handling of all character/string related operations if not
+    // prefixed with a character set namespace.
+    using namespace boost::spirit::standard;
+
+    // Import encoding
+    using spirit::encoding;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Generic char classification parser (for alnum, alpha, graph, etc.)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Tag>
+    struct char_class
+      : char_parser<char_class<Tag>, typename Tag::char_encoding::char_type>
+    {
+        typedef typename Tag::char_encoding char_encoding;
+        typedef typename Tag::char_class classification;
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch, Context&) const
+        {
+            using spirit::char_class::classify;
+            return traits::ischar<CharParam, char_encoding>::call(ch) &&
+                   classify<char_encoding>::is(classification(), ch);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            typedef spirit::char_class::what<char_encoding> what_;
+            return info(what_::is(classification()));
+        }
+    };
+
+    namespace detail
+    {
+        template <typename Tag, bool no_case = false>
+        struct make_char_class : mpl::identity<Tag> {};
+
+        template <>
+        struct make_char_class<tag::lower, true> : mpl::identity<tag::alpha> {};
+
+        template <>
+        struct make_char_class<tag::upper, true> : mpl::identity<tag::alpha> {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharClass, typename CharEncoding, typename Modifiers>
+    struct make_primitive<tag::char_code<CharClass, CharEncoding>, Modifiers>
+    {
+        static bool const no_case =
+            has_modifier<Modifiers, tag::char_code_base<tag::no_case> >::value;
+
+        typedef typename
+            spirit::detail::get_encoding<Modifiers, CharEncoding>::type
+        char_encoding;
+
+        typedef tag::char_code<
+            typename detail::make_char_class<CharClass, no_case>::type
+          , char_encoding>
+        tag;
+
+        typedef char_class<tag> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/char/char_parser.hpp
new file mode 100644 (file)
index 0000000..1d06d7c
--- /dev/null
@@ -0,0 +1,157 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_PARSER_APR_16_2006_0906AM)
+#define BOOST_SPIRIT_CHAR_PARSER_APR_16_2006_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::complement> // enables ~
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(char_parser_id)
+    }
+
+    template <typename T>
+    struct is_char_parser : detail::has_char_parser_id<T> {};
+}}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The base char_parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Derived, typename Char, typename Attr = Char>
+    struct char_parser : primitive_parser<Derived>
+    {
+        typedef Char char_type;
+        struct char_parser_id;
+
+        // if Attr is unused_type, Derived must supply its own attribute
+        // metafunction
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef Attr type;
+        };
+
+        template <typename Iterator, typename Context, typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+
+            if (first != last && this->derived().test(*first, context))
+            {
+                spirit::traits::assign_to(*first, attr_);
+                ++first;
+                return true;
+            }
+            return false;
+        }
+
+        // Requirement: p.test(ch, context) -> bool
+        //
+        //  ch:         character being parsed
+        //  context:    enclosing rule context
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // negated_char_parser handles ~cp expressions (cp is a char_parser)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Positive>
+    struct negated_char_parser :
+        char_parser<negated_char_parser<Positive>, typename Positive::char_type>
+    {
+        negated_char_parser(Positive const& positive_)
+          : positive(positive_) {}
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch, Context& context) const
+        {
+            return !positive.test(ch, context);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("not", positive.what(context));
+        }
+
+        Positive positive;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Positive>
+        struct make_negated_char_parser
+        {
+            typedef negated_char_parser<Positive> result_type;
+            result_type operator()(Positive const& positive) const
+            {
+                return result_type(positive);
+            }
+        };
+
+        template <typename Positive>
+        struct make_negated_char_parser<negated_char_parser<Positive> >
+        {
+            typedef Positive result_type;
+            result_type operator()(negated_char_parser<Positive> const& ncp) const
+            {
+                return ncp.positive;
+            }
+        };
+    }
+
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::complement, Elements, Modifiers>
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        subject;
+
+        BOOST_SPIRIT_ASSERT_MSG((
+            traits::is_char_parser<subject>::value
+        ), subject_is_not_negatable, (subject));
+
+        typedef typename
+            detail::make_negated_char_parser<subject>::result_type
+        result_type;
+
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return detail::make_negated_char_parser<subject>()(
+                fusion::at_c<0>(elements));
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/copy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/copy.hpp
new file mode 100644 (file)
index 0000000..d9b8431
--- /dev/null
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2012 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_COPY_FEBRUARY_7_2012_0159PM)
+#define BOOST_SPIRIT_COPY_FEBRUARY_7_2012_0159PM
+
+#include <boost/config.hpp>
+#include <boost/proto/proto.hpp>
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS)
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Expr>
+    typename boost::proto::result_of::deep_copy<Expr>::type
+    copy(Expr const& expr)
+    {
+        BOOST_SPIRIT_ASSERT_MATCH(boost::spirit::qi::domain, Expr);
+        return boost::proto::deep_copy(expr);
+    }
+}}}
+
+#endif
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/alternative_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/alternative_function.hpp
new file mode 100644 (file)
index 0000000..0c400a9
--- /dev/null
@@ -0,0 +1,214 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ALTERNATIVE_FUNCTION_APRIL_23_2007_1046AM)
+#define SPIRIT_ALTERNATIVE_FUNCTION_APRIL_23_2007_1046AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/variant.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Variant, typename Expected>
+    struct find_substitute
+    {
+        // Get the typr from the variant that can be a substitute for Expected.
+        // If none is found, just return Expected
+
+        typedef Variant variant_type;
+        typedef typename variant_type::types types;
+        typedef typename mpl::end<types>::type end;
+
+        typedef typename
+            mpl::find_if<types, is_same<mpl::_1, Expected> >::type
+        iter_1;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter_1, end>,
+                mpl::find_if<types, traits::is_substitute<mpl::_1, Expected> >,
+                mpl::identity<iter_1>
+            >::type
+        iter;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter, end>,
+                mpl::identity<Expected>,
+                mpl::deref<iter>
+            >::type
+        type;
+    };
+
+    template <typename Iterator, typename Context, typename Skipper,
+        typename Attribute>
+    struct alternative_function
+    {
+        alternative_function(
+            Iterator& first_, Iterator const& last_, Context& context_,
+            Skipper const& skipper_, Attribute& attr_)
+          : first(first_), last(last_), context(context_), skipper(skipper_),
+            attr(attr_)
+        {
+        }
+
+        template <typename Component>
+        bool call(Component const& component, mpl::true_) const
+        {
+            // if Attribute is not a variant, then pass it as-is
+            return component.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Component>
+        bool call_optional_or_variant(Component const& component, mpl::true_) const
+        {
+            // If Attribute is an optional, then create an attribute for the Component
+            // with the type optional::value_type. If the expected attribute is unused type,
+            // use it instead.
+            typedef typename
+                traits::attribute_of<Component, Context, Iterator>::type
+            expected_type;
+
+            typename mpl::if_<
+                is_same<expected_type, unused_type>,
+                unused_type,
+                typename Attribute::value_type>::type
+            val;
+
+            if (component.parse(first, last, context, skipper, val))
+            {
+                traits::assign_to(val, attr);
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Component>
+        bool call_variant(Component const& component, mpl::false_) const
+        {
+            // If Attribute is a variant, then search the variant types for a
+            // suitable substitute type.
+
+            typename
+                find_substitute<Attribute,
+                    typename traits::attribute_of<Component, Context, Iterator>::type
+                >::type
+            val;
+
+            if (component.parse(first, last, context, skipper, val))
+            {
+                traits::assign_to(val, attr);
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Component>
+        bool call_variant(Component const& component, mpl::true_) const
+        {
+            // If Attribute is a variant and the expected attribute is
+            // the same type (pass the variant as-is).
+
+            return component.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Component>
+        bool call_optional_or_variant(Component const& component, mpl::false_) const
+        {
+            // Attribute is a variant...
+
+            typedef typename
+                traits::attribute_of<Component, Context, Iterator>::type
+            expected;
+            return call_variant(component,
+                is_same<Attribute, expected>());
+        }
+
+        template <typename Component>
+        bool call(Component const& component, mpl::false_) const
+        {
+            return call_optional_or_variant(
+                component, spirit::traits::not_is_variant<Attribute, qi::domain>());
+        }
+
+        template <typename Component>
+        bool call_unused(Component const& component, mpl::true_) const
+        {
+            // return true if the parser succeeds
+            return call(component,
+                mpl::and_<
+                    spirit::traits::not_is_variant<Attribute, qi::domain>,
+                    spirit::traits::not_is_optional<Attribute, qi::domain>
+                >());
+        }
+
+        template <typename Component>
+        bool call_unused(Component const& component, mpl::false_) const
+        {
+            return component.parse(first, last, context, skipper, unused);
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // return true if the parser succeeds
+            typedef typename traits::not_is_unused<
+                typename traits::attribute_of<Component, Context, Iterator>::type
+            >::type predicate;
+
+            return call_unused(component, predicate());
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+        Attribute& attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        alternative_function& operator= (alternative_function const&);
+    };
+
+    template <typename Iterator, typename Context, typename Skipper>
+    struct alternative_function<Iterator, Context, Skipper, unused_type const>
+    {
+        alternative_function(
+            Iterator& first_, Iterator const& last_, Context& context_,
+            Skipper const& skipper_, unused_type)
+          : first(first_), last(last_), context(context_), skipper(skipper_)
+        {
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // return true if the parser succeeds
+            return component.parse(first, last, context, skipper,
+                unused);
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        alternative_function& operator= (alternative_function const&);
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/assign_to.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/assign_to.hpp
new file mode 100644 (file)
index 0000000..38142bf
--- /dev/null
@@ -0,0 +1,392 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASSIGN_TO_APR_16_2006_0812PM)
+#define BOOST_SPIRIT_ASSIGN_TO_APR_16_2006_0812PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/construct.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/fusion/include/copy.hpp>
+#include <boost/ref.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains assignment utilities. The utilities provided also
+    //  accept spirit's unused_type; all no-ops. Compiler optimization will
+    //  easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct is_iter_range : mpl::false_ {};
+
+        template <typename I>
+        struct is_iter_range<boost::iterator_range<I> > : mpl::true_ {};
+
+        template <typename C>
+        struct is_container_of_ranges
+          : is_iter_range<typename C::value_type> {};
+    }
+
+    template <typename Attribute, typename Iterator, typename Enable>
+    struct assign_to_attribute_from_iterators
+    {
+        // Common case
+        static void
+        call(Iterator const& first, Iterator const& last, Attribute& attr, mpl::false_)
+        {
+            if (traits::is_empty(attr))
+                attr = Attribute(first, last);
+            else {
+                for (Iterator i = first; i != last; ++i)
+                    push_back(attr, *i);
+            }
+        }
+
+        // If Attribute is a container with value_type==iterator_range<T> just push the
+        // iterator_range into it
+        static void
+        call(Iterator const& first, Iterator const& last, Attribute& attr, mpl::true_)
+        {
+            typename Attribute::value_type rng(first, last);
+            push_back(attr, rng);
+        }
+
+        static void
+        call(Iterator const& first, Iterator const& last, Attribute& attr)
+        {
+            call(first, last, attr, detail::is_container_of_ranges<Attribute>());
+        }
+    };
+
+    template <typename Attribute, typename Iterator>
+    struct assign_to_attribute_from_iterators<
+        reference_wrapper<Attribute>, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last
+          , reference_wrapper<Attribute> attr)
+        {
+            if (traits::is_empty(attr))
+                attr = Attribute(first, last);
+            else {
+                for (Iterator i = first; i != last; ++i)
+                    push_back(attr, *i);
+            }
+        }
+    };
+
+    template <typename Attribute, typename Iterator>
+    struct assign_to_attribute_from_iterators<
+        boost::optional<Attribute>, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last
+          , boost::optional<Attribute>& attr)
+        {
+            Attribute val;
+            assign_to(first, last, val);
+            attr = val;
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<
+        iterator_range<Iterator>, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last
+          , iterator_range<Iterator>& attr)
+        {
+            attr = iterator_range<Iterator>(first, last);
+        }
+    };
+
+    template <typename Iterator, typename Attribute>
+    inline void
+    assign_to(Iterator const& first, Iterator const& last, Attribute& attr)
+    {
+        assign_to_attribute_from_iterators<Attribute, Iterator>::
+            call(first, last, attr);
+    }
+
+    template <typename Iterator>
+    inline void
+    assign_to(Iterator const&, Iterator const&, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    void assign_to(T const& val, Attribute& attr);
+
+    template <typename Attribute, typename T, typename Enable>
+    struct assign_to_attribute_from_value
+    {
+        typedef typename traits::one_element_sequence<Attribute>::type
+            is_one_element_sequence;
+
+        typedef typename mpl::eval_if<
+            is_one_element_sequence
+          , fusion::result_of::at_c<Attribute, 0>
+          , mpl::identity<Attribute&>
+        >::type type;
+
+        template <typename T_>
+        static void
+        call(T_ const& val, Attribute& attr, mpl::false_)
+        {
+            attr = static_cast<Attribute>(val);
+        }
+
+        // This handles the case where the attribute is a single element fusion
+        // sequence. We silently assign to the only element and treat it as the
+        // attribute to parse the results into.
+        template <typename T_>
+        static void
+        call(T_ const& val, Attribute& attr, mpl::true_)
+        {
+            typedef typename fusion::result_of::value_at_c<Attribute, 0>::type
+                element_type;
+            fusion::at_c<0>(attr) = static_cast<element_type>(val);
+        }
+
+        static void
+        call(T const& val, Attribute& attr)
+        {
+            call(val, attr, is_one_element_sequence());
+        }
+    };
+
+    template <typename Attribute>
+    struct assign_to_attribute_from_value<Attribute, Attribute>
+    {
+        static void
+        call(Attribute const& val, Attribute& attr)
+        {
+            attr = val;
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_attribute_from_value<Attribute, reference_wrapper<T>
+      , typename disable_if<is_same<Attribute, reference_wrapper<T> > >::type>
+    {
+        static void
+        call(reference_wrapper<T> const& val, Attribute& attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_attribute_from_value<Attribute, boost::optional<T>
+      , typename disable_if<is_same<Attribute, boost::optional<T> > >::type>
+    {
+        static void
+        call(boost::optional<T> const& val, Attribute& attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    namespace detail
+    {
+        template <typename A, typename B>
+        struct is_same_size_sequence
+          : mpl::bool_<fusion::result_of::size<A>::value
+                == fusion::result_of::size<B>::value>
+        {};
+    }
+
+    template <typename Attribute, typename T>
+    struct assign_to_attribute_from_value<Attribute, T,
+            mpl::and_<
+                fusion::traits::is_sequence<Attribute>,
+                fusion::traits::is_sequence<T>,
+                detail::is_same_size_sequence<Attribute, T>
+            >
+        >
+    {
+        static void
+        call(T const& val, Attribute& attr)
+        {
+            fusion::copy(val, attr);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename T, typename Enable>
+    struct assign_to_container_from_value
+    {
+        // T is not a container and not a string
+        template <typename T_>
+        static void call(T_ const& val, Attribute& attr, mpl::false_, mpl::false_)
+        {
+            traits::push_back(attr, val);
+        }
+
+        // T is a container (but not a string), and T is convertible to the 
+        // value_type of the Attribute container
+        template <typename T_>
+        static void 
+        append_to_container_not_string(T_ const& val, Attribute& attr, mpl::true_)
+        {
+            traits::push_back(attr, val);
+        }
+
+        // T is a container (but not a string), generic overload
+        template <typename T_>
+        static void 
+        append_to_container_not_string(T_ const& val, Attribute& attr, mpl::false_)
+        {
+            typedef typename traits::container_iterator<T_ const>::type
+                iterator_type;
+
+            iterator_type end = traits::end(val);
+            for (iterator_type i = traits::begin(val); i != end; traits::next(i))
+                traits::push_back(attr, traits::deref(i));
+        }
+
+        // T is a container (but not a string)
+        template <typename T_>
+        static void call(T_ const& val, Attribute& attr,  mpl::true_, mpl::false_)
+        {
+            typedef typename container_value<Attribute>::type value_type;
+            typedef typename is_convertible<T, value_type>::type is_value_type;
+
+            append_to_container_not_string(val, attr, is_value_type());
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // T is a string
+        template <typename Iterator>
+        static void append_to_string(Attribute& attr, Iterator begin, Iterator end)
+        {
+            for (Iterator i = begin; i != end; ++i)
+                traits::push_back(attr, *i);
+        }
+
+        // T is string, but not convertible to value_type of container
+        template <typename T_>
+        static void append_to_container(T_ const& val, Attribute& attr, mpl::false_)
+        {
+            typedef typename char_type_of<T_>::type char_type;
+
+            append_to_string(attr, traits::get_begin<char_type>(val)
+              , traits::get_end<char_type>(val));
+        }
+
+        // T is string, and convertible to value_type of container
+        template <typename T_>
+        static void append_to_container(T_ const& val, Attribute& attr, mpl::true_)
+        {
+            traits::push_back(attr, val);
+        }
+
+        template <typename T_, typename Pred>
+        static void call(T_ const& val, Attribute& attr, Pred, mpl::true_)
+        {
+            typedef typename container_value<Attribute>::type value_type;
+            typedef typename is_convertible<T, value_type>::type is_value_type;
+
+            append_to_container(val, attr, is_value_type());
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        static void call(T const& val, Attribute& attr)
+        {
+            typedef typename traits::is_container<T>::type is_container;
+            typedef typename traits::is_string<T>::type is_string;
+
+            call(val, attr, is_container(), is_string());
+        }
+    };
+
+    template <typename Attribute>
+    struct assign_to_container_from_value<Attribute, Attribute>
+    {
+        static void
+        call(Attribute const& val, Attribute& attr)
+        {
+            attr = val;
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_container_from_value<Attribute, boost::optional<T>
+      , typename disable_if<is_same<Attribute, boost::optional<T> > >::type>
+    {
+        static void
+        call(boost::optional<T> const& val, Attribute& attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    template <typename Attribute, typename T>
+    struct assign_to_container_from_value<Attribute, reference_wrapper<T>
+      , typename disable_if<is_same<Attribute, reference_wrapper<T> > >::type>
+    {
+        static void
+        call(reference_wrapper<T> const& val, Attribute& attr)
+        {
+            assign_to(val.get(), attr);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        // overload for non-container attributes
+        template <typename T, typename Attribute>
+        inline void
+        assign_to(T const& val, Attribute& attr, mpl::false_)
+        {
+            assign_to_attribute_from_value<Attribute, T>::call(val, attr);
+        }
+
+        // overload for containers (but not for variants or optionals
+        // holding containers)
+        template <typename T, typename Attribute>
+        inline void
+        assign_to(T const& val, Attribute& attr, mpl::true_)
+        {
+            assign_to_container_from_value<Attribute, T>::call(val, attr);
+        }
+    }
+
+    template <typename T, typename Attribute>
+    inline void
+    assign_to(T const& val, Attribute& attr)
+    {
+        typedef typename mpl::and_<
+            traits::is_container<Attribute>
+          , traits::not_is_variant<Attribute>
+          , traits::not_is_optional<Attribute>
+        >::type is_not_wrapped_container;
+
+        detail::assign_to(val, attr, is_not_wrapped_container());
+    }
+
+    template <typename T>
+    inline void
+    assign_to(T const&, unused_type)
+    {
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/attributes.hpp
new file mode 100644 (file)
index 0000000..0a66a65
--- /dev/null
@@ -0,0 +1,176 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_QI_DETAIL_ATTRIBUTES_APR_18_2010_0458PM)
+#define SPIRIT_QI_DETAIL_ATTRIBUTES_APR_18_2010_0458PM
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/utree/utree_traits_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Exposed, typename Transformed>
+    struct default_transform_attribute
+    {
+        typedef Transformed type;
+
+        static Transformed pre(Exposed&) { return Transformed(); }
+
+        static void post(Exposed& val, Transformed const& attr)
+        {
+            traits::assign_to(attr, val);
+        }
+
+        // fail() will be called by Qi rule's if the rhs failed parsing
+        static void fail(Exposed&) {}
+    };
+
+    // handle case where no transformation is required as the types are the same
+    template <typename Attribute>
+    struct default_transform_attribute<Attribute, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    template <typename Exposed, typename Transformed>
+    struct proxy_transform_attribute
+    {
+        typedef Transformed type;
+
+        static Transformed pre(Exposed& val) { return Transformed(val); }
+        static void post(Exposed&, Transformed const&) { /* no-op */ }
+
+        // fail() will be called by Qi rule's if the rhs failed parsing
+        static void fail(Exposed&) {}
+    };
+
+    // handle case where no transformation is required as the types are the same
+    template <typename Attribute>
+    struct proxy_transform_attribute<Attribute, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    // main specialization for Qi
+    template <typename Exposed, typename Transformed, typename Enable = void>
+    struct transform_attribute
+      : mpl::if_<
+            mpl::and_<
+                mpl::not_<is_const<Exposed> >
+              , mpl::not_<is_reference<Exposed> >
+              , traits::is_proxy<Transformed> >
+          , proxy_transform_attribute<Exposed, Transformed>
+          , default_transform_attribute<Exposed, Transformed> 
+        >::type 
+    {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<boost::optional<Exposed>, Transformed
+      , typename disable_if<is_same<boost::optional<Exposed>, Transformed> >::type>
+    {
+        typedef Transformed& type;
+        static Transformed& pre(boost::optional<Exposed>& val)
+        {
+            if (!val)
+                val = Transformed();
+            return boost::get<Transformed>(val);
+        }
+        static void post(boost::optional<Exposed>&, Transformed const&) {}
+        static void fail(boost::optional<Exposed>& val)
+        {
+             val = none_t();    // leave optional uninitialized if rhs failed
+        }
+    };
+
+    // reference types need special handling
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+        static void fail(Attribute&) {}
+    };
+
+    // unused_type needs some special handling as well
+    template <>
+    struct transform_attribute<unused_type, unused_type>
+    {
+        typedef unused_type type;
+        static unused_type pre(unused_type) { return unused; }
+        static void post(unused_type, unused_type) {}
+        static void fail(unused_type) {}
+    };
+
+    template <>
+    struct transform_attribute<unused_type const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type const, Attribute>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const, unused_type>
+      : transform_attribute<unused_type, unused_type>
+    {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed, Transformed, qi::domain>
+      : qi::transform_attribute<Exposed, Transformed>
+    {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed&, Transformed, qi::domain>
+      : transform_attribute<Exposed, Transformed, qi::domain>
+    {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute, qi::domain>
+      : qi::transform_attribute<Attribute&, Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed>
+    void post_transform(Exposed& dest, Transformed const& attr)
+    {
+        return transform_attribute<Exposed, Transformed, qi::domain>::post(dest, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed>
+    void fail_transform(Exposed& dest, Transformed const&)
+    {
+        return transform_attribute<Exposed, Transformed, qi::domain>::fail(dest);
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/construct.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/construct.hpp
new file mode 100644 (file)
index 0000000..5d8122f
--- /dev/null
@@ -0,0 +1,202 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM)
+#define BOOST_SPIRIT_CONSTRUCT_MAR_24_2007_0629PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  We provide overloads for the assign_to_attribute_from_iterators
+    //  customization point for all built in types
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<char, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const&, char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<signed char, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const&, signed char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned char, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const&, unsigned char& attr)
+        {
+            attr = *first;
+        }
+    };
+
+    // wchar_t is intrinsic
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<wchar_t, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const&, wchar_t& attr)
+        {
+            attr = *first;
+        }
+    };
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    // wchar_t is intrinsic, have separate overload for unsigned short
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned short, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const&, unsigned short& attr)
+        {
+            attr = *first;
+        }
+    };
+#endif
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<bool, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, bool& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, bool_type(), attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<short, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, short& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, short_type(), attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<int, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, int& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, int_type(), attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned int, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, unsigned int& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, uint_type(), attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, long& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_type(), attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<unsigned long, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, unsigned long& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, ulong_type(), attr);
+        }
+    };
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long_long_type, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, long_long_type& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_long_type(), attr);
+        }
+    };
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<ulong_long_type, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, ulong_long_type& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, ulong_long_type(), attr);
+        }
+    };
+#endif
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<float, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, float& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, float_type(), attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<double, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, double& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, double_type(), attr);
+        }
+    };
+
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<long double, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, long double& attr)
+        {
+            Iterator first_ = first;
+            qi::parse(first_, last, long_double_type(), attr);
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/enable_lit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/enable_lit.hpp
new file mode 100644 (file)
index 0000000..8bf2518
--- /dev/null
@@ -0,0 +1,30 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_DETAIL_ENABLE_LIT_JAN_06_2011_0945PM)
+#define BOOST_SPIRIT_QI_DETAIL_ENABLE_LIT_JAN_06_2011_0945PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    // enables lazy lit(...) for qi
+    template <>
+    struct use_lazy_terminal<qi::domain, tag::lit, 1> 
+      : mpl::true_ {};
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/expect_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/expect_function.hpp
new file mode 100644 (file)
index 0000000..920e309
--- /dev/null
@@ -0,0 +1,105 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_EXPECT_FUNCTION_APR_29_2007_0558PM)
+#define SPIRIT_EXPECT_FUNCTION_APR_29_2007_0558PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <
+        typename Iterator, typename Context
+      , typename Skipper, typename Exception>
+    struct expect_function
+    {
+        typedef Iterator iterator_type;
+        typedef Context context_type;
+
+        expect_function(
+            Iterator& first_, Iterator const& last_
+          , Context& context_, Skipper const& skipper_)
+          : first(first_)
+          , last(last_)
+          , context(context_)
+          , skipper(skipper_)
+          , is_first(true)
+        {
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, Attribute& attr) const
+        {
+            // if this is not the first component in the expect chain we 
+            // need to flush any multi_pass iterator we might be acting on
+            if (!is_first)
+                spirit::traits::clear_queue(first);
+
+            // if we are testing the first component in the sequence,
+            // return true if the parser fails, if this is not the first
+            // component, throw exception if the parser fails
+            if (!component.parse(first, last, context, skipper, attr))
+            {
+                if (is_first)
+                {
+                    is_first = false;
+                    return true;        // true means the match failed
+                }
+                boost::throw_exception(Exception(first, last, component.what(context)));
+#if defined(BOOST_NO_EXCEPTIONS)
+                return true;            // for systems not supporting exceptions
+#endif
+            }
+            is_first = false;
+            return false;
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // if this is not the first component in the expect chain we 
+            // need to flush any multi_pass iterator we might be acting on
+            if (!is_first)
+                spirit::traits::clear_queue(first);
+
+            // if we are testing the first component in the sequence,
+            // return true if the parser fails, if this not the first
+            // component, throw exception if the parser fails
+            if (!component.parse(first, last, context, skipper, unused))
+            {
+                if (is_first)
+                {
+                    is_first = false;
+                    return true;
+                }
+                boost::throw_exception(Exception(first, last, component.what(context)));
+#if defined(BOOST_NO_EXCEPTIONS)
+                return false;   // for systems not supporting exceptions
+#endif
+            }
+            is_first = false;
+            return false;
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+        mutable bool is_first;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        expect_function& operator= (expect_function const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/fail_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/fail_function.hpp
new file mode 100644 (file)
index 0000000..7ab8d82
--- /dev/null
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_FAIL_FUNCTION_APRIL_22_2006_0159PM)
+#define SPIRIT_FAIL_FUNCTION_APRIL_22_2006_0159PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Iterator, typename Context, typename Skipper>
+    struct fail_function
+    {
+        typedef Iterator iterator_type;
+        typedef Context context_type;
+
+        fail_function(
+            Iterator& first_, Iterator const& last_
+          , Context& context_, Skipper const& skipper_)
+          : first(first_)
+          , last(last_)
+          , context(context_)
+          , skipper(skipper_)
+        {
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, Attribute& attr) const
+        {
+            // return true if the parser fails
+            return !component.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // return true if the parser fails
+            return !component.parse(first, last, context, skipper, unused);
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        fail_function& operator= (fail_function const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse.hpp
new file mode 100644 (file)
index 0000000..b81f1e7
--- /dev/null
@@ -0,0 +1,97 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DETAIL_PARSE_DEC_02_2009_0411PM)
+#define BOOST_SPIRIT_DETAIL_PARSE_DEC_02_2009_0411PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_flag.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct parse_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct parse_impl<Expr
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        template <typename Iterator>
+        static bool call(
+            Iterator& first
+          , Iterator last
+          , Expr const& expr)
+        {
+            return compile<qi::domain>(expr).parse(
+                first, last, unused, unused, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct phrase_parse_impl
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct phrase_parse_impl<Expr
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        template <typename Iterator, typename Skipper>
+        static bool call(
+            Iterator& first
+          , Iterator last
+          , Expr const& expr
+          , Skipper const& skipper
+          , BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the skipper is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+            typedef
+                typename result_of::compile<qi::domain, Skipper>::type
+            skipper_type;
+            skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+            if (!compile<qi::domain>(expr).parse(
+                    first, last, unused, skipper_, unused))
+                return false;
+
+            if (post_skip == skip_flag::postskip)
+                qi::skip_over(first, last, skipper_);
+            return true;
+        }
+    };
+
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/parse_auto.hpp
new file mode 100644 (file)
index 0000000..a61a0b4
--- /dev/null
@@ -0,0 +1,191 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DETAIL_PARSE_AUTO_DEC_02_2009_0426PM)
+#define BOOST_SPIRIT_DETAIL_PARSE_AUTO_DEC_02_2009_0426PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/auto/create_parser.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct parse_impl<Expr
+      , typename enable_if<
+            mpl::and_<
+                traits::meta_create_exists<qi::domain, Expr>
+              , mpl::not_<traits::matches<qi::domain, Expr> > >
+        >::type>
+    {
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, Expr& expr)
+        {
+            return qi::parse(first, last, create_parser<Expr>(), expr);
+        }
+
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, Expr const& expr)
+        {
+            return qi::parse(first, last, create_parser<Expr>()
+              , const_cast<Expr&>(expr));
+        }
+    };
+
+    // the following specializations are needed to explicitly disambiguate 
+    // the two possible specializations for parse_impl<char> and 
+    // parse_impl<wchar_t>
+    template <>
+    struct parse_impl<char>
+    {
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, char& expr)
+        {
+            return qi::parse(first, last, create_parser<char>(), expr);
+        }
+
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, char const&)
+        {
+            return qi::parse(first, last, create_parser<char>());
+        }
+    };
+
+    template <>
+    struct parse_impl<wchar_t>
+    {
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, wchar_t& expr)
+        {
+            return qi::parse(first, last, create_parser<wchar_t>(), expr);
+        }
+
+        template <typename Iterator>
+        static bool call(Iterator& first, Iterator last, wchar_t const&)
+        {
+            return qi::parse(first, last, create_parser<wchar_t>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct phrase_parse_impl<Expr
+      , typename enable_if<
+            mpl::and_<
+                traits::meta_create_exists<qi::domain, Expr>
+              , mpl::not_<traits::matches<qi::domain, Expr> > >
+        >::type>
+    {
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, Expr& expr
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<Expr>()
+              , skipper, post_skip, expr);
+        }
+
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, Expr const& expr
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<Expr>()
+              , skipper, post_skip, const_cast<Expr&>(expr));
+        }
+    };
+
+    // the following specializations are needed to explicitly disambiguate 
+    // the two possible specializations for phrase_parse_impl<char> and 
+    // phrase_parse_impl<wchar_t>
+    template <>
+    struct phrase_parse_impl<char>
+    {
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, char& expr
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<char>()
+              , skipper, post_skip, expr);
+        }
+
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, char const&
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<char>()
+              , skipper, post_skip);
+        }
+    };
+
+    template <>
+    struct phrase_parse_impl<wchar_t>
+    {
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, wchar_t& expr
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<wchar_t>()
+              , skipper, post_skip, expr);
+        }
+
+        template <typename Iterator, typename Skipper>
+        static bool call(Iterator& first, Iterator last, wchar_t const&
+          , Skipper const& skipper, BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            return qi::phrase_parse(first, last, create_parser<wchar_t>()
+              , skipper, post_skip);
+        }
+    };
+}}}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr& expr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::parse_impl<Expr>::call(first, last, expr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::phrase_parse_impl<Expr>::call(
+            first, last, expr, skipper, post_skip);
+    }
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_container.hpp
new file mode 100644 (file)
index 0000000..f41f1e9
--- /dev/null
@@ -0,0 +1,382 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PASS_CONTAINER_JANUARY_06_2009_0802PM)
+#define SPIRIT_PASS_CONTAINER_JANUARY_06_2009_0802PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    // Helper meta-function allowing to evaluate weak substitutability and
+    // negate the result if the predicate (Sequence) is not true
+    template <typename Sequence, typename Attribute, typename ValueType>
+    struct negate_weak_substitute_if_not
+      : mpl::if_<
+            Sequence
+          , typename traits::is_weak_substitute<Attribute, ValueType>::type
+          , typename mpl::not_<
+                traits::is_weak_substitute<Attribute, ValueType>
+            >::type>
+    {};
+
+    // pass_through_container: utility to check decide whether a provided
+    // container attribute needs to be passed through to the current component
+    // or of we need to split the container by passing along instances of its
+    // value type
+
+    // if the expected attribute of the current component is neither a Fusion
+    // sequence nor a container, we will pass through the provided container
+    // only if its value type is not compatible with the component
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename Enable = void>
+    struct pass_through_container_base
+      : negate_weak_substitute_if_not<Sequence, Attribute, ValueType>
+    {};
+
+    // Specialization for fusion sequences, in this case we check whether all
+    // the types in the sequence are convertible to the lhs attribute.
+    //
+    // We return false if the rhs attribute itself is a fusion sequence, which
+    // is compatible with the LHS sequence (we want to pass through this
+    // attribute without it being split apart).
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence = mpl::true_>
+    struct not_compatible_element
+      : mpl::and_<
+            negate_weak_substitute_if_not<Sequence, Attribute, Container>
+          , negate_weak_substitute_if_not<Sequence, Attribute, ValueType> >
+    {};
+
+    // If the value type of the container is not a Fusion sequence, we pass
+    // through the container if each of the elements of the Attribute
+    // sequence is compatible with either the container or its value type.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence
+      , bool IsSequence = fusion::traits::is_sequence<ValueType>::value>
+    struct pass_through_container_fusion_sequence
+    {
+        typedef typename mpl::find_if<
+            Attribute, not_compatible_element<Container, ValueType, mpl::_1>
+        >::type iter;
+        typedef typename mpl::end<Attribute>::type end;
+
+        typedef typename is_same<iter, end>::type type;
+    };
+
+    // If both, the Attribute and the value type of the provided container
+    // are Fusion sequences, we pass the container only if the two
+    // sequences are not compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence, true>
+    {
+        typedef typename mpl::find_if<
+            Attribute
+          , not_compatible_element<Container, ValueType, mpl::_1, Sequence>
+        >::type iter;
+        typedef typename mpl::end<Attribute>::type end;
+
+        typedef typename is_same<iter, end>::type type;
+    };
+
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_base<Container, ValueType, Attribute
+          , Sequence
+          , typename enable_if<fusion::traits::is_sequence<Attribute> >::type>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    // Specialization for containers
+    //
+    // If the value type of the attribute of the current component is not
+    // a Fusion sequence, we have to pass through the provided container if
+    // both are compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename AttributeValueType
+      , bool IsSequence = fusion::traits::is_sequence<AttributeValueType>::value>
+    struct pass_through_container_container
+      : mpl::or_<
+            traits::is_weak_substitute<Attribute, Container>
+          , traits::is_weak_substitute<AttributeValueType, Container> >
+    {};
+
+    // If the value type of the exposed container attribute is a Fusion
+    // sequence, we use the already existing logic for those.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename AttributeValueType>
+    struct pass_through_container_container<
+            Container, ValueType, Attribute, Sequence, AttributeValueType, true>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, AttributeValueType, Sequence>
+    {};
+
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_base<
+            Container, ValueType, Attribute, Sequence
+          , typename enable_if<traits::is_container<Attribute> >::type>
+      : detail::pass_through_container_container<
+            Container, ValueType, Attribute, Sequence
+          , typename traits::container_value<Attribute>::type>
+    {};
+
+    // Specialization for exposed optional attributes
+    //
+    // If the type embedded in the exposed optional is not a Fusion
+    // sequence we pass through the container attribute if it is compatible
+    // either to the optionals embedded type or to the containers value
+    // type.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence
+      , bool IsSequence = fusion::traits::is_sequence<Attribute>::value>
+    struct pass_through_container_optional
+      : mpl::or_<
+            traits::is_weak_substitute<Attribute, Container>
+          , traits::is_weak_substitute<Attribute, ValueType> >
+    {};
+
+    // If the embedded type of the exposed optional attribute is a Fusion
+    // sequence, we use the already existing logic for those.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container_optional<
+                Container, ValueType, Attribute, Sequence, true>
+      : pass_through_container_fusion_sequence<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container
+      : pass_through_container_base<Container, ValueType, Attribute, Sequence>
+    {};
+
+    // Handle optional attributes
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+                Container, ValueType, boost::optional<Attribute>, Sequence>
+      : pass_through_container_optional<
+            Container, ValueType, Attribute, Sequence>
+    {};
+
+    // If both, the containers value type and the exposed attribute type are
+    // optionals we are allowed to pass through the container only if the
+    // embedded types of those optionals are not compatible.
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+            Container, boost::optional<ValueType>, boost::optional<Attribute>
+          , Sequence>
+      : mpl::not_<traits::is_weak_substitute<Attribute, ValueType> >
+    {};
+
+    // Specialization for exposed variant attributes
+    //
+    // We pass through the container attribute if at least one of the embedded
+    // types in the variant requires to pass through the attribute
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+    template <typename Container, typename ValueType, typename Sequence
+      , typename T>
+    struct pass_through_container<Container, ValueType, boost::variant<T>
+          , Sequence>
+      : pass_through_container<Container, ValueType, T, Sequence>
+    {};
+
+    template <typename Container, typename ValueType, typename Sequence
+      , typename T0, typename ...TN>
+    struct pass_through_container<Container, ValueType
+          , boost::variant<T0, TN...>, Sequence>
+      : mpl::bool_<pass_through_container<
+            Container, ValueType, T0, Sequence
+            >::type::value || pass_through_container<
+                Container, ValueType, boost::variant<TN...>, Sequence
+            >::type::value>
+    {};
+#else
+#define BOOST_SPIRIT_PASS_THROUGH_CONTAINER(z, N, _)                          \
+    pass_through_container<Container, ValueType,                              \
+        BOOST_PP_CAT(T, N), Sequence>::type::value ||                         \
+    /***/
+
+    // make sure unused variant parameters do not affect the outcome
+    template <typename Container, typename ValueType, typename Sequence>
+    struct pass_through_container<Container, ValueType
+          , boost::detail::variant::void_, Sequence>
+      : mpl::false_
+    {};
+
+    template <typename Container, typename ValueType, typename Sequence
+      , BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct pass_through_container<Container, ValueType
+          , boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Sequence>
+      : mpl::bool_<BOOST_PP_REPEAT(BOOST_VARIANT_LIMIT_TYPES
+          , BOOST_SPIRIT_PASS_THROUGH_CONTAINER, _) false>
+    {};
+
+#undef BOOST_SPIRIT_PASS_THROUGH_CONTAINER
+#endif
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // forwarding customization point for domain qi::domain
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence>
+    struct pass_through_container<
+            Container, ValueType, Attribute, Sequence, qi::domain>
+      : qi::detail::pass_through_container<
+            Container, ValueType, Attribute, Sequence>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This function handles the case where the attribute (Attr) given
+    // the sequence is an STL container. This is a wrapper around F.
+    // The function F does the actual parsing.
+    template <typename F, typename Attr, typename Sequence>
+    struct pass_container
+    {
+        typedef typename F::context_type context_type;
+        typedef typename F::iterator_type iterator_type;
+
+        pass_container(F const& f_, Attr& attr_)
+          : f(f_), attr(attr_) {}
+
+        // this is for the case when the current element exposes an attribute
+        // which is pushed back onto the container
+        template <typename Component>
+        bool dispatch_container(Component const& component, mpl::false_) const
+        {
+            // synthesized attribute needs to be default constructed
+            typename traits::container_value<Attr>::type val =
+                typename traits::container_value<Attr>::type();
+
+            iterator_type save = f.first;
+            bool r = f(component, val);
+            if (!r)
+            {
+                // push the parsed value into our attribute
+                r = !traits::push_back(attr, val);
+                if (r)
+                    f.first = save;
+            }
+            return r;
+        }
+
+        // this is for the case when the current element is able to handle an
+        // attribute which is a container itself, this element will push its
+        // data directly into the attribute container
+        template <typename Component>
+        bool dispatch_container(Component const& component, mpl::true_) const
+        {
+            return f(component, attr);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // this is for the case when the current element doesn't expect an
+        // attribute
+        template <typename Component>
+        bool dispatch_attribute(Component const& component, mpl::false_) const
+        {
+            return f(component, unused);
+        }
+
+        // the current element expects an attribute
+        template <typename Component>
+        bool dispatch_attribute(Component const& component, mpl::true_) const
+        {
+            typedef typename traits::container_value<Attr>::type value_type;
+            typedef typename traits::attribute_of<
+                Component, context_type, iterator_type>::type
+            rhs_attribute;
+
+            // this predicate detects, whether the attribute of the current
+            // element is a substitute for the value type of the container
+            // attribute
+            typedef mpl::and_<
+                traits::handles_container<
+                    Component, Attr, context_type, iterator_type>
+              , traits::pass_through_container<
+                    Attr, value_type, rhs_attribute, Sequence, qi::domain>
+            > predicate;
+
+            return dispatch_container(component, predicate());
+        }
+
+        // Dispatches to dispatch_main depending on the attribute type
+        // of the Component
+        template <typename Component>
+        bool operator()(Component const& component) const
+        {
+            // we need to dispatch depending on the type of the attribute
+            // of the current element (component). If this is has no attribute
+            // we shouldn't pass an attribute at all.
+            typedef typename traits::not_is_unused<
+                typename traits::attribute_of<
+                    Component, context_type, iterator_type
+                >::type
+            >::type predicate;
+
+            // ensure the attribute is actually a container type
+            traits::make_container(attr);
+
+            return dispatch_attribute(component, predicate());
+        }
+
+        F f;
+        Attr& attr;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        pass_container& operator= (pass_container const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Utility function to make a pass_container for container components
+    // (kleene, list, plus, repeat)
+    template <typename F, typename Attr>
+    inline pass_container<F, Attr, mpl::false_>
+    make_pass_container(F const& f, Attr& attr)
+    {
+        return pass_container<F, Attr, mpl::false_>(f, attr);
+    }
+
+    // Utility function to make a pass_container for sequences
+    template <typename F, typename Attr>
+    inline pass_container<F, Attr, mpl::true_>
+    make_sequence_pass_container(F const& f, Attr& attr)
+    {
+        return pass_container<F, Attr, mpl::true_>(f, attr);
+    }
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/pass_function.hpp
new file mode 100644 (file)
index 0000000..555adb8
--- /dev/null
@@ -0,0 +1,70 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PASS_FUNCTION_FEBRUARY_05_2007_1138AM)
+#define SPIRIT_PASS_FUNCTION_FEBRUARY_05_2007_1138AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/optional.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Iterator, typename Context, typename Skipper>
+    struct pass_function
+    {
+        pass_function(
+            Iterator& first_, Iterator const& last_
+          , Context& context_, Skipper const& skipper_)
+          : first(first_)
+          , last(last_)
+          , context(context_)
+          , skipper(skipper_)
+        {
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, Attribute& attr)
+        {
+            // return true if the parser succeeds
+            return component.parse(first, last, context, skipper, attr);
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, boost::optional<Attribute>& attr)
+        {
+            // return true if the parser succeeds
+            Attribute val;
+            if (component.parse(first, last, context, skipper, val))
+            {
+                attr = val;
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component)
+        {
+            // return true if the parser succeeds
+            return component.parse(first, last, context, skipper, unused);
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        pass_function& operator= (pass_function const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/permute_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/permute_function.hpp
new file mode 100644 (file)
index 0000000..8b1ed8a
--- /dev/null
@@ -0,0 +1,88 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PERMUTE_FUNCTION_MARCH_13_2007_1129AM)
+#define SPIRIT_PERMUTE_FUNCTION_MARCH_13_2007_1129AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/optional.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Iterator, typename Context, typename Skipper>
+    struct permute_function
+    {
+        permute_function(
+            Iterator& first_, Iterator const& last_
+          , Context& context_, Skipper const& skipper_)
+          : first(first_)
+          , last(last_)
+          , context(context_)
+          , skipper(skipper_)
+        {
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, Attribute& attr)
+        {
+            // return true if the parser succeeds and the slot is not yet taken
+            if (!*taken && component.parse(first, last, context, skipper, attr))
+            {
+                *taken = true;
+                ++taken;
+                return true;
+            }
+            ++taken;
+            return false;
+        }
+
+        template <typename Component, typename Attribute>
+        bool operator()(Component const& component, boost::optional<Attribute>& attr)
+        {
+            // return true if the parser succeeds and the slot is not yet taken
+            Attribute val;
+            if (!*taken && component.parse(first, last, context, skipper, val))
+            {
+                attr = val;
+                *taken = true;
+                ++taken;
+                return true;
+            }
+            ++taken;
+            return false;
+        }
+
+        template <typename Component>
+        bool operator()(Component const& component)
+        {
+            // return true if the parser succeeds and the slot is not yet taken
+            if (!*taken && component.parse(first, last, context, skipper, unused))
+            {
+                *taken = true;
+                ++taken;
+                return true;
+            }
+            ++taken;
+            return false;
+        }
+
+        Iterator& first;
+        Iterator const& last;
+        Context& context;
+        Skipper const& skipper;
+        bool* taken;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        permute_function& operator= (permute_function const&);
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/string_parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/string_parse.hpp
new file mode 100644 (file)
index 0000000..4025df5
--- /dev/null
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_STRING_PARSE_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_STRING_PARSE_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Char, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        Char const* str
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+        Char ch = *str;
+
+        for (; !!ch; ++i)
+        {
+            if (i == last || (ch != *i))
+                return false;
+            ch = *++str;
+        }
+
+        spirit::traits::assign_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename String, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        String const& str
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+        typename String::const_iterator stri = str.begin();
+        typename String::const_iterator str_last = str.end();
+
+        for (; stri != str_last; ++stri, ++i)
+            if (i == last || (*stri != *i))
+                return false;
+        spirit::traits::assign_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename Char, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        Char const* uc_i, Char const* lc_i
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+
+        for (; *uc_i && *lc_i; ++uc_i, ++lc_i, ++i)
+            if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+                return false;
+        spirit::traits::assign_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename String, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        String const& ucstr, String const& lcstr
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        typename String::const_iterator uc_i = ucstr.begin();
+        typename String::const_iterator uc_last = ucstr.end();
+        typename String::const_iterator lc_i = lcstr.begin();
+        Iterator i = first;
+
+        for (; uc_i != uc_last; ++uc_i, ++lc_i, ++i)
+            if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+                return false;
+        spirit::traits::assign_to(first, i, attr);
+        first = i;
+        return true;
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/unused_skipper.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/detail/unused_skipper.hpp
new file mode 100644 (file)
index 0000000..b8a51f3
--- /dev/null
@@ -0,0 +1,63 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM)
+#define BOOST_SPIRIT_QI_UNUSED_SKIPPER_JUL_25_2009_0921AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    template <typename Skipper>
+    struct unused_skipper : unused_type
+    {
+        unused_skipper(Skipper const& skipper_)
+          : skipper(skipper_) {}
+        Skipper const& skipper;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        unused_skipper& operator= (unused_skipper const&);
+    };
+
+    template <typename Skipper>
+    struct is_unused_skipper
+      : mpl::false_ {};
+
+    template <typename Skipper>
+    struct is_unused_skipper<unused_skipper<Skipper> >
+      : mpl::true_ {};
+
+    template <>
+    struct is_unused_skipper<unused_type>
+      : mpl::true_ {};
+
+    // If a surrounding lexeme[] directive was specified, the current
+    // skipper is of the type unused_skipper. In this case we
+    // re-activate the skipper which was active before the skip[]
+    // directive.
+    template <typename Skipper>
+    inline Skipper const&
+    get_skipper(unused_skipper<Skipper> const& u)
+    {
+        return u.skipper;
+    }
+
+    // If no surrounding lexeme[] directive was specified we keep what we got.
+    template <typename Skipper>
+    inline Skipper const&
+    get_skipper(Skipper const& u)
+    {
+        return u;
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive.hpp
new file mode 100644 (file)
index 0000000..6d97ce4
--- /dev/null
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_DIRECTIVE_FEBRUARY_05_2007_0313PM)
+#define BOOST_SPIRIT_DIRECTIVE_FEBRUARY_05_2007_0313PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/as.hpp>
+#include <boost/spirit/home/qi/directive/encoding.hpp>
+#include <boost/spirit/home/qi/directive/hold.hpp>
+#include <boost/spirit/home/qi/directive/lexeme.hpp>
+#include <boost/spirit/home/qi/directive/no_skip.hpp>
+#include <boost/spirit/home/qi/directive/matches.hpp>
+#include <boost/spirit/home/qi/directive/no_case.hpp>
+#include <boost/spirit/home/qi/directive/omit.hpp>
+#include <boost/spirit/home/qi/directive/raw.hpp>
+#include <boost/spirit/home/qi/directive/repeat.hpp>
+#include <boost/spirit/home/qi/directive/skip.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/as.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/as.hpp
new file mode 100644 (file)
index 0000000..e0376eb
--- /dev/null
@@ -0,0 +1,178 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_AS_DECEMBER_6_2010_1013AM)
+#define SPIRIT_AS_DECEMBER_6_2010_1013AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename T>
+    struct as
+      : stateful_tag_type<T, tag::as>
+    {
+        //~ BOOST_SPIRIT_ASSERT_MSG(
+            //~ (traits::is_container<T>::type::value),
+            //~ error_type_must_be_a_container,
+            //~ (T));
+    };
+}}}
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    // enables as_string[...]
+    template <>
+    struct use_directive<qi::domain, tag::as_string>
+      : mpl::true_ {};
+
+    // enables as_wstring[...]
+    template <>
+    struct use_directive<qi::domain, tag::as_wstring>
+      : mpl::true_ {};
+
+    // enables as<T>[...]
+    template <typename T>
+    struct use_directive<qi::domain, tag::stateful_tag<T, tag::as> >
+      : mpl::true_
+    {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::as_string;
+    using spirit::as_wstring;
+#endif
+    using spirit::as_string_type;
+    using spirit::as_wstring_type;
+
+    template <typename Subject, typename T>
+    struct as_directive : unary_parser<as_directive<Subject, T> >
+    {
+        typedef Subject subject_type;
+        as_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            Iterator i = first;
+            T as_attr;
+            if (subject.parse(i, last, context, skipper, as_attr))
+            {
+                spirit::traits::assign_to(as_attr, attr_);
+                first = i;
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Context, typename Skipper>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, T& attr_) const
+        {
+            Iterator i = first;
+            if (subject.parse(i, last, context, skipper, attr_))
+            {
+                first = i;
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("as", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::as_string, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, std::string> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::as_wstring, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, std::basic_string<wchar_t> > result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<tag::stateful_tag<T, tag::as>, Subject, Modifiers>
+    {
+        typedef as_directive<Subject, T> result_type;
+        result_type operator()(unused_type, Subject const& subject
+          , unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T>
+    struct has_semantic_action<qi::as_directive<Subject, T> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename T, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::as_directive<Subject, T>, Attribute
+        , Context, Iterator>
+      : mpl::false_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/encoding.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/encoding.hpp
new file mode 100644 (file)
index 0000000..5eaf0f6
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ENCODING_MARCH_05_2010_0528PM)
+#define SPIRIT_ENCODING_MARCH_05_2010_0528PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_directive<
+        qi::domain, tag::char_code<tag::encoding, CharEncoding> > // enables encoding
+      : mpl::true_ {};
+
+    template <typename CharEncoding>
+    struct is_modifier_directive<qi::domain, tag::char_code<tag::encoding, CharEncoding> >
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/hold.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/hold.hpp
new file mode 100644 (file)
index 0000000..9cd905c
--- /dev/null
@@ -0,0 +1,109 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_HOLD_FEBRUARY_6_2010_0917AM)
+#define SPIRIT_HOLD_FEBRUARY_6_2010_0917AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::hold> // enables hold
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::hold;
+#endif
+    using spirit::hold_type;
+
+    template <typename Subject>
+    struct hold_directive : unary_parser<hold_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        hold_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            Attribute copy(attr_);
+            if (subject.parse(first, last, context, skipper, copy))
+            {
+                traits::swap_impl(copy, attr_);
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("hold", subject.what(context));
+
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::hold, Subject, Modifiers>
+    {
+        typedef hold_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::hold_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::hold_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/lexeme.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/lexeme.hpp
new file mode 100644 (file)
index 0000000..691d4fa
--- /dev/null
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_LEXEME_MARCH_24_2007_0802AM)
+#define SPIRIT_LEXEME_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::lexeme> // enables lexeme
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::lexeme;
+#endif
+    using spirit::lexeme_type;
+
+    template <typename Subject>
+    struct lexeme_directive : unary_parser<lexeme_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        lexeme_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+            return subject.parse(first, last, context
+              , detail::unused_skipper<Skipper>(skipper), attr_);
+        }
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            //  no need to pre-skip if skipper is unused
+            //- qi::skip_over(first, last, skipper);
+            return subject.parse(first, last, context
+              , skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("lexeme", subject.what(context));
+
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::lexeme, Subject, Modifiers>
+    {
+        typedef lexeme_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::lexeme_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::lexeme_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/matches.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/matches.hpp
new file mode 100644 (file)
index 0000000..b6fecb9
--- /dev/null
@@ -0,0 +1,108 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_MATCHES_JAN_07_2010_0745PM)
+#define SPIRIT_MATCHES_JAN_07_2010_0745PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::matches> // enables matches
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::matches;
+#endif
+    using spirit::matches_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // matches_directive returns whether the embedded parser matched
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct matches_directive : unary_parser<matches_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        matches_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef bool type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            bool result = subject.parse(first, last, context, skipper, unused);
+            spirit::traits::assign_to(result, attr_);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("matches", subject.what(context));
+        }
+
+        Subject subject;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        matches_directive& operator= (matches_directive const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::matches, Subject, Modifiers>
+    {
+        typedef matches_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::matches_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::matches_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_case.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_case.hpp
new file mode 100644 (file)
index 0000000..1bd8b62
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NO_CASE_OCTOBER_25_2008_0424PM)
+#define SPIRIT_NO_CASE_OCTOBER_25_2008_0424PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename CharEncoding>
+    struct use_directive<
+        qi::domain, tag::char_code<tag::no_case, CharEncoding> > // enables no_case
+      : mpl::true_ {};
+
+    template <typename CharEncoding>
+    struct is_modifier_directive<qi::domain, tag::char_code<tag::no_case, CharEncoding> >
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/no_skip.hpp
new file mode 100644 (file)
index 0000000..119b0c8
--- /dev/null
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NO_SKIP_JAN_16_2010_0802PM)
+#define SPIRIT_NO_SKIP_JAN_16_2010_0802PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::no_skip> // enables no_skip
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::no_skip;
+#endif
+    using spirit::no_skip_type;
+
+    // same as lexeme[], but does not pre-skip
+    template <typename Subject>
+    struct no_skip_directive : unary_parser<no_skip_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        no_skip_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return subject.parse(first, last, context
+              , detail::unused_skipper<Skipper>(skipper), attr_);
+        }
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return subject.parse(first, last, context
+              , skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("no_skip", subject.what(context));
+
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::no_skip, Subject, Modifiers>
+    {
+        typedef no_skip_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::no_skip_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::no_skip_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/omit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/omit.hpp
new file mode 100644 (file)
index 0000000..05a6a76
--- /dev/null
@@ -0,0 +1,107 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_OMIT_MARCH_24_2007_0802AM)
+#define SPIRIT_OMIT_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::omit> // enables omit
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::omit;
+#endif
+    using spirit::omit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // omit_directive forces the attribute of subject parser
+    // to be unused_type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct omit_directive : unary_parser<omit_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        omit_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            return subject.parse(first, last, context, skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("omit", subject.what(context));
+        }
+
+        Subject subject;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        omit_directive& operator= (omit_directive const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::omit, Subject, Modifiers>
+    {
+        typedef omit_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::omit_directive<Subject> >
+      : mpl::false_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::omit_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/raw.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/raw.hpp
new file mode 100644 (file)
index 0000000..e1d208e
--- /dev/null
@@ -0,0 +1,111 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_RAW_APRIL_9_2007_0912AM)
+#define SPIRIT_RAW_APRIL_9_2007_0912AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::raw> // enables raw
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::raw;
+#endif
+    using spirit::raw_type;
+
+    template <typename Subject>
+    struct raw_directive : unary_parser<raw_directive<Subject> >
+    {
+        typedef Subject subject_type;
+        raw_directive(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef iterator_range<Iterator> type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+            Iterator i = first;
+            if (subject.parse(i, last, context, skipper, unused))
+            {
+                spirit::traits::assign_to(first, i, attr_);
+                first = i;
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("raw", subject.what(context));
+
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::raw, Subject, Modifiers>
+    {
+        typedef raw_directive<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::raw_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::raw_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/repeat.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/repeat.hpp
new file mode 100644 (file)
index 0000000..72c3a99
--- /dev/null
@@ -0,0 +1,297 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_REPEAT_NOVEMBER_14_2008_1148AM)
+#define SPIRIT_REPEAT_NOVEMBER_14_2008_1148AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/operator/kleene.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/qi/detail/pass_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <vector>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::repeat>   // enables repeat[p]
+      : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::repeat                     // enables repeat(exact)[p]
+        , fusion::vector1<T> >
+    > : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::repeat                     // enables repeat(min, max)[p]
+        , fusion::vector2<T, T> >
+    > : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::repeat                     // enables repeat(min, inf)[p]
+        , fusion::vector2<T, inf_type> >
+    > : mpl::true_ {};
+
+    template <>                                     // enables *lazy* repeat(exact)[p]
+    struct use_lazy_directive<
+        qi::domain
+      , tag::repeat
+      , 1 // arity
+    > : mpl::true_ {};
+
+    template <>                                     // enables *lazy* repeat(min, max)[p]
+    struct use_lazy_directive<                      // and repeat(min, inf)[p]
+        qi::domain
+      , tag::repeat
+      , 2 // arity
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::repeat;
+    using spirit::inf;
+#endif
+    using spirit::repeat_type;
+    using spirit::inf_type;
+
+    template <typename T>
+    struct exact_iterator // handles repeat(exact)[p]
+    {
+        exact_iterator(T const exact_)
+          : exact(exact_) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T i) const { return i >= exact; }
+        bool got_min(T i) const { return i >= exact; }
+
+        T const exact;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        exact_iterator& operator= (exact_iterator const&);
+    };
+
+    template <typename T>
+    struct finite_iterator // handles repeat(min, max)[p]
+    {
+        finite_iterator(T const min_, T const max_)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min_)
+          , max BOOST_PREVENT_MACRO_SUBSTITUTION (max_) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T i) const { return i >= max; }
+        bool got_min(T i) const { return i >= min; }
+
+        T const min;
+        T const max;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        finite_iterator& operator= (finite_iterator const&);
+    };
+
+    template <typename T>
+    struct infinite_iterator // handles repeat(min, inf)[p]
+    {
+        infinite_iterator(T const min_)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min_) {}
+
+        typedef T type;
+        T start() const { return 0; }
+        bool got_max(T /*i*/) const { return false; }
+        bool got_min(T i) const { return i >= min; }
+
+        T const min;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        infinite_iterator& operator= (infinite_iterator const&);
+    };
+
+    template <typename Subject, typename LoopIter>
+    struct repeat_parser : unary_parser<repeat_parser<Subject, LoopIter> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Build a std::vector from the subject's attribute. Note
+            // that build_std_vector may return unused_type if the
+            // subject's attribute is an unused_type.
+            typedef typename
+                traits::build_std_vector<
+                    typename traits::attribute_of<
+                        Subject, Context, Iterator>::type
+                >::type
+            type;
+        };
+
+        repeat_parser(Subject const& subject_, LoopIter const& iter_)
+          : subject(subject_), iter(iter_) {}
+
+        template <typename F>
+        bool parse_container(F f) const
+        {
+            typename LoopIter::type i = iter.start();
+            for (/**/; !iter.got_min(i); ++i)
+            {
+                if (f (subject))
+                    return false;
+            }
+
+            // parse some more up to the maximum specified
+            typename F::iterator_type save = f.f.first;
+            for (/**/; !iter.got_max(i); ++i)
+            {
+                if (f (subject))
+                    break;
+                save = f.f.first;
+            }
+
+            f.f.first = save;
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef detail::fail_function<Iterator, Context, Skipper>
+                fail_function;
+
+            // ensure the attribute is actually a container type
+            traits::make_container(attr_);
+
+            Iterator iter_local = first;
+            fail_function f(iter_local, last, context, skipper);
+            if (!parse_container(detail::make_pass_container(f, attr_)))
+                return false;
+
+            first = f.first;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("repeat", subject.what(context));
+        }
+
+        Subject subject;
+        LoopIter iter;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        repeat_parser& operator= (repeat_parser const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::repeat, Subject, Modifiers>
+    {
+        typedef kleene<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat, fusion::vector1<T> >, Subject, Modifiers>
+    {
+        typedef exact_iterator<T> iterator_type;
+        typedef repeat_parser<Subject, iterator_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat, fusion::vector2<T, T> >, Subject, Modifiers>
+    {
+        typedef finite_iterator<T> iterator_type;
+        typedef repeat_parser<Subject, iterator_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject,
+                iterator_type(
+                    fusion::at_c<0>(term.args)
+                  , fusion::at_c<1>(term.args)
+                )
+            );
+        }
+    };
+
+    template <typename T, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::repeat
+        , fusion::vector2<T, inf_type> >, Subject, Modifiers>
+    {
+        typedef infinite_iterator<T> iterator_type;
+        typedef repeat_parser<Subject, iterator_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            return result_type(subject, fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename LoopIter>
+    struct has_semantic_action<qi::repeat_parser<Subject, LoopIter> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename LoopIter, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<qi::repeat_parser<Subject, LoopIter>
+          , Attribute, Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/directive/skip.hpp
new file mode 100644 (file)
index 0000000..6cc6f77
--- /dev/null
@@ -0,0 +1,202 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SKIP_JANUARY_26_2008_0422PM)
+#define SPIRIT_SKIP_JANUARY_26_2008_0422PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/operator/kleene.hpp>
+#include <boost/spirit/home/qi/directive/lexeme.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_directive<qi::domain, tag::skip>     // enables skip[p]
+      : mpl::true_ {};
+
+    template <typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<tag::skip                       // enables skip(s)[p]
+        , fusion::vector1<T> >
+    > : boost::spirit::traits::matches<qi::domain, T> {};
+
+    template <>                                     // enables *lazy* skip(s)[p]
+    struct use_lazy_directive<
+        qi::domain
+      , tag::skip
+      , 1 // arity
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::skip;
+#endif
+    using spirit::skip_type;
+
+    template <typename Subject>
+    struct reskip_parser : unary_parser<reskip_parser<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<Subject, Context, Iterator>::type
+            type;
+        };
+
+        reskip_parser(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename enable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& u // --> The skipper is reintroduced
+          , Attribute& attr_) const
+        {
+            return subject.parse(first, last, context
+              , detail::get_skipper(u), attr_);
+        }
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        typename disable_if<detail::is_unused_skipper<Skipper>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return subject.parse(first, last, context
+              , skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("skip", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    template <typename Subject, typename Skipper>
+    struct skip_parser : unary_parser<skip_parser<Subject, Skipper> >
+    {
+        typedef Subject subject_type;
+        typedef Skipper skipper_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<Subject, Context, Iterator>::type
+            type;
+        };
+
+        skip_parser(Subject const& subject_, Skipper const& skipper_)
+          : subject(subject_), skipper(skipper_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper_, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper_ const& //skipper --> bypass the supplied skipper
+          , Attribute& attr_) const
+        {
+            return subject.parse(first, last, context, skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("skip", subject.what(context));
+        }
+
+        Subject subject;
+        Skipper skipper;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<tag::skip, Subject, Modifiers>
+    {
+        typedef reskip_parser<Subject> result_type;
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+
+    template <typename Skipper, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<tag::skip, fusion::vector1<Skipper> >, Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<qi::domain, Skipper, Modifiers>::type
+        skipper_type;
+
+        typedef skip_parser<Subject, skipper_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<qi::domain>(fusion::at_c<0>(term.args), modifiers));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::reskip_parser<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename Skipper>
+    struct has_semantic_action<qi::skip_parser<Subject, Skipper> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::reskip_parser<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename Skipper, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::skip_parser<Subject, Skipper>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/domain.hpp
new file mode 100644 (file)
index 0000000..cc6b8c3
--- /dev/null
@@ -0,0 +1,74 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_DOMAIN_JANUARY_29_2007_0954AM)
+#define BOOST_SPIRIT_DOMAIN_JANUARY_29_2007_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    // qi's domain
+    struct domain {};
+
+    // bring in some of spirit parts into spirit::qi
+    using spirit::unused;
+    using spirit::unused_type;
+    using spirit::compile;
+    using spirit::info;
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+        BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+        using spirit::_pass_type;
+        using spirit::_val_type;
+        using spirit::_a_type;
+        using spirit::_b_type;
+        using spirit::_c_type;
+        using spirit::_d_type;
+        using spirit::_e_type;
+        using spirit::_f_type;
+        using spirit::_g_type;
+        using spirit::_h_type;
+        using spirit::_i_type;
+        using spirit::_j_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+        using spirit::_pass;
+        using spirit::_val;
+        using spirit::_a;
+        using spirit::_b;
+        using spirit::_c;
+        using spirit::_d;
+        using spirit::_e;
+        using spirit::_f;
+        using spirit::_g;
+        using spirit::_h;
+        using spirit::_i;
+        using spirit::_j;
+
+#endif
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/match.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/match.hpp
new file mode 100644 (file)
index 0000000..2e47d71
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_MATCH_DEC_02_2009_0749PM)
+#define BOOST_SPIRIT_QI_MATCH_DEC_02_2009_0749PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream/match_manip.hpp>
+#include <boost/spirit/home/qi/stream/match_manip_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/match_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/match_auto.hpp
new file mode 100644 (file)
index 0000000..a50c9d6
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_MATCH_AUTO_DEC_02_2009_0750PM)
+#define BOOST_SPIRIT_QI_MATCH_AUTO_DEC_02_2009_0750PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream/match_manip.hpp>
+#include <boost/spirit/home/qi/stream/detail/match_manip_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/meta_compiler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/meta_compiler.hpp
new file mode 100644 (file)
index 0000000..68649c0
--- /dev/null
@@ -0,0 +1,177 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_0347PM)
+#define BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_0347PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename T>
+    struct use_terminal<qi::domain, T
+      , typename enable_if<traits::is_parser<T> >::type> // enables parsers
+      : mpl::true_ {};
+
+    namespace qi
+    {
+        template <typename T, typename Modifiers, typename Enable = void>
+        struct make_primitive // by default, return it as-is
+        {
+            typedef T result_type;
+
+            template <typename T_>
+            T_& operator()(T_& val, unused_type) const
+            {
+                return val;
+            }
+
+            template <typename T_>
+            T_ const& operator()(T_ const& val, unused_type) const
+            {
+                return val;
+            }
+        };
+
+        template <typename Tag, typename Elements
+          , typename Modifiers, typename Enable = void>
+        struct make_composite;
+
+        template <typename Directive, typename Body
+          , typename Modifiers, typename Enable = void>
+        struct make_directive
+        {
+            typedef Body result_type;
+            result_type operator()(unused_type, Body const& body, unused_type) const
+            {
+                return body; // By default, a directive simply returns its subject
+            }
+        };
+    }
+
+    // Qi primitive meta-compiler
+    template <>
+    struct make_component<qi::domain, proto::tag::terminal>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename qi::make_primitive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            typedef typename remove_const<typename Elements::car_type>::type term;
+            return qi::make_primitive<term, Modifiers>()(elements.car, modifiers);
+        }
+    };
+
+    // Qi composite meta-compiler
+    template <typename Tag>
+    struct make_component<qi::domain, Tag>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_composite<Tag, Elements,
+                typename remove_reference<Modifiers>::type>::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_composite<Tag, Elements, Modifiers>()(
+                elements, modifiers);
+        }
+    };
+
+    // Qi function meta-compiler
+    template <>
+    struct make_component<qi::domain, proto::tag::function>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_composite<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename Elements::cdr_type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_composite<
+                typename remove_const<typename Elements::car_type>::type,
+                typename Elements::cdr_type,
+                Modifiers>()(elements.cdr, modifiers);
+        }
+    };
+
+    // Qi directive meta-compiler
+    template <>
+    struct make_component<qi::domain, tag::directive>
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>
+        {
+            typedef typename
+                qi::make_directive<
+                    typename remove_const<typename Elements::car_type>::type,
+                    typename remove_const<typename Elements::cdr_type::car_type>::type,
+                    typename remove_reference<Modifiers>::type
+                >::result_type
+            type;
+        };
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const
+        {
+            return qi::make_directive<
+                typename remove_const<typename Elements::car_type>::type,
+                typename remove_const<typename Elements::cdr_type::car_type>::type,
+                Modifiers>()(elements.car, elements.cdr.car, modifiers);
+        }
+    };
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal.hpp
new file mode 100644 (file)
index 0000000..e96fbf5
--- /dev/null
@@ -0,0 +1,21 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_NONTERMINAL_FEBRUARY_12_2007_1018AM)
+#define BOOST_SPIRIT_NONTERMINAL_FEBRUARY_12_2007_1018AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/spirit/home/qi/nonterminal/grammar.hpp>
+#include <boost/spirit/home/qi/nonterminal/error_handler.hpp>
+#include <boost/spirit/home/qi/nonterminal/debug_handler.hpp>
+#include <boost/spirit/home/qi/nonterminal/simple_trace.hpp>
+#include <boost/spirit/home/qi/nonterminal/success_handler.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler.hpp
new file mode 100644 (file)
index 0000000..6a9f536
--- /dev/null
@@ -0,0 +1,145 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_HANDLER_DECEMBER_05_2008_0734PM)
+#define BOOST_SPIRIT_DEBUG_HANDLER_DECEMBER_05_2008_0734PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/spirit/home/qi/nonterminal/debug_handler_state.hpp>
+#include <boost/spirit/home/qi/operator/expect.hpp>
+#include <boost/function.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <iostream>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <
+        typename Iterator, typename Context
+      , typename Skipper, typename F>
+    struct debug_handler
+    {
+        typedef function<
+            bool(Iterator& first, Iterator const& last
+              , Context& context
+              , Skipper const& skipper
+            )>
+        function_type;
+
+        debug_handler(
+            function_type subject_
+          , F f_
+          , std::string const& rule_name_)
+          : subject(subject_)
+          , f(f_)
+          , rule_name(rule_name_)
+        {
+        }
+
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            f(first, last, context, pre_parse, rule_name);
+            try // subject might throw an exception
+            {
+                if (subject(first, last, context, skipper))
+                {
+                    f(first, last, context, successful_parse, rule_name);
+                    return true;
+                }
+                f(first, last, context, failed_parse, rule_name);
+            }
+            catch (expectation_failure<Iterator> const& e)
+            {
+                f(first, last, context, failed_parse, rule_name);
+                boost::throw_exception(e);
+            }
+            return false;
+        }
+
+        function_type subject;
+        F f;
+        std::string rule_name;
+    };
+
+    template <typename Iterator
+      , typename T1, typename T2, typename T3, typename T4, typename F>
+    void debug(rule<Iterator, T1, T2, T3, T4>& r, F f)
+    {
+        typedef rule<Iterator, T1, T2, T3, T4> rule_type;
+
+        typedef
+            debug_handler<
+                Iterator
+              , typename rule_type::context_type
+              , typename rule_type::skipper_type
+              , F>
+        debug_handler;
+        r.f = debug_handler(r.f, f, r.name());
+    }
+
+    struct simple_trace;
+
+    namespace detail
+    {
+        // This class provides an extra level of indirection through a
+        // template to produce the simple_trace type. This way, the use
+        // of simple_trace below is hidden behind a dependent type, so
+        // that compilers eagerly type-checking template definitions
+        // won't complain that simple_trace is incomplete.
+        template<typename T>
+        struct get_simple_trace
+        {
+            typedef simple_trace type;
+        };
+    }
+
+    template <typename Iterator
+      , typename T1, typename T2, typename T3, typename T4>
+    void debug(rule<Iterator, T1, T2, T3, T4>& r)
+    {
+        typedef rule<Iterator, T1, T2, T3, T4> rule_type;
+
+        typedef
+            debug_handler<
+                Iterator
+              , typename rule_type::context_type
+              , typename rule_type::skipper_type
+              , simple_trace>
+        debug_handler;
+
+        typedef typename qi::detail::get_simple_trace<Iterator>::type trace;
+        r.f = debug_handler(r.f, trace(), r.name());
+    }
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+//  Utility macro for easy enabling of rule and grammar debugging
+#if !defined(BOOST_SPIRIT_DEBUG_NODE)
+  #if defined(BOOST_SPIRIT_DEBUG) || defined(BOOST_SPIRIT_QI_DEBUG)
+    #define BOOST_SPIRIT_DEBUG_NODE(r)  r.name(#r); debug(r)
+  #else
+    #define BOOST_SPIRIT_DEBUG_NODE(r)  r.name(#r)
+  #endif
+#endif
+
+#define BOOST_SPIRIT_DEBUG_NODE_A(r, _, name)                                   \
+    BOOST_SPIRIT_DEBUG_NODE(name);                                              \
+    /***/
+
+#define BOOST_SPIRIT_DEBUG_NODES(seq)                                           \
+    BOOST_PP_SEQ_FOR_EACH(BOOST_SPIRIT_DEBUG_NODE_A, _, seq)                    \
+    /***/
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler_state.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/debug_handler_state.hpp
new file mode 100644 (file)
index 0000000..cb24c01
--- /dev/null
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_HANDLER_STATE_APR_21_2010_0733PM)
+#define BOOST_SPIRIT_DEBUG_HANDLER_STATE_APR_21_2010_0733PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace qi
+{
+    enum debug_handler_state
+    {
+        pre_parse
+      , successful_parse
+      , failed_parse
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/fcall.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/fcall.hpp
new file mode 100644 (file)
index 0000000..e4fa17f
--- /dev/null
@@ -0,0 +1,53 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 \
+    <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+    typename lazy_enable_if_c<
+        (params_size == N)
+      , proto::terminal<
+            spirit::qi::parameterized_nonterminal<
+                parameterized_subject_type
+              , fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> >
+        >
+    >::type
+    operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& f)) const
+    {
+        typedef fusion::vector<BOOST_PP_ENUM_PARAMS(N, A)> vector_type;
+        typedef spirit::qi::parameterized_nonterminal<
+            parameterized_subject_type, vector_type> parameterized_type;
+        typedef typename proto::terminal<parameterized_type>::type result_type;
+
+        return result_type::make(
+            parameterized_type(
+                this->get_parameterized_subject()
+              , fusion::make_vector(BOOST_PP_ENUM_PARAMS(N, f)))
+        );
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parameterized.hpp
new file mode 100644 (file)
index 0000000..825fa40
--- /dev/null
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2009 Francois Barel
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARAMETERIZED_AUGUST_09_2009_0539AM)
+#define BOOST_SPIRIT_PARAMETERIZED_AUGUST_09_2009_0539AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/ref.hpp>
+
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // parameterized_nonterminal: parser representing the invocation of a
+    // nonterminal, passing inherited attributes
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Params>
+    struct parameterized_nonterminal
+      : parser<parameterized_nonterminal<Subject, Params> >
+    {
+        parameterized_nonterminal(Subject const& subject, Params const& params_)
+          : ref(subject), params(params_)
+        {
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+            // Forward to subject.
+          : Subject::template attribute<Context, Iterator> {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            // Forward to subject, passing the additional
+            // params argument to parse.
+            return ref.get().parse(first, last, context, skipper, attr_, params);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // Forward to subject.
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject const> ref;
+        Params params;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Params, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<qi::parameterized_nonterminal<Subject, Params>
+          , Attribute, Context, Iterator>
+      : handles_container<typename remove_const<Subject>::type
+        , Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp
new file mode 100644 (file)
index 0000000..87d8e84
--- /dev/null
@@ -0,0 +1,87 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_BINDER_DECEMBER_05_2008_0516_PM)
+#define BOOST_SPIRIT_PARSER_BINDER_DECEMBER_05_2008_0516_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    // parser_binder for plain rules
+    template <typename Parser, typename Auto>
+    struct parser_binder
+    {
+        parser_binder(Parser const& p_)
+          : p(p_) {}
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool call(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, mpl::true_) const
+        {
+            // If DeducedAuto is false (semantic actions is present), the 
+            // component's attribute is unused.
+            return p.parse(first, last, context, skipper, unused);
+        }
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool call(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, mpl::false_) const
+        {
+            // If DeducedAuto is true (no semantic action), we pass the rule's 
+            // attribute on to the component.
+            return p.parse(first, last, context, skipper
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            // If Auto is false, we need to deduce whether to apply auto rule
+            typedef typename traits::has_semantic_action<Parser>::type auto_rule;
+            return call(first, last, context, skipper, auto_rule());
+        }
+
+        Parser p;
+    };
+
+    // parser_binder for auto rules
+    template <typename Parser>
+    struct parser_binder<Parser, mpl::true_>
+    {
+        parser_binder(Parser const& p_)
+          : p(p_) {}
+
+        template <typename Iterator, typename Skipper, typename Context>
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            // If Auto is true, we pass the rule's attribute on to the component.
+            return p.parse(first, last, context, skipper
+                , fusion::at_c<0>(context.attributes));
+        }
+
+        Parser p;
+    };
+
+    template <typename Auto, typename Parser>
+    inline parser_binder<Parser, Auto>
+    bind_parser(Parser const& p)
+    {
+        return parser_binder<Parser, Auto>(p);
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/error_handler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/error_handler.hpp
new file mode 100644 (file)
index 0000000..e8c4f87
--- /dev/null
@@ -0,0 +1,176 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ERROR_HANDLER_APRIL_29_2007_1042PM)
+#define BOOST_SPIRIT_ERROR_HANDLER_APRIL_29_2007_1042PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/expect.hpp>
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
+#include <boost/function.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    enum error_handler_result
+    {
+        fail
+      , retry
+      , accept
+      , rethrow
+    };
+
+    namespace detail
+    {
+        // Helper template allowing to manage the inhibit clear queue flag in
+        // a multi_pass iterator. This is the usual specialization used for
+        // anything but a multi_pass iterator.
+        template <typename Iterator, bool active>
+        struct reset_on_exit
+        {
+            reset_on_exit(Iterator&) {}
+        };
+
+        // For 'retry' or 'fail' error handlers we need to inhibit the flushing 
+        // of the internal multi_pass buffers which otherwise might happen at 
+        // deterministic expectation points inside the encapsulated right hand 
+        // side of rule.
+        template <typename Iterator>
+        struct reset_on_exit<Iterator, true>
+        {
+            reset_on_exit(Iterator& it)
+              : it_(it)
+              , inhibit_clear_queue_(spirit::traits::inhibit_clear_queue(it)) 
+            {
+                spirit::traits::inhibit_clear_queue(it_, true);
+            }
+
+            ~reset_on_exit()
+            {
+                // reset inhibit flag in multi_pass on exit
+                spirit::traits::inhibit_clear_queue(it_, inhibit_clear_queue_);
+            }
+
+            Iterator& it_;
+            bool inhibit_clear_queue_;
+        };
+    }
+
+    template <
+        typename Iterator, typename Context
+      , typename Skipper, typename F, error_handler_result action
+    >
+    struct error_handler
+    {
+        typedef function<
+            bool(Iterator& first, Iterator const& last
+              , Context& context
+              , Skipper const& skipper
+            )>
+        function_type;
+
+        error_handler(function_type subject_, F f_)
+          : subject(subject_)
+          , f(f_)
+        {
+        }
+
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            typedef qi::detail::reset_on_exit<Iterator
+              , traits::is_multi_pass<Iterator>::value && 
+                  (action == retry || action == fail)> on_exit_type;
+
+            on_exit_type on_exit(first);
+            for(;;)
+            {
+                try
+                {
+                    Iterator i = first;
+                    bool r = subject(i, last, context, skipper);
+                    if (r)
+                        first = i;
+                    return r;
+                }
+                catch (expectation_failure<Iterator> const& x)
+                {
+                    typedef
+                        fusion::vector<
+                            Iterator&
+                          , Iterator const&
+                          , Iterator const&
+                          , info const&>
+                    params;
+                    error_handler_result r = action;
+                    params args(first, last, x.first, x.what_);
+                    f(args, context, r);
+
+                    // The assertions below will fire if you are using a
+                    // multi_pass as the underlying iterator, one of your error
+                    // handlers forced its guarded rule to 'fail' or 'retry',
+                    // and the error handler has not been instantiated using
+                    // either 'fail' or 'retry' in the first place. Please see 
+                    // the multi_pass docs for more information.
+                    switch (r)
+                    {
+                        case fail: 
+                            BOOST_ASSERT(
+                                !traits::is_multi_pass<Iterator>::value ||
+                                    action == retry || action == fail);
+                            return false;
+                        case retry: 
+                            BOOST_ASSERT(
+                                !traits::is_multi_pass<Iterator>::value ||
+                                    action == retry || action == fail);
+                            continue;
+                        case accept: return true;
+                        case rethrow: boost::throw_exception(x);
+                    }
+                }
+            }
+            return false;
+        }
+
+        function_type subject;
+        F f;
+    };
+
+    template <
+        error_handler_result action
+      , typename Iterator, typename T0, typename T1, typename T2
+      , typename F>
+    void on_error(rule<Iterator, T0, T1, T2>& r, F f)
+    {
+        typedef rule<Iterator, T0, T1, T2> rule_type;
+
+        typedef
+            error_handler<
+                Iterator
+              , typename rule_type::context_type
+              , typename rule_type::skipper_type
+              , F
+              , action>
+        error_handler;
+        r.f = error_handler(r.f, f);
+    }
+
+    // Error handling support when <action> is not
+    // specified. We will default to <fail>.
+    template <typename Iterator, typename T0, typename T1
+      , typename T2, typename F>
+    void on_error(rule<Iterator, T0, T1, T2>& r, F f)
+    {
+        on_error<fail>(r, f);
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/grammar.hpp
new file mode 100644 (file)
index 0000000..d41590c
--- /dev/null
@@ -0,0 +1,132 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_FEBRUARY_19_2007_0236PM)
+#define BOOST_SPIRIT_GRAMMAR_FEBRUARY_19_2007_0236PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <
+        typename Iterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct grammar
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<Iterator, T1, T2, T3, T4> const>
+            >::type
+          , grammar<Iterator, T1, T2, T3, T4>
+        >
+      , parser<grammar<Iterator, T1, T2, T3, T4> >
+      , noncopyable
+    {
+        typedef Iterator iterator_type;
+        typedef rule<Iterator, T1, T2, T3, T4> start_type;
+        typedef typename start_type::sig_type sig_type;
+        typedef typename start_type::locals_type locals_type;
+        typedef typename start_type::skipper_type skipper_type;
+        typedef typename start_type::encoding_type encoding_type;
+        typedef grammar<Iterator, T1, T2, T3, T4> base_type;
+        typedef reference<start_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+
+        static size_t const params_size = start_type::params_size;
+
+        template <typename Context, typename Iterator_>
+        struct attribute
+        {
+            typedef typename start_type::attr_type type;
+        };
+
+        grammar(
+            start_type const& start
+          , std::string const& name = "unnamed-grammar")
+        : proto::extends<terminal, base_type>(terminal::make(reference_(start)))
+        , name_(name)
+        {}
+
+        // This constructor is used to catch if the start rule is not
+        // compatible with the grammar.
+        template <typename Iterator_,
+            typename T1_, typename T2_, typename T3_, typename T4_>
+        grammar(
+            rule<Iterator_, T1_, T2_, T3_, T4_> const&
+          , std::string const& = "unnamed-grammar")
+        {
+            // If you see the assertion below failing then the start rule
+            // passed to the constructor of the grammar is not compatible with
+            // the grammar (i.e. it uses different template parameters).
+            BOOST_SPIRIT_ASSERT_MSG(
+                (is_same<start_type, rule<Iterator_, T1_, T2_, T3_, T4_> >::value)
+              , incompatible_start_rule, (rule<Iterator_, T1_, T2_, T3_, T4_>));
+        }
+
+        std::string name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Context, typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return this->proto_base().child0.parse(
+                first, last, context, skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context&) const
+        {
+            return info(name_);
+        }
+
+        // bring in the operator() overloads
+        start_type const& get_parameterized_subject() const
+        { return this->proto_base().child0.ref.get(); }
+        typedef start_type parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+        qi::grammar<IteratorA, T1, T2, T3, T4>, Attribute, Context, IteratorB>
+      : traits::is_container<
+          typename attribute_of<
+              qi::grammar<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+          >::type
+        >
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp
new file mode 100644 (file)
index 0000000..9e39345
--- /dev/null
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_QI_NONTERMINAL_FWD_DEC_24_2010_1105PM)
+#define BOOST_SPIRIT_QI_NONTERMINAL_FWD_DEC_24_2010_1105PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    // forward declaration only
+    template <
+        typename Iterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type>
+    struct rule;
+
+    template <
+        typename Iterator, typename T1 = unused_type
+      , typename T2 = unused_type, typename T3 = unused_type
+      , typename T4 = unused_type> 
+    struct grammar;
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/rule.hpp
new file mode 100644 (file)
index 0000000..8dd4237
--- /dev/null
@@ -0,0 +1,440 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_FEBRUARY_12_2007_1020AM)
+#define BOOST_SPIRIT_RULE_FEBRUARY_12_2007_1020AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/function.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/make_vector.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/nonterminal/extract_param.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parameterized.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp>
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+# pragma warning(disable: 4127) // conditional expression is constant
+#endif
+
+namespace boost { namespace spirit { namespace qi
+{
+    BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+    using spirit::_pass_type;
+    using spirit::_val_type;
+    using spirit::_a_type;
+    using spirit::_b_type;
+    using spirit::_c_type;
+    using spirit::_d_type;
+    using spirit::_e_type;
+    using spirit::_f_type;
+    using spirit::_g_type;
+    using spirit::_h_type;
+    using spirit::_i_type;
+    using spirit::_j_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+    using spirit::_pass;
+    using spirit::_val;
+    using spirit::_a;
+    using spirit::_b;
+    using spirit::_c;
+    using spirit::_d;
+    using spirit::_e;
+    using spirit::_f;
+    using spirit::_g;
+    using spirit::_h;
+    using spirit::_i;
+    using spirit::_j;
+
+#endif
+
+    using spirit::info;
+    using spirit::locals;
+
+    template <
+        typename Iterator, typename T1, typename T2, typename T3
+      , typename T4>
+    struct rule
+      : proto::extends<
+            typename proto::terminal<
+                reference<rule<Iterator, T1, T2, T3, T4> const>
+            >::type
+          , rule<Iterator, T1, T2, T3, T4>
+        >
+      , parser<rule<Iterator, T1, T2, T3, T4> >
+    {
+        typedef Iterator iterator_type;
+        typedef rule<Iterator, T1, T2, T3, T4> this_type;
+        typedef reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+        typedef mpl::vector<T1, T2, T3, T4> template_params;
+
+        // The rule's locals_type: a sequence of types to be used as local variables
+        typedef typename
+            spirit::detail::extract_locals<template_params>::type
+        locals_type;
+
+        // The rule's skip-parser type
+        typedef typename
+            spirit::detail::extract_component<
+                qi::domain, template_params>::type
+        skipper_type;
+
+        // The rule's signature
+        typedef typename
+            spirit::detail::extract_sig<template_params>::type
+        sig_type;
+
+        // The rule's encoding type
+        typedef typename
+            spirit::detail::extract_encoding<template_params>::type
+        encoding_type;
+
+        // This is the rule's attribute type
+        typedef typename
+            spirit::detail::attr_from_sig<sig_type>::type
+        attr_type;
+        typedef typename add_reference<attr_type>::type attr_reference_type;
+
+        // parameter_types is a sequence of types passed as parameters to the rule
+        typedef typename
+            spirit::detail::params_from_sig<sig_type>::type
+        parameter_types;
+
+        static size_t const params_size =
+            fusion::result_of::size<parameter_types>::type::value;
+
+        typedef context<
+            fusion::cons<attr_reference_type, parameter_types>
+          , locals_type>
+        context_type;
+
+        typedef function<
+            bool(Iterator& first, Iterator const& last
+              , context_type& context
+              , skipper_type const& skipper
+            )>
+        function_type;
+
+        typedef typename
+            mpl::if_<
+                is_same<encoding_type, unused_type>
+              , unused_type
+              , tag::char_code<tag::encoding, encoding_type>
+            >::type
+        encoding_modifier_type;
+
+        explicit rule(std::string const& name = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name)
+        {
+        }
+
+        rule(rule const& rhs)
+          : base_type(terminal::make(reference_(*this)))
+          , name_(rhs.name_)
+          , f(rhs.f)
+        {
+        }
+
+        template <typename Auto, typename Expr>
+        static void define(rule& /*lhs*/, Expr const& /*expr*/, mpl::false_)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (expr) is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        }
+
+        template <typename Auto, typename Expr>
+        static void define(rule& lhs, Expr const& expr, mpl::true_)
+        {
+            lhs.f = detail::bind_parser<Auto>(
+                compile<qi::domain>(expr, encoding_modifier_type()));
+        }
+
+        template <typename Expr>
+        rule(Expr const& expr, std::string const& name = "unnamed-rule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name)
+        {
+            define<mpl::false_>(*this, expr, traits::matches<qi::domain, Expr>());
+        }
+
+        rule& operator=(rule const& rhs)
+        {
+            // The following assertion fires when you try to initialize a rule
+            // from an uninitialized one. Did you mean to refer to the right
+            // hand side rule instead of assigning from it? In this case you
+            // should write lhs = rhs.alias();
+            BOOST_ASSERT(rhs.f && "Did you mean rhs.alias() instead of rhs?");
+
+            f = rhs.f;
+            name_ = rhs.name_;
+            return *this;
+        }
+
+        std::string const& name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Expr>
+        rule& operator=(Expr const& expr)
+        {
+            define<mpl::false_>(*this, expr, traits::matches<qi::domain, Expr>());
+            return *this;
+        }
+
+// VC7.1 has problems to resolve 'rule' without explicit template parameters
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        // g++ 3.3 barfs if this is a member function :(
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr const& expr)
+        {
+            define<mpl::true_>(r, expr, traits::matches<qi::domain, Expr>());
+            return r;
+        }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr& expr)
+        {
+            return r %= static_cast<Expr const&>(expr);
+        }
+#else
+        // for rvalue references
+        template <typename Expr>
+        friend rule& operator%=(rule& r, Expr&& expr)
+        {
+            define<mpl::true_>(r, expr, traits::matches<qi::domain, Expr>());
+            return r;
+        }
+#endif
+
+#else
+        // both friend functions have to be defined out of class as VC7.1
+        // will complain otherwise
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr const& expr);
+
+        // non-const version needed to suppress proto's %= kicking in
+        template <typename OutputIterator_, typename T1_, typename T2_
+          , typename T3_, typename T4_, typename Expr>
+        friend rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr& expr);
+#endif
+
+        template <typename Context, typename Iterator_>
+        struct attribute
+        {
+            typedef attr_type type;
+        };
+
+        template <typename Context, typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            if (f)
+            {
+                // do a preskip if this is an implied lexeme
+                if (is_same<skipper_type, unused_type>::value)
+                    qi::skip_over(first, last, skipper);
+
+                typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+                // do down-stream transformation, provides attribute for
+                // rhs parser
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain>
+                transform;
+
+                typename make_attribute::type made_attr = make_attribute::call(attr_param);
+                typename transform::type attr_ = transform::pre(made_attr);
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, without passing values for them.
+                context_type context(attr_);
+
+                // If you are seeing a compilation error here stating that the
+                // fourth parameter can't be converted to a required target type
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible skipper type.
+                if (f(first, last, context, skipper))
+                {
+                    // do up-stream transformation, this integrates the results
+                    // back into the original attribute value, if appropriate
+                    traits::post_transform(attr_param, attr_);
+                    return true;
+                }
+
+                // inform attribute transformation of failed rhs
+                traits::fail_transform(attr_param, attr_);
+            }
+            return false;
+        }
+
+        template <typename Context, typename Skipper
+          , typename Attribute, typename Params>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& caller_context, Skipper const& skipper
+          , Attribute& attr_param, Params const& params) const
+        {
+            if (f)
+            {
+                // do a preskip if this is an implied lexeme
+                if (is_same<skipper_type, unused_type>::value)
+                    qi::skip_over(first, last, skipper);
+
+                typedef traits::make_attribute<attr_type, Attribute> make_attribute;
+
+                // do down-stream transformation, provides attribute for
+                // rhs parser
+                typedef traits::transform_attribute<
+                    typename make_attribute::type, attr_type, domain>
+                transform;
+
+                typename make_attribute::type made_attr = make_attribute::call(attr_param);
+                typename transform::type attr_ = transform::pre(made_attr);
+
+                // If you are seeing a compilation error here, you are probably
+                // trying to use a rule or a grammar which has inherited
+                // attributes, passing values of incompatible types for them.
+                context_type context(attr_, params, caller_context);
+
+                // If you are seeing a compilation error here stating that the
+                // fourth parameter can't be converted to a required target type
+                // then you are probably trying to use a rule or a grammar with
+                // an incompatible skipper type.
+                if (f(first, last, context, skipper))
+                {
+                    // do up-stream transformation, this integrates the results
+                    // back into the original attribute value, if appropriate
+                    traits::post_transform(attr_param, attr_);
+                    return true;
+                }
+
+                // inform attribute transformation of failed rhs
+                traits::fail_transform(attr_param, attr_);
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        reference_ alias() const
+        {
+            return reference_(*this);
+        }
+
+        typename proto::terminal<this_type>::type copy() const
+        {
+            typename proto::terminal<this_type>::type result = {*this};
+            return result;
+        }
+
+        // bring in the operator() overloads
+        rule const& get_parameterized_subject() const { return *this; }
+        typedef rule parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+        function_type f;
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+    template <typename OutputIterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<OutputIterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<OutputIterator_, T1_, T2_, T3_, T4_>& r, Expr const& expr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        typedef typename
+            rule<OutputIterator_, T1_, T2_, T3_, T4_>::encoding_modifier_type
+        encoding_modifier_type;
+
+        r.f = detail::bind_parser<mpl::true_>(
+            compile<qi::domain>(expr, encoding_modifier_type()));
+        return r;
+    }
+
+    template <typename Iterator_, typename T1_, typename T2_
+      , typename T3_, typename T4_, typename Expr>
+    rule<Iterator_, T1_, T2_, T3_, T4_>& operator%=(
+        rule<Iterator_, T1_, T2_, T3_, T4_>& r, Expr& expr)
+    {
+        return r %= static_cast<Expr const&>(expr);
+    }
+#endif
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename IteratorA, typename IteratorB, typename Attribute
+      , typename Context, typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<
+        qi::rule<IteratorA, T1, T2, T3, T4>, Attribute, Context, IteratorB>
+      : traits::is_container<
+          typename attribute_of<
+              qi::rule<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+          >::type
+        >
+    {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/simple_trace.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/simple_trace.hpp
new file mode 100644 (file)
index 0000000..74382f5
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SIMPLE_TRACE_DECEMBER_06_2008_1102AM)
+#define BOOST_SPIRIT_SIMPLE_TRACE_DECEMBER_06_2008_1102AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/nonterminal/debug_handler_state.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <iostream>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+
+//  The stream to use for debug output
+#if !defined(BOOST_SPIRIT_DEBUG_OUT)
+#define BOOST_SPIRIT_DEBUG_OUT std::cerr
+#endif
+
+//  number of tokens to print while debugging
+#if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+#endif
+
+//  number of spaces to indent
+#if !defined(BOOST_SPIRIT_DEBUG_INDENT)
+#define BOOST_SPIRIT_DEBUG_INDENT 2
+#endif
+
+namespace boost { namespace spirit { namespace qi
+{
+    namespace detail
+    {
+        template<typename Char>
+        inline void token_printer(std::ostream& o, Char c)
+        {
+            // allow to customize the token printer routine
+            spirit::traits::print_token(o, c);
+        }
+    }
+
+    struct simple_trace
+    {
+        int& get_indent() const
+        {
+            static int indent = 0;
+            return indent;
+        }
+
+        void print_indent(int n) const
+        {
+            n *= BOOST_SPIRIT_DEBUG_INDENT;
+            for (int i = 0; i != n; ++i)
+                BOOST_SPIRIT_DEBUG_OUT << ' ';
+        }
+
+        template <typename Iterator>
+        void print_some(
+            char const* tag
+          , int /*indent*/
+          , Iterator first, Iterator const& last) const
+        {
+            print_indent(get_indent());
+            BOOST_SPIRIT_DEBUG_OUT << '<' << tag << '>';
+            int const n = BOOST_SPIRIT_DEBUG_PRINT_SOME;
+            for (int i = 0; first != last && i != n && *first; ++i, ++first)
+                detail::token_printer(BOOST_SPIRIT_DEBUG_OUT, *first);
+            BOOST_SPIRIT_DEBUG_OUT << "</" << tag << '>' << std::endl;
+
+            // $$$ FIXME convert invalid xml characters (e.g. '<') to valid
+            // character entities. $$$
+        }
+
+        template <typename Iterator, typename Context, typename State>
+        void operator()(
+            Iterator const& first
+          , Iterator const& last
+          , Context const& context
+          , State state
+          , std::string const& rule_name) const
+        {
+            switch (state)
+            {
+                case pre_parse:
+                    print_indent(get_indent()++);
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << '<' << rule_name << '>'
+                        << std::endl;
+                    print_some("try", get_indent(), first, last);
+                    break;
+                case successful_parse:
+                    print_some("success", get_indent(), first, last);
+                    print_indent(get_indent());
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << "<attributes>";
+                    traits::print_attribute(
+                        BOOST_SPIRIT_DEBUG_OUT,
+                        context.attributes
+                    );
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << "</attributes>";
+                    if (!fusion::empty(context.locals))
+                        BOOST_SPIRIT_DEBUG_OUT
+                            << "<locals>"
+                            << context.locals
+                            << "</locals>";
+                    BOOST_SPIRIT_DEBUG_OUT << std::endl;
+                    print_indent(--get_indent());
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << "</" << rule_name << '>'
+                        << std::endl;
+                    break;
+                case failed_parse:
+                    print_indent(get_indent());
+                    BOOST_SPIRIT_DEBUG_OUT << "<fail/>" << std::endl;
+                    print_indent(--get_indent());
+                    BOOST_SPIRIT_DEBUG_OUT
+                        << "</" << rule_name << '>'
+                        << std::endl;
+                    break;
+            }
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/success_handler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/nonterminal/success_handler.hpp
new file mode 100644 (file)
index 0000000..5db83a2
--- /dev/null
@@ -0,0 +1,83 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SUCCESS_HANDLER_FEBRUARY_25_2011_1051AM)
+#define BOOST_SPIRIT_SUCCESS_HANDLER_FEBRUARY_25_2011_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+#include <boost/function.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <
+        typename Iterator, typename Context
+      , typename Skipper, typename F
+    >
+    struct success_handler
+    {
+        typedef function<
+            bool(Iterator& first, Iterator const& last
+              , Context& context
+              , Skipper const& skipper
+            )>
+        function_type;
+
+        success_handler(function_type subject_, F f_)
+          : subject(subject_)
+          , f(f_)
+        {
+        }
+
+        bool operator()(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper) const
+        {
+            Iterator i = first;
+            bool r = subject(i, last, context, skipper);
+            if (r)
+            {
+                typedef
+                    fusion::vector<
+                        Iterator&
+                      , Iterator const&
+                      , Iterator const&>
+                params;
+                skip_over(first, last, skipper);
+                params args(first, last, i);
+                f(args, context);
+
+                first = i;
+            }
+            return r;
+        }
+
+        function_type subject;
+        F f;
+    };
+
+    template <
+        typename Iterator, typename T0, typename T1, typename T2
+      , typename F>
+    void on_success(rule<Iterator, T0, T1, T2>& r, F f)
+    {
+        typedef rule<Iterator, T0, T1, T2> rule_type;
+
+        typedef
+            success_handler<
+                Iterator
+              , typename rule_type::context_type
+              , typename rule_type::skipper_type
+              , F>
+        success_handler;
+        r.f = success_handler(r.f, f);
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric.hpp
new file mode 100644 (file)
index 0000000..7e1ef26
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_NUMERIC_FEBRUARY_05_2007_1231PM)
+#define BOOST_SPIRIT_NUMERIC_FEBRUARY_05_2007_1231PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/bool.hpp>
+#include <boost/spirit/home/qi/numeric/int.hpp>
+#include <boost/spirit/home/qi/numeric/uint.hpp>
+#include <boost/spirit/home/qi/numeric/real.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool.hpp
new file mode 100644 (file)
index 0000000..74e1343
--- /dev/null
@@ -0,0 +1,338 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011      Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_QI_BOOL_SEP_29_2009_0709AM)
+#define SPIRIT_QI_BOOL_SEP_29_2009_0709AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/numeric/bool_policies.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace qi
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // forward declaration only
+        template <typename T>
+        struct bool_policies;
+
+        ///////////////////////////////////////////////////////////////////////
+        // This is the class that the user can instantiate directly in
+        // order to create a customized bool parser
+        template <typename T, typename BoolPolicies = bool_policies<T> >
+        struct bool_parser
+          : spirit::terminal<tag::stateful_tag<BoolPolicies, tag::bool_, T> >
+        {
+            typedef tag::stateful_tag<BoolPolicies, tag::bool_, T> tag_type;
+
+            bool_parser() {}
+            bool_parser(BoolPolicies const& data)
+              : spirit::terminal<tag_type>(data) {}
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables bool_
+    struct use_terminal<qi::domain, tag::bool_>
+      : mpl::true_ {};
+
+    template <> // enables true_
+    struct use_terminal<qi::domain, tag::true_>
+      : mpl::true_ {};
+
+    template <> // enables false_
+    struct use_terminal<qi::domain, tag::false_>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0> // enables lit(...)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, bool> >::type>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0> // enables bool_(...)
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::bool_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <> // enables *lazy* bool_(...)
+    struct use_lazy_terminal<qi::domain, tag::bool_, 1>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom bool_parser
+    template <typename T, typename BoolPolicies>
+    struct use_terminal<qi::domain
+        , tag::stateful_tag<BoolPolicies, tag::bool_, T> >
+      : mpl::true_ {};
+
+    // enables any custom bool_parser(...)
+    template <typename T, typename BoolPolicies, typename A0>
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::stateful_tag<BoolPolicies, tag::bool_, T>
+        , fusion::vector1<A0> > >
+      : mpl::true_ {};
+
+    // enables *lazy* custom bool_parser(...)
+    template <typename T, typename BoolPolicies>
+    struct use_lazy_terminal<
+        qi::domain
+      , tag::stateful_tag<BoolPolicies, tag::bool_, T>
+      , 1 // arity
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::bool_;
+    using spirit::true_;
+    using spirit::false_;
+    using spirit::lit;    // lit(true) is equivalent to true
+#endif
+    using spirit::bool_type;
+    using spirit::true_type;
+    using spirit::false_type;
+    using spirit::lit_type;
+
+    namespace detail
+    {
+        template <typename T, typename BoolPolicies>
+        struct bool_impl
+        {
+            template <typename Iterator, typename Attribute>
+            static bool parse(Iterator& first, Iterator const& last
+              , Attribute& attr, BoolPolicies const& p, bool allow_true = true
+              , bool disallow_false = false)
+            {
+                if (first == last)
+                    return false;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+                p; // suppresses warning: C4100: 'p' : unreferenced formal parameter
+#endif
+                return (allow_true && p.parse_true(first, last, attr)) ||
+                       (!disallow_false && p.parse_false(first, last, attr));
+            }
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This actual boolean parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename BoolPolicies = bool_policies<T> >
+    struct any_bool_parser
+      : primitive_parser<any_bool_parser<T, BoolPolicies> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef detail::bool_impl<T, BoolPolicies> extract;
+            qi::skip_over(first, last, skipper);
+            return extract::parse(first, last, attr_, BoolPolicies());
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("boolean");
+        }
+    };
+
+    template <typename T, typename BoolPolicies = bool_policies<T>
+            , bool no_attribute = true>
+    struct literal_bool_parser
+      : primitive_parser<literal_bool_parser<T, BoolPolicies, no_attribute> >
+    {
+        template <typename Value>
+        literal_bool_parser(Value const& n) : n_(n) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef detail::bool_impl<T, BoolPolicies> extract;
+            qi::skip_over(first, last, skipper);
+            return extract::parse(first, last, attr_, BoolPolicies(), n_, n_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("boolean");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Modifiers
+            , typename Policies = bool_policies<T> >
+    struct make_bool
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> >
+            no_case;
+
+        typedef typename mpl::if_<
+            mpl::and_<
+                no_case
+              , is_same<bool_policies<T>, Policies>
+            >
+          , any_bool_parser<T, no_case_bool_policies<T> >
+          , any_bool_parser<T, Policies> >::type
+        result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename T, typename Modifiers
+            , typename Policies = bool_policies<T> >
+    struct make_direct_bool
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> >
+            no_case;
+
+        typedef typename mpl::if_<
+            mpl::and_<
+                no_case
+              , is_same<bool_policies<T>, Policies>
+            >
+          , literal_bool_parser<T, no_case_bool_policies<T>, false>
+          , literal_bool_parser<T, Policies, false> >::type
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename T, typename Modifiers, bool b
+            , typename Policies = bool_policies<T> >
+    struct make_predefined_direct_bool
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> >
+            no_case;
+
+        typedef typename mpl::if_<
+            mpl::and_<
+                no_case
+              , is_same<bool_policies<T>, Policies>
+            >
+          , literal_bool_parser<T, no_case_bool_policies<T>, false>
+          , literal_bool_parser<T, Policies, false> >::type
+        result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type(b);
+        }
+    };
+
+    template <typename T, typename Modifiers
+            , typename Policies = bool_policies<T> >
+    struct make_literal_bool
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> >
+            no_case;
+
+        typedef typename mpl::if_<
+            mpl::and_<
+                no_case
+              , is_same<bool_policies<T>, Policies>
+            >
+          , literal_bool_parser<T, no_case_bool_policies<T> >
+          , literal_bool_parser<T, Policies> >::type
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, bool> >::type>
+      : make_literal_bool<bool, Modifiers> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::false_, Modifiers>
+      : make_predefined_direct_bool<bool, Modifiers, false>
+    {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::true_, Modifiers>
+      : make_predefined_direct_bool<bool, Modifiers, true>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies, typename Modifiers>
+    struct make_primitive<
+        tag::stateful_tag<Policies, tag::bool_, T>, Modifiers>
+      : make_bool<T, Modifiers, Policies> {};
+
+    template <typename T, typename Policies, typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::stateful_tag<Policies, tag::bool_, T>
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_bool<T, Modifiers, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::bool_, Modifiers>
+      : make_bool<bool, Modifiers> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::bool_
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_bool<bool, Modifiers> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/bool_policies.hpp
new file mode 100644 (file)
index 0000000..62641a6
--- /dev/null
@@ -0,0 +1,81 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM)
+#define SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/string_parse.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default boolean policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T = bool>
+    struct bool_policies
+    {
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("true", first, last, unused))
+            {
+                spirit::traits::assign_to(T(true), attr_);    // result is true
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("false", first, last, unused))
+            {
+                spirit::traits::assign_to(T(false), attr_);   // result is false
+                return true;
+            }
+            return false;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T = bool>
+    struct no_case_bool_policies
+    {
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("true", "TRUE", first, last, unused))
+            {
+                spirit::traits::assign_to(T(true), attr_);    // result is true
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("false", "FALSE", first, last, unused))
+            {
+                spirit::traits::assign_to(T(false), attr_);   // result is false
+                return true;
+            }
+            return false;
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
new file mode 100644 (file)
index 0000000..5137f87
--- /dev/null
@@ -0,0 +1,506 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011 Jan Frederick Eick
+    Copyright (c) 2011 Christopher Jefferson 
+    Copyright (c) 2006 Stephen Nutt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NUMERIC_UTILS_APRIL_17_2006_0816AM)
+#define SPIRIT_NUMERIC_UTILS_APRIL_17_2006_0816AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/detail/iterator.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/limits.hpp>
+
+#if !defined(SPIRIT_NUMERICS_LOOP_UNROLL)
+# define SPIRIT_NUMERICS_LOOP_UNROLL 3
+#endif
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The maximum radix digits that can be represented without
+    //  overflow:
+    //
+    //          template<typename T, unsigned Radix>
+    //          struct digits_traits::value;
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix>
+    struct digits_traits;
+
+// lookup table for log2(x) : 2 <= x <= 36
+#define BOOST_SPIRIT_LOG2 (#error)(#error)                                    \
+        (1000000)(1584960)(2000000)(2321920)(2584960)(2807350)                \
+        (3000000)(3169920)(3321920)(3459430)(3584960)(3700430)                \
+        (3807350)(3906890)(4000000)(4087460)(4169920)(4247920)                \
+        (4321920)(4392310)(4459430)(4523560)(4584960)(4643850)                \
+        (4700430)(4754880)(4807350)(4857980)(4906890)(4954190)                \
+        (5000000)(5044390)(5087460)(5129280)(5169925)                         \
+    /***/
+
+#define BOOST_PP_LOCAL_MACRO(Radix)                                           \
+    template <typename T> struct digits_traits<T, Radix>                      \
+    {                                                                         \
+        typedef std::numeric_limits<T> numeric_limits_type;                   \
+        BOOST_STATIC_CONSTANT(int, value = static_cast<int>(                  \
+            (numeric_limits_type::digits * 1000000) /                         \
+                BOOST_PP_SEQ_ELEM(Radix, BOOST_SPIRIT_LOG2)));                \
+    };                                                                        \
+    /***/
+
+#define BOOST_PP_LOCAL_LIMITS (2, 36)
+#include BOOST_PP_LOCAL_ITERATE()
+
+#undef BOOST_SPIRIT_LOG2
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Traits class for radix specific number conversion
+    //
+    //      Test the validity of a single character:
+    //
+    //          template<typename Char> static bool is_valid(Char ch);
+    //
+    //      Convert a digit from character representation to binary
+    //      representation:
+    //
+    //          template<typename Char> static int digit(Char ch);
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct radix_traits
+    {
+        template <typename Char>
+        inline static bool is_valid(Char ch)
+        {
+            if (Radix <= 10)
+                return (ch >= '0' && ch <= static_cast<Char>('0' + Radix -1));
+            return (ch >= '0' && ch <= '9')
+                || (ch >= 'a' && ch <= static_cast<Char>('a' + Radix -10 -1))
+                || (ch >= 'A' && ch <= static_cast<Char>('A' + Radix -10 -1));
+        }
+
+        template <typename Char>
+        inline static unsigned digit(Char ch)
+        {
+            if (Radix <= 10 || (ch >= '0' && ch <= '9'))
+                return ch - '0';
+            return spirit::char_encoding::ascii::tolower(ch) - 'a' + 10;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  positive_accumulator/negative_accumulator: Accumulator policies for
+    //  extracting integers. Use positive_accumulator if number is positive.
+    //  Use negative_accumulator if number is negative.
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct positive_accumulator
+    {
+        template <typename T, typename Char>
+        inline static void add(T& n, Char ch, mpl::false_) // unchecked add
+        {
+            const int digit = radix_traits<Radix>::digit(ch);
+            n = n * T(Radix) + T(digit);
+        }
+
+        template <typename T, typename Char>
+        inline static bool add(T& n, Char ch, mpl::true_) // checked add
+        {
+            // Ensure n *= Radix will not overflow
+            static T const max = (std::numeric_limits<T>::max)();
+            static T const val = max / Radix;
+            if (n > val)
+                return false;
+
+            n *= Radix;
+
+            // Ensure n += digit will not overflow
+            const int digit = radix_traits<Radix>::digit(ch);
+            if (n > max - digit)
+                return false;
+
+            n += static_cast<T>(digit);
+            return true;
+        }
+    };
+
+    template <unsigned Radix>
+    struct negative_accumulator
+    {
+        template <typename T, typename Char>
+        inline static void add(T& n, Char ch, mpl::false_) // unchecked subtract
+        {
+            const int digit = radix_traits<Radix>::digit(ch);
+            n = n * T(Radix) - T(digit);
+        }
+
+        template <typename T, typename Char>
+        inline static bool add(T& n, Char ch, mpl::true_) // checked subtract
+        {
+            // Ensure n *= Radix will not underflow
+            static T const min = (std::numeric_limits<T>::min)();
+            static T const val = (min + 1) / T(Radix);
+            if (n < val)
+                return false;
+
+            n *= Radix;
+
+            // Ensure n -= digit will not underflow
+            int const digit = radix_traits<Radix>::digit(ch);
+            if (n < min + digit)
+                return false;
+
+            n -= static_cast<T>(digit);
+            return true;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Common code for extract_int::parse specializations
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix, typename Accumulator, int MaxDigits>
+    struct int_extractor
+    {
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t count, T& n, mpl::true_)
+        {
+            static std::size_t const
+                overflow_free = digits_traits<T, Radix>::value - 1;
+
+            if (count < overflow_free)
+            {
+                Accumulator::add(n, ch, mpl::false_());
+            }
+            else
+            {
+                if (!Accumulator::add(n, ch, mpl::true_()))
+                    return false; //  over/underflow!
+            }
+            return true;
+        }
+
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t /*count*/, T& n, mpl::false_)
+        {
+            // no need to check for overflow
+            Accumulator::add(n, ch, mpl::false_());
+            return true;
+        }
+
+        template <typename Char>
+        inline static bool
+        call(Char /*ch*/, std::size_t /*count*/, unused_type, mpl::false_)
+        {
+            return true;
+        }
+
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t count, T& n)
+        {
+            return call(ch, count, n
+              , mpl::bool_<
+                    (   (MaxDigits < 0)
+                    ||  (MaxDigits > digits_traits<T, Radix>::value)
+                    )
+                  && traits::check_overflow<T>::value
+                >()
+            );
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  End of loop checking: check if the number of digits
+    //  being parsed exceeds MaxDigits. Note: if MaxDigits == -1
+    //  we don't do any checking.
+    ///////////////////////////////////////////////////////////////////////////
+    template <int MaxDigits>
+    struct check_max_digits
+    {
+        inline static bool
+        call(std::size_t count)
+        {
+            return count < MaxDigits; // bounded
+        }
+    };
+
+    template <>
+    struct check_max_digits<-1>
+    {
+        inline static bool
+        call(std::size_t /*count*/)
+        {
+            return true; // unbounded
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  extract_int: main code for extracting integers
+    ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data)                                 \
+        if (!check_max_digits<MaxDigits>::call(count + leading_zeros)         \
+            || it == last)                                                    \
+            break;                                                            \
+        ch = *it;                                                             \
+        if (!radix_check::is_valid(ch) || !extractor::call(ch, count, val))   \
+            break;                                                            \
+        ++it;                                                                 \
+        ++count;                                                              \
+    /**/
+
+    template <
+        typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+      , typename Accumulator = positive_accumulator<Radix>
+      , bool Accumulate = false
+    >
+    struct extract_int
+    {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse_main(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            typedef radix_traits<Radix> radix_check;
+            typedef int_extractor<Radix, Accumulator, MaxDigits> extractor;
+            typedef typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            char_type;
+
+            Iterator it = first;
+            std::size_t leading_zeros = 0;
+            if (!Accumulate)
+            {
+                // skip leading zeros
+                while (it != last && *it == '0' && leading_zeros < MaxDigits)
+                {
+                    ++it;
+                    ++leading_zeros;
+                }
+            }
+
+            typedef typename
+                traits::attribute_type<Attribute>::type
+            attribute_type;
+
+            attribute_type val = Accumulate ? attr : attribute_type(0);
+            std::size_t count = 0;
+            char_type ch;
+
+            while (true)
+            {
+                BOOST_PP_REPEAT(
+                    SPIRIT_NUMERICS_LOOP_UNROLL
+                  , SPIRIT_NUMERIC_INNER_LOOP, _)
+            }
+
+            if (count + leading_zeros >= MinDigits)
+            {
+                traits::assign_to(val, attr);
+                first = it;
+                return true;
+            }
+            return false;
+        }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+        template <typename Iterator>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , unused_type)
+        {
+            T n = 0; // must calculate value to detect over/underflow
+            return parse_main(first, last, n);
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            return parse_main(first, last, attr);
+        }
+    };
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  extract_int: main code for extracting integers
+    //  common case where MinDigits == 1 and MaxDigits = -1
+    ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data)                                 \
+        if (it == last)                                                       \
+            break;                                                            \
+        ch = *it;                                                             \
+        if (!radix_check::is_valid(ch))                                       \
+            break;                                                            \
+        if (!extractor::call(ch, count, val))                                 \
+            return false;                                                     \
+        ++it;                                                                 \
+        ++count;                                                              \
+    /**/
+
+    template <typename T, unsigned Radix, typename Accumulator, bool Accumulate>
+    struct extract_int<T, Radix, 1, -1, Accumulator, Accumulate>
+    {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse_main(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            typedef radix_traits<Radix> radix_check;
+            typedef int_extractor<Radix, Accumulator, -1> extractor;
+            typedef typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            char_type;
+
+            Iterator it = first;
+            std::size_t count = 0;
+            if (!Accumulate)
+            {
+                // skip leading zeros
+                while (it != last && *it == '0')
+                {
+                    ++it;
+                    ++count;
+                }
+
+                if (it == last)
+                {
+                    if (count == 0) // must have at least one digit
+                        return false;
+                    traits::assign_to(0, attr);
+                    first = it;
+                    return true;
+                }
+            }
+
+            typedef typename
+                traits::attribute_type<Attribute>::type
+            attribute_type;
+
+            attribute_type val = Accumulate ? attr : attribute_type(0);
+            char_type ch = *it;
+
+            if (!radix_check::is_valid(ch) || !extractor::call(ch, 0, val))
+            {
+                if (count == 0) // must have at least one digit
+                    return false;
+                traits::assign_to(val, attr);
+                first = it;
+                return true;
+            }
+
+            count = 0;
+            ++it;
+            while (true)
+            {
+                BOOST_PP_REPEAT(
+                    SPIRIT_NUMERICS_LOOP_UNROLL
+                  , SPIRIT_NUMERIC_INNER_LOOP, _)
+            }
+
+            traits::assign_to(val, attr);
+            first = it;
+            return true;
+        }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+        template <typename Iterator>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , unused_type)
+        {
+            T n = 0; // must calculate value to detect over/underflow
+            return parse_main(first, last, n);
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            return parse_main(first, last, attr);
+        }
+    };
+
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Cast an signed integer to an unsigned integer
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T,
+        bool force_unsigned
+            = mpl::and_<is_integral<T>, is_signed<T> >::value>
+    struct cast_unsigned;
+
+    template <typename T>
+    struct cast_unsigned<T, true>
+    {
+        typedef typename make_unsigned<T>::type unsigned_type;
+        typedef typename make_unsigned<T>::type& unsigned_type_ref;
+
+        inline static unsigned_type_ref call(T& n)
+        {
+            return unsigned_type_ref(n);
+        }
+    };
+
+    template <typename T>
+    struct cast_unsigned<T, false>
+    {
+        inline static T& call(T& n)
+        {
+            return n;
+        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/real_impl.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/detail/real_impl.hpp
new file mode 100644 (file)
index 0000000..a4bd878
--- /dev/null
@@ -0,0 +1,271 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_REAL_IMPL_APRIL_18_2006_0901AM)
+#define SPIRIT_REAL_IMPL_APRIL_18_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/detail/pow10.hpp>
+#include <boost/spirit/home/support/detail/sign.hpp>
+#include <boost/assert.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100)   // 'p': unreferenced formal parameter
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    using spirit::traits::pow10;
+
+    template <typename T>
+    inline void
+    scale(int exp, T& n)
+    {
+        if (exp >= 0)
+        {
+            // $$$ Why is this failing for boost.math.concepts ? $$$
+            //~ int nn = std::numeric_limits<T>::max_exponent10;
+            //~ BOOST_ASSERT(exp <= std::numeric_limits<T>::max_exponent10);
+            n *= pow10<T>(exp);
+        }
+        else
+        {
+            if (exp < std::numeric_limits<T>::min_exponent10)
+            {
+                n /= pow10<T>(-std::numeric_limits<T>::min_exponent10);
+                n /= pow10<T>(-exp + std::numeric_limits<T>::min_exponent10);
+            }
+            else
+            {
+                n /= pow10<T>(-exp);
+            }
+        }
+    }
+
+    inline void
+    scale(int /*exp*/, unused_type /*n*/)
+    {
+        // no-op for unused_type
+    }
+
+    template <typename T>
+    inline void
+    scale(int exp, int frac, T& n)
+    {
+        scale(exp - frac, n);
+    }
+
+    inline void
+    scale(int /*exp*/, int /*frac*/, unused_type /*n*/)
+    {
+        // no-op for unused_type
+    }
+
+    inline float
+    negate(bool neg, float n)
+    {
+        return neg ? spirit::detail::changesign(n) : n;
+    }
+
+    inline double
+    negate(bool neg, double n)
+    {
+        return neg ? spirit::detail::changesign(n) : n;
+    }
+
+    inline long double
+    negate(bool neg, long double n)
+    {
+        return neg ? spirit::detail::changesign(n) : n;
+    }
+
+    template <typename T>
+    inline T
+    negate(bool neg, T const& n)
+    {
+        return neg ? -n : n;
+    }
+
+    inline unused_type
+    negate(bool /*neg*/, unused_type n)
+    {
+        // no-op for unused_type
+        return n;
+    }
+
+    template <typename T>
+    inline bool
+    is_equal_to_one(T const& value)
+    {
+        return value == 1.0;
+    }
+
+    inline bool
+    is_equal_to_one(unused_type)
+    {
+        // no-op for unused_type
+        return false;
+    }
+}}}
+
+namespace boost { namespace spirit { namespace qi  { namespace detail
+{
+    template <typename T, typename RealPolicies>
+    struct real_impl
+    {
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse(Iterator& first, Iterator const& last, Attribute& attr,
+            RealPolicies const& p)
+        {
+            if (first == last)
+                return false;
+            Iterator save = first;
+
+            // Start by parsing the sign. neg will be true if
+            // we got a "-" sign, false otherwise.
+            bool neg = p.parse_sign(first, last);
+
+            // Now attempt to parse an integer
+            T n = 0;
+            bool got_a_number = p.parse_n(first, last, n);
+
+            // If we did not get a number it might be a NaN, Inf or a leading
+            // dot.
+            if (!got_a_number)
+            {
+                // Check whether the number to parse is a NaN or Inf
+                if (p.parse_nan(first, last, n) ||
+                    p.parse_inf(first, last, n))
+                {
+                    // If we got a negative sign, negate the number
+                    traits::assign_to(traits::negate(neg, n), attr);
+                    return true;    // got a NaN or Inf, return early
+                }
+
+                // If we did not get a number and our policies do not
+                // allow a leading dot, fail and return early (no-match)
+                if (!p.allow_leading_dot)
+                {
+                    first = save;
+                    return false;
+                }
+            }
+
+            bool e_hit = false;
+            int frac_digits = 0;
+
+            // Try to parse the dot ('.' decimal point)
+            if (p.parse_dot(first, last))
+            {
+                // We got the decimal point. Now we will try to parse
+                // the fraction if it is there. If not, it defaults
+                // to zero (0) only if we already got a number.
+                Iterator savef = first;
+                if (p.parse_frac_n(first, last, n))
+                {
+                    // Optimization note: don't compute frac_digits if T is
+                    // an unused_type. This should be optimized away by the compiler.
+                    if (!is_same<T, unused_type>::value)
+                        frac_digits =
+                            static_cast<int>(std::distance(savef, first));
+                }
+                else if (!got_a_number || !p.allow_trailing_dot)
+                {
+                    // We did not get a fraction. If we still haven't got a
+                    // number and our policies do not allow a trailing dot,
+                    // return no-match.
+                    first = save;
+                    return false;
+                }
+
+                // Now, let's see if we can parse the exponent prefix
+                e_hit = p.parse_exp(first, last);
+            }
+            else
+            {
+                // No dot and no number! Return no-match.
+                if (!got_a_number)
+                {
+                    first = save;
+                    return false;
+                }
+
+                // If we must expect a dot and we didn't see an exponent
+                // prefix, return no-match.
+                e_hit = p.parse_exp(first, last);
+                if (p.expect_dot && !e_hit)
+                {
+                    first = save;
+                    return false;
+                }
+            }
+
+            if (e_hit)
+            {
+                // We got the exponent prefix. Now we will try to parse the
+                // actual exponent. It is an error if it is not there.
+                int exp = 0;
+                if (p.parse_exp_n(first, last, exp))
+                {
+                    // Got the exponent value. Scale the number by
+                    // exp-frac_digits.
+                    traits::scale(exp, frac_digits, n);
+                }
+                else
+                {
+                    // Oops, no exponent, return no-match.
+                    first = save;
+                    return false;
+                }
+            }
+            else if (frac_digits)
+            {
+                // No exponent found. Scale the number by -frac_digits.
+                traits::scale(-frac_digits, n);
+            }
+            else if (traits::is_equal_to_one(n))
+            {
+                // There is a chance of having to parse one of the 1.0#...
+                // styles some implementations use for representing NaN or Inf.
+
+                // Check whether the number to parse is a NaN or Inf
+                if (p.parse_nan(first, last, n) ||
+                    p.parse_inf(first, last, n))
+                {
+                    // If we got a negative sign, negate the number
+                    traits::assign_to(traits::negate(neg, n), attr);
+                    return true;    // got a NaN or Inf, return immediately
+                }
+            }
+
+            // If we got a negative sign, negate the number
+            traits::assign_to(traits::negate(neg, n), attr);
+
+            // Success!!!
+            return true;
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/int.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/int.hpp
new file mode 100644 (file)
index 0000000..68e214c
--- /dev/null
@@ -0,0 +1,411 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c)      2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_INT_APR_17_2006_0830AM)
+#define BOOST_SPIRIT_INT_APR_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/spirit/home/qi/numeric/numeric_utils.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace tag
+    {
+        template <typename T, unsigned Radix, unsigned MinDigits
+                , int MaxDigits>
+        struct int_parser 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    namespace qi
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // This one is the class that the user can instantiate directly in
+        // order to create a customized int parser
+        template <typename T = int, unsigned Radix = 10, unsigned MinDigits = 1
+                , int MaxDigits = -1>
+        struct int_parser
+          : spirit::terminal<tag::int_parser<T, Radix, MinDigits, MaxDigits> >
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_enable_short
+    template <> // enables short_
+    struct use_terminal<qi::domain, tag::short_> : mpl::true_ {};
+    //]
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, signed short> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables short_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::short_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* short_(n)
+    struct use_lazy_terminal<qi::domain, tag::short_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_enable_int
+    template <> // enables int_
+    struct use_terminal<qi::domain, tag::int_> : mpl::true_ {};
+    //]
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, signed> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables int_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::int_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* int_(n)
+    struct use_lazy_terminal<qi::domain, tag::int_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_enable_long
+    template <> // enables long_
+    struct use_terminal<qi::domain, tag::long_> : mpl::true_ {};
+    //]
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, signed long> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables long_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::long_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* long_(n)
+    struct use_lazy_terminal<qi::domain, tag::long_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_HAS_LONG_LONG
+    //[primitive_parsers_enable_long_long
+    template <> // enables long_long
+    struct use_terminal<qi::domain, tag::long_long> : mpl::true_ {};
+    //]
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, boost::long_long_type> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables long_long(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::long_long, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* long_long(n)
+    struct use_lazy_terminal<qi::domain, tag::long_long, 1> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom int_parser
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits>
+    struct use_terminal<qi::domain
+        , tag::int_parser<T, Radix, MinDigits, MaxDigits> >
+      : mpl::true_ {};
+
+    // enables any custom int_parser(n)
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits, typename A0>
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::int_parser<T, Radix, MinDigits, MaxDigits>
+                  , fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    // enables *lazy* custom int_parser(n)
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits>
+    struct use_lazy_terminal<qi::domain
+      , tag::int_parser<T, Radix, MinDigits, MaxDigits>, 1
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::short_;
+    using spirit::int_;
+    using spirit::long_;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::long_long;
+#endif
+    using spirit::lit;    // lit(1) is equivalent to 1
+#endif
+    using spirit::short_type;
+    using spirit::int_type;
+    using spirit::long_type;
+    using spirit::lit_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::long_long_type;
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the actual int parser
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_int_parser
+    template <
+        typename T
+      , unsigned Radix = 10
+      , unsigned MinDigits = 1
+      , int MaxDigits = -1>
+    struct any_int_parser
+      : primitive_parser<any_int_parser<T, Radix, MinDigits, MaxDigits> >
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
+            qi::skip_over(first, last, skipper);
+            return extract::call(first, last, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("integer");
+        }
+    };
+    //]
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1, bool no_attribute = true>
+    struct literal_int_parser
+      : primitive_parser<literal_int_parser<T, Radix, MinDigits, MaxDigits
+        , no_attribute> >
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        template <typename Value>
+        literal_int_parser(Value const& n) : n_(n) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
+            qi::skip_over(first, last, skipper);
+
+            Iterator save = first;
+            T attr_;
+
+            if (extract::call(first, last, attr_) && (attr_ == n_))
+            {
+                traits::assign_to(attr_, attr_param);
+                return true;
+            }
+
+            first = save;
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("integer");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_make_int
+    template <
+        typename T
+      , unsigned Radix = 10
+      , unsigned MinDigits = 1
+      , int MaxDigits = -1>
+    struct make_int
+    {
+        typedef any_int_parser<T, Radix, MinDigits, MaxDigits> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+    //]
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct make_direct_int
+    {
+        typedef literal_int_parser<T, Radix, MinDigits, MaxDigits, false>
+            result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct make_literal_int
+    {
+        typedef literal_int_parser<T, Radix, MinDigits, MaxDigits> result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, signed short> >::type>
+      : make_literal_int<signed short> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, signed> >::type>
+      : make_literal_int<signed> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, signed long> >::type>
+      : make_literal_int<signed long> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, boost::long_long_type> >::type>
+      : make_literal_int<boost::long_long_type> {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+            , typename Modifiers>
+    struct make_primitive<
+        tag::int_parser<T, Radix, MinDigits, MaxDigits>
+      , Modifiers>
+      : make_int<T, Radix, MinDigits, MaxDigits> {};
+
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+            , typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::int_parser<T, Radix, MinDigits, MaxDigits>
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_int<T, Radix, MinDigits, MaxDigits> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_short_primitive
+    template <typename Modifiers>
+    struct make_primitive<tag::short_, Modifiers>
+      : make_int<short> {};
+    //]
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::short_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_int<short> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_int_primitive
+    template <typename Modifiers>
+    struct make_primitive<tag::int_, Modifiers>
+      : make_int<int> {};
+    //]
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::int_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_int<int> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //[primitive_parsers_long_primitive
+    template <typename Modifiers>
+    struct make_primitive<tag::long_, Modifiers>
+      : make_int<long> {};
+    //]
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_int<long> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_HAS_LONG_LONG
+    //[primitive_parsers_long_long_primitive
+    template <typename Modifiers>
+    struct make_primitive<tag::long_long, Modifiers>
+      : make_int<boost::long_long_type> {};
+    //]
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_long
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_int<boost::long_long_type> {};
+#endif
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/numeric_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/numeric_utils.hpp
new file mode 100644 (file)
index 0000000..eebf40a
--- /dev/null
@@ -0,0 +1,149 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2011 Jan Frederick Eick
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_NUMERIC_UTILS_APRIL_17_2006_0830AM)
+#define BOOST_SPIRIT_NUMERIC_UTILS_APRIL_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/qi/numeric/detail/numeric_utils.hpp>
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Extract the prefix sign (- or +), return true if a '-' was found
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator>
+    inline bool
+    extract_sign(Iterator& first, Iterator const& last)
+    {
+        (void)last;                  // silence unused warnings
+        BOOST_ASSERT(first != last); // precondition
+
+        // Extract the sign
+        bool neg = *first == '-';
+        if (neg || (*first == '+'))
+        {
+            ++first;
+            return neg;
+        }
+        return false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Low level unsigned integer parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+      , bool Accumulate = false>
+    struct extract_uint
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix >= 2 && Radix <= 36,
+            not_supported_radix, ());
+
+        template <typename Iterator>
+        inline static bool call(Iterator& first, Iterator const& last, T& attr_)
+        {
+            if (first == last)
+                return false;
+
+            typedef detail::extract_int<
+                T
+              , Radix
+              , MinDigits
+              , MaxDigits
+              , detail::positive_accumulator<Radix>
+              , Accumulate>
+            extract_type;
+
+            Iterator save = first;
+            if (!extract_type::parse(first, last,
+                detail::cast_unsigned<T>::call(attr_)))
+            {
+                first = save;
+                return false;
+            }
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            // this case is called when Attribute is not T
+            T attr_local;
+            if (call(first, last, attr_local))
+            {
+                traits::assign_to(attr_local, attr_);
+                return true;
+            }
+            return false;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Low level signed integer parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits>
+    struct extract_int
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        template <typename Iterator>
+        inline static bool call(Iterator& first, Iterator const& last, T& attr_)
+        {
+            if (first == last)
+                return false;
+
+            typedef detail::extract_int<
+                T, Radix, MinDigits, MaxDigits>
+            extract_pos_type;
+
+            typedef detail::extract_int<
+                T, Radix, MinDigits, MaxDigits, detail::negative_accumulator<Radix> >
+            extract_neg_type;
+
+            Iterator save = first;
+            bool hit = extract_sign(first, last);
+            if (hit)
+                hit = extract_neg_type::parse(first, last, attr_);
+            else
+                hit = extract_pos_type::parse(first, last, attr_);
+
+            if (!hit)
+            {
+                first = save;
+                return false;
+            }
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            // this case is called when Attribute is not T
+            T attr_local;
+            if (call(first, last, attr_local))
+            {
+                traits::assign_to(attr_local, attr_);
+                return true;
+            }
+            return false;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real.hpp
new file mode 100644 (file)
index 0000000..27d48e5
--- /dev/null
@@ -0,0 +1,342 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2011      Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_REAL_APRIL_18_2006_0850AM)
+#define BOOST_SPIRIT_REAL_APRIL_18_2006_0850AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/numeric/real_policies.hpp>
+#include <boost/spirit/home/qi/numeric/numeric_utils.hpp>
+#include <boost/spirit/home/qi/numeric/detail/real_impl.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace qi
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // forward declaration only
+        template <typename T>
+        struct real_policies;
+
+        ///////////////////////////////////////////////////////////////////////
+        // This is the class that the user can instantiate directly in
+        // order to create a customized real parser
+        template <typename T = double, typename Policies = real_policies<T> >
+        struct real_parser
+          : spirit::terminal<tag::stateful_tag<Policies, tag::double_, T> >
+        {
+            typedef tag::stateful_tag<Policies, tag::double_, T> tag_type;
+
+            real_parser() {}
+            real_parser(Policies const& p)
+              : spirit::terminal<tag_type>(p) {}
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables float_
+    struct use_terminal<qi::domain, tag::float_>
+      : mpl::true_ {};
+
+    template <> // enables double_
+    struct use_terminal<qi::domain, tag::double_>
+      : mpl::true_ {};
+
+    template <> // enables long_double
+    struct use_terminal<qi::domain, tag::long_double>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, float> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, double> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, long double> >::type>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A0> // enables float_(...)
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::float_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0> // enables double_(...)
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::double_, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <typename A0> // enables long_double(...)
+    struct use_terminal<qi::domain
+      , terminal_ex<tag::long_double, fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    template <> // enables *lazy* float_(...)
+    struct use_lazy_terminal<qi::domain, tag::float_, 1>
+      : mpl::true_ {};
+
+    template <> // enables *lazy* double_(...)
+    struct use_lazy_terminal<qi::domain, tag::double_, 1>
+      : mpl::true_ {};
+
+    template <> // enables *lazy* long_double_(...)
+    struct use_lazy_terminal<qi::domain, tag::long_double, 1>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables custom real_parser
+    template <typename T, typename Policies>
+    struct use_terminal<qi::domain
+        , tag::stateful_tag<Policies, tag::double_, T> >
+      : mpl::true_ {};
+
+    // enables custom real_parser(...)
+    template <typename T, typename Policies, typename A0>
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::stateful_tag<Policies, tag::double_, T>
+        , fusion::vector1<A0> > >
+      : mpl::true_ {};
+
+    // enables *lazy* custom real_parser(...)
+    template <typename T, typename Policies>
+    struct use_lazy_terminal<
+        qi::domain
+      , tag::stateful_tag<Policies, tag::double_, T>
+      , 1 // arity
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::float_;
+    using spirit::double_;
+    using spirit::long_double;
+    using spirit::lit; // lit(1.0) is equivalent to 1.0
+#endif
+
+    using spirit::float_type;
+    using spirit::double_type;
+    using spirit::long_double_type;
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the actual real number parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename RealPolicies = real_policies<T> >
+    struct any_real_parser
+      : primitive_parser<any_real_parser<T, RealPolicies> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context, typename Skipper>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , T& attr_) const
+        {
+            typedef detail::real_impl<T, RealPolicies> extract;
+            qi::skip_over(first, last, skipper);
+            return extract::parse(first, last, attr_, RealPolicies());
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            // this case is called when Attribute is not T
+            T attr_;
+            if (parse(first, last, context, skipper, attr_))
+            {
+                traits::assign_to(attr_, attr_param);
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("real");
+        }
+    };
+
+    template <typename T, typename RealPolicies = real_policies<T>
+            , bool no_attribute = true>
+    struct literal_real_parser
+      : primitive_parser<literal_real_parser<T, RealPolicies, no_attribute> >
+    {
+        template <typename Value>
+        literal_real_parser(Value const& n) : n_(n) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context&, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            typedef detail::real_impl<T, RealPolicies> extract;
+            qi::skip_over(first, last, skipper);
+
+            Iterator save = first;
+            T attr_;
+
+            if (extract::parse(first, last, attr_, RealPolicies()) &&
+                (attr_ == n_))
+            {
+                traits::assign_to(attr_, attr_param);
+                return true;
+            }
+
+            first = save;
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("real");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies = real_policies<T> >
+    struct make_real
+    {
+        typedef any_real_parser<T, Policies> result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename T, typename Policies = real_policies<T> >
+    struct make_direct_real
+    {
+        typedef literal_real_parser<T, Policies, false> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(T(fusion::at_c<0>(term.args)));
+        }
+    };
+
+    template <typename T, typename Policies = real_policies<T> >
+    struct make_literal_real
+    {
+        typedef literal_real_parser<T, Policies> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, float> >::type>
+      : make_literal_real<float> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, double> >::type>
+      : make_literal_real<double> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, long double> >::type>
+      : make_literal_real<long double> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies, typename Modifiers>
+    struct make_primitive<
+        tag::stateful_tag<Policies, tag::double_, T>, Modifiers>
+      : make_real<T, Policies> {};
+
+    template <typename T, typename Policies, typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::stateful_tag<Policies, tag::double_, T>
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_real<T, Policies> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::float_, Modifiers>
+      : make_real<float> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::float_
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_real<float> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::double_, Modifiers>
+      : make_real<double> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::double_
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_real<double> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::long_double, Modifiers>
+      : make_real<long double> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::long_double
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_real<long double> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/real_policies.hpp
new file mode 100644 (file)
index 0000000..1315888
--- /dev/null
@@ -0,0 +1,186 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM)
+#define SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/numeric_utils.hpp>
+#include <boost/spirit/home/qi/detail/string_parse.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default (unsigned) real number policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct ureal_policies
+    {
+        // trailing dot policy suggested by Gustavo Guerra
+        static bool const allow_leading_dot = true;
+        static bool const allow_trailing_dot = true;
+        static bool const expect_dot = false;
+
+        template <typename Iterator>
+        static bool
+        parse_sign(Iterator& /*first*/, Iterator const& /*last*/)
+        {
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_n(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            return extract_uint<T, 10, 1, -1>::call(first, last, attr_);
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_dot(Iterator& first, Iterator const& last)
+        {
+            if (first == last || *first != '.')
+                return false;
+            ++first;
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_frac_n(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            return extract_uint<T, 10, 1, -1, true>::call(first, last, attr_);
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_exp(Iterator& first, Iterator const& last)
+        {
+            if (first == last || (*first != 'e' && *first != 'E'))
+                return false;
+            ++first;
+            return true;
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_exp_n(Iterator& first, Iterator const& last, int& attr_)
+        {
+            return extract_int<int, 10, 1, -1>::call(first, last, attr_);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The parse_nan() and parse_inf() functions get called whenever:
+        //
+        //    - a number to parse does not start with a digit (after having
+        //      successfully parsed an optional sign)
+        //
+        //  or
+        //
+        //    - after a floating point number of the value 1 (having no
+        //      exponential part and a fractional part value of 0) has been
+        //      parsed.
+        //
+        //  The first call allows to recognize representations of NaN or Inf
+        //  starting with a non-digit character (such as NaN, Inf, QNaN etc.).
+        //
+        //  The second call allows to recognize representation formats starting
+        //  with a 1.0 (such as 1.0#NAN or 1.0#INF etc.).
+        //
+        //  The functions should return true if a Nan or Inf has been found. In
+        //  this case the attr should be set to the matched value (NaN or
+        //  Inf). The optional sign will be automatically applied afterwards.
+        //
+        //  The default implementation below recognizes representations of NaN
+        //  and Inf as mandated by the C99 Standard and as proposed for
+        //  inclusion into the C++0x Standard: nan, nan(...), inf and infinity
+        //  (the matching is performed case-insensitively).
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_nan(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (first == last)
+                return false;   // end of input reached
+
+            if (*first != 'n' && *first != 'N')
+                return false;   // not "nan"
+
+            // nan[(...)] ?
+            if (detail::string_parse("nan", "NAN", first, last, unused))
+            {
+                if (*first == '(')
+                {
+                    // skip trailing (...) part
+                    Iterator i = first;
+
+                    while (++i != last && *i != ')')
+                        ;
+                    if (i == last)
+                        return false;     // no trailing ')' found, give up
+
+                    first = ++i;
+                }
+                attr_ = std::numeric_limits<T>::quiet_NaN();
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_inf(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (first == last)
+                return false;   // end of input reached
+
+            if (*first != 'i' && *first != 'I')
+                return false;   // not "inf"
+
+            // inf or infinity ?
+            if (detail::string_parse("inf", "INF", first, last, unused))
+            {
+                // skip allowed 'inity' part of infinity
+                detail::string_parse("inity", "INITY", first, last, unused);
+                attr_ = std::numeric_limits<T>::infinity();
+                return true;
+            }
+            return false;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default (signed) real number policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct real_policies : ureal_policies<T>
+    {
+        template <typename Iterator>
+        static bool
+        parse_sign(Iterator& first, Iterator const& last)
+        {
+            return extract_sign(first, last);
+        }
+    };
+
+    template <typename T>
+    struct strict_ureal_policies : ureal_policies<T>
+    {
+        static bool const expect_dot = true;
+    };
+
+    template <typename T>
+    struct strict_real_policies : real_policies<T>
+    {
+        static bool const expect_dot = true;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/uint.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/numeric/uint.hpp
new file mode 100644 (file)
index 0000000..f6d1efd
--- /dev/null
@@ -0,0 +1,464 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2011 Bryce Lelbach
+    Copyright (c) 2011 Jan Frederick Eick
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_UINT_APR_17_2006_0901AM)
+#define SPIRIT_UINT_APR_17_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/spirit/home/qi/numeric/numeric_utils.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit
+{
+    namespace tag
+    {
+        template <typename T, unsigned Radix, unsigned MinDigits
+                , int MaxDigits>
+        struct uint_parser
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    namespace qi
+    {
+        ///////////////////////////////////////////////////////////////////////
+        // This one is the class that the user can instantiate directly in
+        // order to create a customized int parser
+        template <typename T = int, unsigned Radix = 10, unsigned MinDigits = 1
+                , int MaxDigits = -1>
+        struct uint_parser
+          : spirit::terminal<tag::uint_parser<T, Radix, MinDigits, MaxDigits> >
+        {};
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables ushort_
+    struct use_terminal<qi::domain, tag::ushort_> : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, unsigned short> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables ushort_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::ushort_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* ushort_(n)
+    struct use_lazy_terminal<qi::domain, tag::ushort_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables uint_
+    struct use_terminal<qi::domain, tag::uint_> : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, unsigned> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables uint_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::uint_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* uint_(n)
+    struct use_lazy_terminal<qi::domain, tag::uint_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables ulong_
+    struct use_terminal<qi::domain, tag::ulong_> : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, unsigned long> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables ulong_(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::ulong_, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* ulong_(n)
+    struct use_lazy_terminal<qi::domain, tag::ulong_, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_HAS_LONG_LONG
+    template <> // enables ulong_long
+    struct use_terminal<qi::domain, tag::ulong_long> : mpl::true_ {};
+
+    template <typename A0> // enables lit(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::lit, fusion::vector1<A0> >
+        , typename enable_if<is_same<A0, boost::ulong_long_type> >::type>
+      : mpl::true_ {};
+
+    template <typename A0> // enables ulong_long(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::ulong_long, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* ulong_long(n)
+    struct use_lazy_terminal<qi::domain, tag::ulong_long, 1> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables bin
+    struct use_terminal<qi::domain, tag::bin> : mpl::true_ {};
+
+    template <typename A0> // enables bin(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::bin, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* bin(n)
+    struct use_lazy_terminal<qi::domain, tag::bin, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables oct
+    struct use_terminal<qi::domain, tag::oct> : mpl::true_ {};
+
+    template <typename A0> // enables oct(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::oct, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* oct(n)
+    struct use_lazy_terminal<qi::domain, tag::oct, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <> // enables hex
+    struct use_terminal<qi::domain, tag::hex> : mpl::true_ {};
+
+    template <typename A0> // enables hex(n)
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::hex, fusion::vector1<A0> > >
+      : is_arithmetic<A0> {};
+
+    template <> // enables *lazy* hex(n)
+    struct use_lazy_terminal<qi::domain, tag::hex, 1> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // enables any custom uint_parser
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits>
+    struct use_terminal<qi::domain
+        , tag::uint_parser<T, Radix, MinDigits, MaxDigits> >
+      : mpl::true_ {};
+
+    // enables any custom uint_parser(n)
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits, typename A0>
+    struct use_terminal<qi::domain
+        , terminal_ex<tag::uint_parser<T, Radix, MinDigits, MaxDigits>
+                  , fusion::vector1<A0> >
+    > : mpl::true_ {};
+
+    // enables *lazy* custom uint_parser(n)
+    template <typename T, unsigned Radix, unsigned MinDigits
+            , int MaxDigits>
+    struct use_lazy_terminal<qi::domain
+      , tag::uint_parser<T, Radix, MinDigits, MaxDigits>, 1
+    > : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::bin;
+    using spirit::oct;
+    using spirit::hex;
+
+    using spirit::ushort_;
+    using spirit::uint_;
+    using spirit::ulong_;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::ulong_long;
+#endif
+    using spirit::lit; // lit(1) is equivalent to 1
+#endif
+
+    using spirit::bin_type;
+    using spirit::oct_type;
+    using spirit::hex_type;
+
+    using spirit::ushort_type;
+    using spirit::uint_type;
+    using spirit::ulong_type;
+#ifdef BOOST_HAS_LONG_LONG
+    using spirit::ulong_long_type;
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the actual uint parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct any_uint_parser
+      : primitive_parser<any_uint_parser<T, Radix, MinDigits, MaxDigits> >
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix >= 2 && Radix <= 36,
+            not_supported_radix, ());
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
+            qi::skip_over(first, last, skipper);
+            return extract::call(first, last, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("unsigned-integer");
+        }
+    };
+    //]
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1, bool no_attribute = true>
+    struct literal_uint_parser
+      : primitive_parser<literal_uint_parser<T, Radix, MinDigits, MaxDigits
+        , no_attribute> >
+    {
+        // check template parameter 'Radix' for validity
+        BOOST_SPIRIT_ASSERT_MSG(
+            Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16,
+            not_supported_radix, ());
+
+        template <typename Value>
+        literal_uint_parser(Value const& n) : n_(n) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : mpl::if_c<no_attribute, unused_type, T>
+        {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_param) const
+        {
+            typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
+            qi::skip_over(first, last, skipper);
+
+            Iterator save = first;
+            T attr_;
+
+            if (extract::call(first, last, attr_) && (attr_ == n_))
+            {
+                traits::assign_to(attr_, attr_param);
+                return true;
+            }
+
+            first = save;
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("unsigned-integer");
+        }
+
+        T n_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct make_uint
+    {
+        typedef any_uint_parser<T, Radix, MinDigits, MaxDigits> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct make_direct_uint
+    {
+        typedef literal_uint_parser<T, Radix, MinDigits, MaxDigits, false>
+            result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    template <typename T, unsigned Radix = 10, unsigned MinDigits = 1
+            , int MaxDigits = -1>
+    struct make_literal_uint
+    {
+        typedef literal_uint_parser<T, Radix, MinDigits, MaxDigits> result_type;
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, unsigned short> >::type>
+      : make_literal_uint<unsigned short> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, unsigned> >::type>
+      : make_literal_uint<unsigned> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, unsigned long> >::type>
+      : make_literal_uint<unsigned long> {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<tag::lit, fusion::vector1<A0> >
+        , Modifiers, typename enable_if<is_same<A0, boost::ulong_long_type> >::type>
+      : make_literal_uint<boost::ulong_long_type> {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+            , typename Modifiers>
+    struct make_primitive<
+        tag::uint_parser<T, Radix, MinDigits, MaxDigits>
+      , Modifiers>
+      : make_uint<T, Radix, MinDigits, MaxDigits> {};
+
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+            , typename A0, typename Modifiers>
+    struct make_primitive<
+        terminal_ex<tag::uint_parser<T, Radix, MinDigits, MaxDigits>
+      , fusion::vector1<A0> >, Modifiers>
+      : make_direct_uint<T, Radix, MinDigits, MaxDigits> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::bin, Modifiers>
+      : make_uint<unsigned, 2> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::bin
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned, 2> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::oct, Modifiers>
+      : make_uint<unsigned, 8> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::oct
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned, 8> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::hex, Modifiers>
+      : make_uint<unsigned, 16> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::hex
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned, 16> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::ushort_, Modifiers>
+      : make_uint<unsigned short> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ushort_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned short> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::uint_, Modifiers>
+      : make_uint<unsigned> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::uint_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<tag::ulong_, Modifiers>
+      : make_uint<unsigned long> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ulong_
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<unsigned long> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_HAS_LONG_LONG
+    template <typename Modifiers>
+    struct make_primitive<tag::ulong_long, Modifiers>
+      : make_uint<boost::ulong_long_type> {};
+
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::ulong_long
+      , fusion::vector1<A0> > , Modifiers>
+      : make_direct_uint<boost::ulong_long_type> {};
+#endif
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator.hpp
new file mode 100644 (file)
index 0000000..de44f5e
--- /dev/null
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_OPERATOR_FEBRUARY_02_2007_0558PM)
+#define BOOST_SPIRIT_OPERATOR_FEBRUARY_02_2007_0558PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/sequence.hpp>
+#include <boost/spirit/home/qi/operator/expect.hpp>
+#include <boost/spirit/home/qi/operator/alternative.hpp>
+#include <boost/spirit/home/qi/operator/sequential_or.hpp>
+#include <boost/spirit/home/qi/operator/permutation.hpp>
+#include <boost/spirit/home/qi/operator/difference.hpp>
+#include <boost/spirit/home/qi/operator/list.hpp>
+#include <boost/spirit/home/qi/operator/optional.hpp>
+#include <boost/spirit/home/qi/operator/kleene.hpp>
+#include <boost/spirit/home/qi/operator/plus.hpp>
+#include <boost/spirit/home/qi/operator/and_predicate.hpp>
+#include <boost/spirit/home/qi/operator/not_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/alternative.hpp
new file mode 100644 (file)
index 0000000..22cfdef
--- /dev/null
@@ -0,0 +1,118 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ALTERNATIVE_FEBRUARY_05_2007_1153AM)
+#define SPIRIT_ALTERNATIVE_FEBRUARY_05_2007_1153AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/alternative_function.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/fusion/include/any.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/fusion/include/for_each.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::bitwise_or> // enables |
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::bitwise_or> // flattens |
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Elements>
+    struct alternative : nary_parser<alternative<Elements> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::alternative_attribute_transform
+              , Iterator, qi::domain
+            >::type all_attributes;
+
+            // Ok, now make a variant over the attribute sequence. Note that
+            // build_variant makes sure that 1) all attributes in the variant
+            // are unique 2) puts the unused attribute, if there is any, to
+            // the front and 3) collapses single element variants, variant<T>
+            // to T.
+            typedef typename
+                traits::build_variant<all_attributes>::type
+            type;
+        };
+
+        alternative(Elements const& elements_)
+          : elements(elements_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            detail::alternative_function<Iterator, Context, Skipper, Attribute>
+                f(first, last, context, skipper, attr_);
+
+            // return true if *any* of the parsers succeed
+            return fusion::any(elements, f);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("alternative");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::bitwise_or, Elements, Modifiers>
+      : make_nary_composite<Elements, alternative>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<qi::alternative<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::alternative<Elements>, Attribute, Context
+      , Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/and_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/and_predicate.hpp
new file mode 100644 (file)
index 0000000..0554c10
--- /dev/null
@@ -0,0 +1,92 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM)
+#define SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::address_of> // enables &p
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Subject>
+    struct and_predicate : unary_parser<and_predicate<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        and_predicate(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            Iterator i = first;
+            return subject.parse(i, last, context, skipper, unused);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("and-predicate", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::address_of, Elements, Modifiers>
+      : make_unary_composite<Elements, and_predicate>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::and_predicate<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::and_predicate<Subject>, Attribute, Context
+      , Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/difference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/difference.hpp
new file mode 100644 (file)
index 0000000..f703d7f
--- /dev/null
@@ -0,0 +1,112 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM)
+#define SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::minus> // enables -
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Left, typename Right>
+    struct difference : binary_parser<difference<Left, Right> >
+    {
+        typedef Left left_type;
+        typedef Right right_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<left_type, Context, Iterator>::type
+            type;
+        };
+
+        difference(Left const& left_, Right const& right_)
+          : left(left_), right(right_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            // Unlike classic Spirit, with this version of difference, the rule
+            // lit("policeman") - "police" will always fail to match.
+
+            // Spirit2 does not count the matching chars while parsing and
+            // there is no reliable and fast way to check if the LHS matches
+            // more than the RHS.
+
+            // Try RHS first
+            Iterator start = first;
+            if (right.parse(first, last, context, skipper, unused))
+            {
+                // RHS succeeds, we fail.
+                first = start;
+                return false;
+            }
+            // RHS fails, now try LHS
+            return left.parse(first, last, context, skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("difference",
+                std::make_pair(left.what(context), right.what(context)));
+        }
+
+        Left left;
+        Right right;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::minus, Elements, Modifiers>
+      : make_binary_composite<Elements, difference>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right>
+    struct has_semantic_action<qi::difference<Left, Right> >
+      : binary_has_semantic_action<Left, Right> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<qi::difference<Left, Right>, Attribute, Context
+      , Iterator>
+      : binary_handles_container<Left, Right, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/expect.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/expect.hpp
new file mode 100644 (file)
index 0000000..ff279fd
--- /dev/null
@@ -0,0 +1,103 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_EXPECT_APRIL_29_2007_0445PM)
+#define SPIRIT_EXPECT_APRIL_29_2007_0445PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/sequence_base.hpp>
+#include <boost/spirit/home/qi/detail/expect_function.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <stdexcept>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::greater> // enables >
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::greater> // flattens >
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Iterator>
+    struct expectation_failure : std::runtime_error
+    {
+        expectation_failure(Iterator first_, Iterator last_, info const& what)
+          : std::runtime_error("boost::spirit::qi::expectation_failure")
+          , first(first_), last(last_), what_(what)
+        {}
+        ~expectation_failure() throw() {}
+
+        Iterator first;
+        Iterator last;
+        info what_;
+    };
+
+    template <typename Elements>
+    struct expect : sequence_base<expect<Elements>, Elements>
+    {
+        friend struct sequence_base<expect<Elements>, Elements>;
+
+        expect(Elements const& elements)
+          : sequence_base<expect<Elements>, Elements>(elements) {}
+
+    private:
+
+        template <typename Iterator, typename Context, typename Skipper>
+        static detail::expect_function<
+            Iterator, Context, Skipper
+          , expectation_failure<Iterator> >
+        fail_function(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper)
+        {
+            return detail::expect_function<
+                Iterator, Context, Skipper, expectation_failure<Iterator> >
+                (first, last, context, skipper);
+        }
+
+        std::string id() const { return "expect"; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::greater, Elements, Modifiers>
+      : make_nary_composite<Elements, expect>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<qi::expect<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::expect<Elements>, Attribute, Context
+          , Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/kleene.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/kleene.hpp
new file mode 100644 (file)
index 0000000..798e63d
--- /dev/null
@@ -0,0 +1,134 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_KLEENE_JANUARY_07_2007_0818AM)
+#define SPIRIT_KLEENE_JANUARY_07_2007_0818AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/qi/detail/pass_container.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    //[composite_parsers_kleene_enable_
+    template <>
+    struct use_operator<qi::domain, proto::tag::dereference> // enables *p
+      : mpl::true_ {};
+    //]
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    //[composite_parsers_kleene
+    template <typename Subject>
+    struct kleene : unary_parser<kleene<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Build a std::vector from the subject's attribute. Note
+            // that build_std_vector may return unused_type if the
+            // subject's attribute is an unused_type.
+            typedef typename
+                traits::build_std_vector<
+                    typename traits::
+                        attribute_of<Subject, Context, Iterator>::type
+                >::type
+            type;
+        };
+
+        kleene(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename F>
+        bool parse_container(F f) const
+        {
+            while (!f (subject))
+                ;
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            // ensure the attribute is actually a container type
+            traits::make_container(attr_);
+
+            typedef detail::fail_function<Iterator, Context, Skipper>
+                fail_function;
+
+            Iterator iter = first;
+            fail_function f(iter, last, context, skipper);
+            parse_container(detail::make_pass_container(f, attr_));
+
+            first = f.first;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("kleene", subject.what(context));
+        }
+
+        Subject subject;
+    };
+    //]
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    //[composite_parsers_kleene_generator
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::dereference, Elements, Modifiers>
+      : make_unary_composite<Elements, kleene>
+    {};
+    //]
+
+//     ///////////////////////////////////////////////////////////////////////////
+//     // Define what attributes are compatible with a kleene
+//     template <typename Attribute, typename Subject, typename Context, typename Iterator>
+//     struct is_attribute_compatible<Attribute, kleene<Subject>, Context, Iterator>
+//       : traits::is_container_compatible<qi::domain, Attribute
+//               , kleene<Subject>, Context, Iterator>
+//     {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::kleene<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::kleene<Subject>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {}; 
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/list.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/list.hpp
new file mode 100644 (file)
index 0000000..c5b3ef6
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_LIST_MARCH_24_2007_1031AM)
+#define SPIRIT_LIST_MARCH_24_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/qi/detail/pass_container.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <vector>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::modulus> // enables p % d
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Left, typename Right>
+    struct list : binary_parser<list<Left, Right> >
+    {
+        typedef Left left_type;
+        typedef Right right_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Build a std::vector from the LHS's attribute. Note
+            // that build_std_vector may return unused_type if the
+            // subject's attribute is an unused_type.
+            typedef typename
+                traits::build_std_vector<
+                    typename traits::
+                        attribute_of<Left, Context, Iterator>::type
+                >::type
+            type;
+        };
+
+        list(Left const& left_, Right const& right_)
+          : left(left_), right(right_) {}
+
+        template <typename F>
+        bool parse_container(F f) const
+        {
+            // in order to succeed we need to match at least one element 
+            if (f (left))
+                return false;
+
+            typename F::iterator_type save = f.f.first;
+            while (right.parse(f.f.first, f.f.last, f.f.context, f.f.skipper, unused)
+              && !f (left))
+            {
+                save = f.f.first;
+            }
+
+            f.f.first = save;
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef detail::fail_function<Iterator, Context, Skipper>
+                fail_function;
+
+            // ensure the attribute is actually a container type
+            traits::make_container(attr_);
+
+            Iterator iter = first;
+            fail_function f(iter, last, context, skipper);
+            if (!parse_container(detail::make_pass_container(f, attr_)))
+                return false;
+
+            first = f.first;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("list",
+                std::make_pair(left.what(context), right.what(context)));
+        }
+
+        Left left;
+        Right right;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::modulus, Elements, Modifiers>
+      : make_binary_composite<Elements, list>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right>
+    struct has_semantic_action<qi::list<Left, Right> >
+      : binary_has_semantic_action<Left, Right> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Left, typename Right, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<qi::list<Left, Right>, Attribute, Context
+          , Iterator> 
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/not_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/not_predicate.hpp
new file mode 100644 (file)
index 0000000..1fb81cd
--- /dev/null
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM)
+#define SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::logical_not> // enables !p
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Subject>
+    struct not_predicate : unary_parser<not_predicate<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        not_predicate(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& /*attr*/) const
+        {
+            Iterator i = first;
+            return !subject.parse(i, last, context, skipper, unused);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("not-predicate", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::logical_not, Elements, Modifiers>
+      : make_unary_composite<Elements, not_predicate>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::not_predicate<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::not_predicate<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/optional.hpp
new file mode 100644 (file)
index 0000000..0f7698d
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_OPTIONAL_MARCH_23_2007_1117PM)
+#define SPIRIT_OPTIONAL_MARCH_23_2007_1117PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/optional.hpp>
+#include <vector>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::negate> // enables -p
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Subject>
+    struct optional : unary_parser<optional<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Build a boost::optional from the subject's attribute. Note
+            // that boost::optional may return unused_type if the
+            // subject's attribute is an unused_type.
+            typedef typename
+                traits::build_optional<
+                    typename traits::
+                        attribute_of<Subject, Context, Iterator>::type
+                >::type
+            type;
+        };
+
+        optional(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_, mpl::false_) const
+        {
+            // create a local value if Attribute is not unused_type
+            typename spirit::result_of::optional_value<Attribute>::type val =
+                typename spirit::result_of::optional_value<Attribute>::type();
+
+            if (subject.parse(first, last, context, skipper, val))
+            {
+                // assign the parsed value into our attribute
+                spirit::traits::assign_to(val, attr_);
+            }
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_, mpl::true_) const
+        {
+            subject.parse(first, last, context, skipper, attr_);
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef typename spirit::result_of::optional_value<Attribute>::type
+                attribute_type;
+
+            return parse_impl(first, last, context, skipper, attr_
+              , traits::is_container<attribute_type>());
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("optional", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::negate, Elements, Modifiers>
+      : make_unary_composite<Elements, optional>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::optional<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<qi::optional<Subject>, Attribute
+          , Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/permutation.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/permutation.hpp
new file mode 100644 (file)
index 0000000..cadfa24
--- /dev/null
@@ -0,0 +1,146 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PERMUTATION_OR_MARCH_13_2007_1145PM)
+#define SPIRIT_PERMUTATION_OR_MARCH_13_2007_1145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/permute_function.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/algorithm/any_if_ns.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/optional.hpp>
+#include <boost/foreach.hpp>
+#include <boost/array.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::bitwise_xor> // enables ^
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::bitwise_xor> // flattens ^
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Elements>
+    struct permutation : nary_parser<permutation<Elements> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple,
+            // wrapping each element in a boost::optional
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::permutation_attribute_transform
+              , Iterator, qi::domain
+            >::type all_attributes;
+
+            // Now, build a fusion vector over the attributes. Note
+            // that build_fusion_vector 1) removes all unused attributes
+            // and 2) may return unused_type if all elements have
+            // unused_type(s).
+            typedef typename
+                traits::build_fusion_vector<all_attributes>::type
+            type;
+        };
+
+        permutation(Elements const& elements_)
+          : elements(elements_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef traits::attribute_not_unused<Context, Iterator> predicate;
+            detail::permute_function<Iterator, Context, Skipper>
+                f(first, last, context, skipper);
+
+            boost::array<bool, fusion::result_of::size<Elements>::value> flags;
+            BOOST_FOREACH(bool& taken, flags)
+            {
+                taken = false;
+            }
+
+            // wrap the attribute in a tuple if it is not a tuple
+            typename traits::wrap_if_not_tuple<Attribute>::type attr_local(attr_);
+
+            // We have a bool array 'flags' with one flag for each parser.
+            // permute_function sets the slot to true when the corresponding
+            // parser successful matches. We loop until there are no more
+            // successful parsers.
+
+            bool result = false;
+            f.taken = flags.begin();
+            while (spirit::any_if_ns(elements, attr_local, f, predicate()))
+            {
+                f.taken = flags.begin();
+                result = true;
+            }
+            return result;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("permutation");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::bitwise_xor, Elements, Modifiers>
+      : make_nary_composite<Elements, permutation>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // We specialize this for permutation (see support/attributes.hpp).
+    // For permutation, we only wrap the attribute in a tuple IFF
+    // it is not already a fusion tuple.
+    template <typename Elements, typename Attribute>
+    struct pass_attribute<qi::permutation<Elements>, Attribute>
+      : wrap_if_not_tuple<Attribute> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<qi::permutation<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::permutation<Elements>, Attribute, Context
+      , Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/plus.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/plus.hpp
new file mode 100644 (file)
index 0000000..3c08d1f
--- /dev/null
@@ -0,0 +1,125 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PLUS_MARCH_13_2007_0127PM)
+#define SPIRIT_PLUS_MARCH_13_2007_0127PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/qi/detail/pass_container.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/home/support/info.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::unary_plus> // enables +p
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Subject>
+    struct plus : unary_parser<plus<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Build a std::vector from the subject's attribute. Note
+            // that build_std_vector may return unused_type if the
+            // subject's attribute is an unused_type.
+            typedef typename
+                traits::build_std_vector<
+                    typename traits::attribute_of<
+                        Subject, Context, Iterator>::type
+                >::type
+            type;
+        };
+
+        plus(Subject const& subject_)
+          : subject(subject_) {}
+
+        template <typename F>
+        bool parse_container(F f) const
+        {
+            // in order to succeed we need to match at least one element 
+            if (f (subject))
+                return false;
+
+            while (!f (subject))
+                ;
+            return true;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef detail::fail_function<Iterator, Context, Skipper>
+                fail_function;
+
+            // ensure the attribute is actually a container type
+            traits::make_container(attr_);
+
+            Iterator iter = first;
+            fail_function f(iter, last, context, skipper);
+            if (!parse_container(detail::make_pass_container(f, attr_)))
+                return false;
+
+            first = f.first;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("plus", subject.what(context));
+        }
+
+        Subject subject;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::unary_plus, Elements, Modifiers>
+      : make_unary_composite<Elements, plus>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<qi::plus<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::plus<Subject>, Attribute, Context
+          , Iterator>
+      : mpl::true_ {}; 
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence.hpp
new file mode 100644 (file)
index 0000000..817b7dc
--- /dev/null
@@ -0,0 +1,96 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENCE_APR_22_2006_0811AM)
+#define SPIRIT_SEQUENCE_APR_22_2006_0811AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/sequence_base.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::shift_right> // enables >>
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::shift_right> // flattens >>
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Elements>
+    struct sequence : sequence_base<sequence<Elements>, Elements>
+    {
+        friend struct sequence_base<sequence<Elements>, Elements>;
+
+        sequence(Elements const& elements)
+          : sequence_base<sequence<Elements>, Elements>(elements) {}
+
+    private:
+
+        template <typename Iterator, typename Context, typename Skipper>
+        static detail::fail_function<Iterator, Context, Skipper>
+        fail_function(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper)
+        {
+            return detail::fail_function<Iterator, Context, Skipper>
+                (first, last, context, skipper);
+        }
+
+        std::string id() const { return "sequence"; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::shift_right, Elements, Modifiers>
+      : make_nary_composite<Elements, sequence>
+    {};
+
+//     ///////////////////////////////////////////////////////////////////////////
+//     // Define what attributes are compatible with a sequence
+//     template <typename Attribute, typename Elements, typename Context, typename Iterator>
+//     struct is_attribute_compatible<Attribute, sequence<Elements>, Context, Iterator>
+//       : mpl::or_<
+//             is_convertible<Attribute
+//               , typename traits::attribute_of<sequence<Elements>, Context, Iterator>::type> 
+//           , traits::is_fusion_sequence_compatible<qi::domain, Attribute
+//               , sequence<Elements>, Context, Iterator> 
+//           , traits::is_container_compatible<qi::domain, Attribute
+//               , sequence<Elements>, Context, Iterator>
+//         >
+//     {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<qi::sequence<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::sequence<Elements>, Attribute, Context
+          , Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence_base.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequence_base.hpp
new file mode 100644 (file)
index 0000000..3664686
--- /dev/null
@@ -0,0 +1,140 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENCE_BASE_APRIL_22_2006_0811AM)
+#define SPIRIT_SEQUENCE_BASE_APRIL_22_2006_0811AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/detail/pass_container.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/algorithm/any_if.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/sequence_base_id.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Derived, typename Elements>
+    struct sequence_base // this class is shared by sequence and expect
+      : nary_parser<Derived>
+    {
+        typedef Elements elements_type;
+        struct sequence_base_id;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::sequence_attribute_transform
+              , Iterator, qi::domain
+            >::type all_attributes;
+
+            // Now, build a fusion vector over the attributes. Note
+            // that build_fusion_vector 1) removes all unused attributes
+            // and 2) may return unused_type if all elements have
+            // unused_type(s).
+            typedef typename
+                traits::build_fusion_vector<all_attributes>::type
+            type_;
+
+            // Finally, strip single element vectors into its
+            // naked form: vector1<T> --> T
+            typedef typename
+                traits::strip_single_element_vector<type_>::type
+            type;
+        };
+
+        sequence_base(Elements const& elements_)
+          : elements(elements_) {}
+
+        // standard case. Attribute is a fusion tuple
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_, mpl::false_) const
+        {
+            Iterator iter = first;
+            typedef traits::attribute_not_unused<Context, Iterator> predicate;
+
+            // wrap the attribute in a tuple if it is not a tuple or if the 
+            // attribute of this sequence is a single element tuple
+            typedef typename attribute<Context, Iterator>::type_ attr_type_;
+            typename traits::wrap_if_not_tuple<Attribute
+              , typename mpl::and_<
+                    traits::one_element_sequence<attr_type_>
+                  , mpl::not_<traits::one_element_sequence<Attribute> >
+                >::type
+            >::type attr_local(attr_);
+
+            // return false if *any* of the parsers fail
+            if (spirit::any_if(elements, attr_local
+              , Derived::fail_function(iter, last, context, skipper), predicate()))
+                return false;
+            first = iter;
+            return true;
+        }
+
+        // Special case when Attribute is an stl container
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_, mpl::true_) const
+        {
+            // ensure the attribute is actually a container type
+            traits::make_container(attr_);
+
+            Iterator iter = first;
+            // return false if *any* of the parsers fail
+            if (fusion::any(elements
+              , detail::make_sequence_pass_container(
+                    Derived::fail_function(iter, last, context, skipper), attr_))
+                )
+                return false;
+            first = iter;
+            return true;
+        }
+
+        // main parse function. Dispatches to parse_impl depending
+        // on the Attribute type.
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return parse_impl(first, last, context, skipper, attr_
+              , traits::is_container<Attribute>());
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result(this->derived().id());
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequential_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/operator/sequential_or.hpp
new file mode 100644 (file)
index 0000000..a4c9c0c
--- /dev/null
@@ -0,0 +1,127 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENTIAL_OR_MARCH_12_2007_1130PM)
+#define SPIRIT_SEQUENTIAL_OR_MARCH_12_2007_1130PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/pass_function.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/support/algorithm/any_if_ns.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/for_each.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::logical_or> // enables ||
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::logical_or> // flattens ||
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Elements>
+    struct sequential_or : nary_parser<sequential_or<Elements> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple,
+            // wrapping each element in a boost::optional
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::sequential_or_attribute_transform
+              , Iterator, qi::domain
+            >::type all_attributes;
+
+            // Now, build a fusion vector over the attributes. Note
+            // that build_fusion_vector 1) removes all unused attributes
+            // and 2) may return unused_type if all elements have
+            // unused_type(s).
+            typedef typename
+                traits::build_fusion_vector<all_attributes>::type
+            type;
+        };
+
+        sequential_or(Elements const& elements_)
+          : elements(elements_) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef traits::attribute_not_unused<Context, Iterator> predicate;
+            detail::pass_function<Iterator, Context, Skipper>
+                f(first, last, context, skipper);
+
+            // wrap the attribute in a tuple if it is not a tuple
+            typename traits::wrap_if_not_tuple<Attribute>::type attr_local(attr_);
+
+            // return true if *any* of the parsers succeed
+            // (we use the non-short-circuiting version: any_if_ns
+            // to force all elements to be tested)
+            return spirit::any_if_ns(elements, attr_local, f, predicate());
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("sequential-or");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+
+        Elements elements;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers>
+    struct make_composite<proto::tag::logical_or, Elements, Modifiers>
+      : make_nary_composite<Elements, sequential_or>
+    {};
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // We specialize this for sequential_or (see support/attributes.hpp).
+    // For sequential_or, we only wrap the attribute in a tuple IFF
+    // it is not already a fusion tuple.
+    template <typename Elements, typename Attribute>
+    struct pass_attribute<qi::sequential_or<Elements>, Attribute>
+      : wrap_if_not_tuple<Attribute> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements>
+    struct has_semantic_action<qi::sequential_or<Elements> >
+      : nary_has_semantic_action<Elements> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::sequential_or<Elements>, Attribute, Context
+      , Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/parse.hpp
new file mode 100644 (file)
index 0000000..261df75
--- /dev/null
@@ -0,0 +1,215 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSE_APRIL_16_2006_0442PM)
+#define BOOST_SPIRIT_PARSE_APRIL_16_2006_0442PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/context.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/qi/detail/parse.hpp>
+#include <boost/concept_check.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::parse_impl<Expr>::call(first, last, expr);
+    }
+
+    template <typename Iterator, typename Expr>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr)
+    {
+        Iterator first = first_;
+        return qi::parse(first, last, expr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct make_context
+        {
+            typedef context<fusion::cons<T&>, locals<> > type;
+        };
+
+        template <>
+        struct make_context<unused_type>
+        {
+            typedef unused_type type;
+        };
+    }
+
+    template <typename Iterator, typename Expr, typename Attr>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Attr& attr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        typename detail::make_context<Attr>::type context(attr);
+        return compile<qi::domain>(expr).parse(first, last, context, unused, attr);
+    }
+
+    template <typename Iterator, typename Expr, typename Attr>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return qi::parse(first, last, expr, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        return detail::phrase_parse_impl<Expr>::call(
+            first, last, expr, skipper, post_skip);
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        Iterator first = first_;
+        return qi::phrase_parse(first, last, expr, skipper, post_skip);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , Attr& attr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typename detail::make_context<Attr>::type context(attr);
+        if (!compile<qi::domain>(expr).parse(
+                first, last, context, skipper_, attr))
+            return false;
+
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(first, last, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return qi::phrase_parse(first, last, expr, skipper, post_skip, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , Attr& attr)
+    {
+        return qi::phrase_parse(first, last, expr, skipper, skip_flag::postskip, attr);
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper, typename Attr>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , Attr& attr)
+    {
+        Iterator first = first_;
+        return qi::phrase_parse(first, last, expr, skipper, skip_flag::postskip, attr);
+    }
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/parse_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/parse_attr.hpp
new file mode 100644 (file)
index 0000000..6db3300
--- /dev/null
@@ -0,0 +1,177 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2009 Carl Barron
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_PARSE_ATTR_APRIL_24_2009_1043AM)
+#define BOOST_SPIRIT_PARSE_ATTR_APRIL_24_2009_1043AM
+
+#include <boost/spirit/home/qi/parse.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/qi/parse_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE(z, n, A) BOOST_PP_CAT(A, n)&
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got an 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type lattr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return compile<qi::domain>(expr).parse(first, last, unused, unused, lattr);
+    }
+
+    template <typename Iterator, typename Expr
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        Iterator first = first_;
+        return qi::parse(first, last, expr, BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got an 
+        // compilation error here, then you are using an input_iterator while
+        // calling this function, you need to supply at least a 
+        // forward_iterator instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef
+            typename result_of::compile<qi::domain, Skipper>::type
+        skipper_type;
+        skipper_type const skipper_ = compile<qi::domain>(skipper);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type lattr (BOOST_PP_ENUM_PARAMS(N, attr));
+        if (!compile<qi::domain>(expr).parse(
+                first, last, unused, skipper_, lattr))
+            return false;
+
+        if (post_skip == skip_flag::postskip)
+            qi::skip_over(first, last, skipper_);
+        return true;
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        Iterator first = first_;
+        return qi::phrase_parse(first, last, expr, skipper, post_skip
+          , BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        return qi::phrase_parse(first, last, expr, skipper, skip_flag::postskip
+          , BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+
+    template <typename Iterator, typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Expr const& expr
+      , Skipper const& skipper
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        Iterator first = first_;
+        return qi::phrase_parse(first, last, expr, skipper, skip_flag::postskip
+          , BOOST_PP_ENUM_PARAMS(N, attr));
+    }
+}}}
+
+#undef BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/parser.hpp
new file mode 100644 (file)
index 0000000..ffd8bc9
--- /dev/null
@@ -0,0 +1,140 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM)
+#define BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+
+    //[parser_base_parser
+    template <typename Derived>
+    struct parser
+    {
+        struct parser_id;
+        typedef Derived derived_type;
+        typedef qi::domain domain;
+
+        // Requirement: p.parse(f, l, context, skip, attr) -> bool
+        //
+        //  p:          a parser
+        //  f, l:       first/last iterator pair
+        //  context:    enclosing rule context (can be unused_type)
+        //  skip:       skipper (can be unused_type)
+        //  attr:       attribute (can be unused_type)
+
+        // Requirement: p.what(context) -> info
+        //
+        //  p:          a parser
+        //  context:    enclosing rule context (can be unused_type)
+
+        // Requirement: P::template attribute<Ctx, Iter>::type
+        //
+        //  P:          a parser type
+        //  Ctx:        A context type (can be unused_type)
+        //  Iter:       An iterator type (can be unused_type)
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+    //]
+
+    template <typename Derived>
+    struct primitive_parser : parser<Derived>
+    {
+        struct primitive_parser_id;
+    };
+
+    template <typename Derived>
+    struct nary_parser : parser<Derived>
+    {
+        struct nary_parser_id;
+
+        // Requirement: p.elements -> fusion sequence
+        //
+        // p:   a composite parser
+
+        // Requirement: P::elements_type -> fusion sequence
+        //
+        // P:   a composite parser type
+    };
+
+    template <typename Derived>
+    struct unary_parser : parser<Derived>
+    {
+        struct unary_parser_id;
+
+        // Requirement: p.subject -> subject parser
+        //
+        // p:   a unary parser
+
+        // Requirement: P::subject_type -> subject parser type
+        //
+        // P:   a unary parser type
+    };
+
+    template <typename Derived>
+    struct binary_parser : parser<Derived>
+    {
+        struct binary_parser_id;
+
+        // Requirement: p.left -> left parser
+        //
+        // p:   a binary parser
+
+        // Requirement: P::left_type -> left parser type
+        //
+        // P:   a binary parser type
+
+        // Requirement: p.right -> right parser
+        //
+        // p:   a binary parser
+
+        // Requirement: P::right_type -> right parser type
+        //
+        // P:   a binary parser type
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits // classification
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(binary_parser_id)
+    }
+
+    // parser type identification
+    template <typename T>
+    struct is_parser : detail::has_parser_id<T> {};
+
+    template <typename T>
+    struct is_primitive_parser : detail::has_primitive_parser_id<T> {};
+
+    template <typename T>
+    struct is_nary_parser : detail::has_nary_parser_id<T> {};
+
+    template <typename T>
+    struct is_unary_parser : detail::has_unary_parser_id<T> {};
+
+    template <typename T>
+    struct is_binary_parser : detail::has_binary_parser_id<T> {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/reference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/reference.hpp
new file mode 100644 (file)
index 0000000..f1f5c67
--- /dev/null
@@ -0,0 +1,69 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_REFERENCE_OCTOBER_31_2008_1218AM)
+#define BOOST_SPIRIT_REFERENCE_OCTOBER_31_2008_1218AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // reference is a parser that references another parser (its Subject)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct reference : parser<reference<Subject> >
+    {
+        typedef Subject subject_type;
+
+        reference(Subject& subject)
+          : ref(subject) {}
+
+        template <typename Context, typename Iterator>
+        struct attribute : Subject::template attribute<Context, Iterator> {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            return ref.get().parse(first, last, context, skipper, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // the reference is transparent (does not add any info)
+            return ref.get().what(context);
+        }
+
+        boost::reference_wrapper<Subject> ref;
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+      , typename Iterator>
+    struct handles_container<qi::reference<Subject>, Attribute, Context
+      , Iterator>
+      : handles_container<typename remove_const<Subject>::type
+        , Attribute, Context, Iterator> 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_flag.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_flag.hpp
new file mode 100644 (file)
index 0000000..28fd856
--- /dev/null
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIP_FLAG_DEC_02_2009_0412PM)
+#define BOOST_SPIRIT_SKIP_FLAG_DEC_02_2009_0412PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace qi 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    BOOST_SCOPED_ENUM_START(skip_flag) 
+    { 
+        postskip,           // force post-skipping in phrase_parse()
+        dont_postskip       // inhibit post-skipping in phrase_parse()
+    };
+    BOOST_SCOPED_ENUM_END
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_over.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/skip_over.hpp
new file mode 100644 (file)
index 0000000..f46b304
--- /dev/null
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIP_APRIL_16_2006_0625PM)
+#define BOOST_SPIRIT_SKIP_APRIL_16_2006_0625PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Move the /first/ iterator to the first non-matching position
+    // given a skip-parser. The function is a no-op if unused_type is
+    // passed as the skip-parser.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename T>
+    inline void skip_over(Iterator& first, Iterator const& last, T const& skipper)
+    {
+        while (first != last && skipper.parse(first, last, unused, unused, unused))
+            /***/;
+    }
+
+    template <typename Iterator>
+    inline void skip_over(Iterator&, Iterator const&, unused_type)
+    {
+    }
+
+    template <typename Iterator, typename Skipper>
+    inline void skip_over(Iterator&, Iterator const&
+      , detail::unused_skipper<Skipper> const&)
+    {
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream.hpp
new file mode 100644 (file)
index 0000000..59bc7d4
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !defined(BOOST_SPIRIT_STREAM_MAY_05_2007_1227PM)
+#define BOOST_SPIRIT_STREAM_MAY_05_2007_1227PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/iterator_source.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/iterator_source.hpp
new file mode 100644 (file)
index 0000000..af53366
--- /dev/null
@@ -0,0 +1,80 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_ISTREAM_MAY_05_2007_0110PM)
+#define BOOST_SPIRIT_ITERATOR_ISTREAM_MAY_05_2007_0110PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/iostreams/stream.hpp>
+#include <boost/detail/iterator.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator>
+    struct iterator_source
+    {
+        typedef typename
+            boost::detail::iterator_traits<Iterator>::value_type
+        char_type;
+        typedef boost::iostreams::seekable_device_tag category;
+
+        iterator_source (Iterator const& first_, Iterator const& last_)
+          : first(first_), last(last_), pos(0)
+        {}
+
+        // Read up to n characters from the input sequence into the buffer s,
+        // returning the number of characters read, or -1 to indicate
+        // end-of-sequence.
+        std::streamsize read (char_type* s, std::streamsize n)
+        {
+            if (first == last)
+                return -1;
+
+            std::streamsize bytes_read = 0;
+            while (n--) {
+                *s = *first;
+                ++s; ++bytes_read;
+                if (++first == last)
+                    break;
+            }
+
+            pos += bytes_read;
+            return bytes_read;
+        }
+
+        // Write is implemented only to satisfy the requirements of a
+        // boost::iostreams::seekable_device. We need to have see support to
+        // be able to figure out how many characters have been actually
+        // consumed by the stream.
+        std::streamsize write(const char_type*, std::streamsize)
+        {
+            BOOST_ASSERT(false);    // not supported
+            return -1;
+        }
+
+        std::streampos seek(boost::iostreams::stream_offset, std::ios_base::seekdir way)
+        {
+            BOOST_ASSERT(way == std::ios_base::cur);    // only support queries
+            return pos;                              // return current position
+        }
+
+        Iterator first;
+        Iterator const& last;
+        std::streamsize pos;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        iterator_source& operator= (iterator_source const&);
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip.hpp
new file mode 100644 (file)
index 0000000..e74bdcf
--- /dev/null
@@ -0,0 +1,230 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1203PM)
+#define BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1203PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/support/iterators/istream_iterator.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <iterator>
+#include <string>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr
+      , typename CopyExpr = mpl::false_, typename CopyAttr = mpl::false_
+      , typename Skipper = unused_type, typename Attribute = unused_type const>
+    struct match_manip
+    {
+        // This assertion makes sure we don't hit the only code path which is 
+        // not implemented (because it isn't needed), where both, the 
+        // expression and the attribute need to be held as a copy.
+        BOOST_SPIRIT_ASSERT_MSG(!CopyExpr::value || !CopyAttr::value
+            , error_invalid_should_not_happen, ());
+
+        match_manip(Expr const& xpr, Skipper const& s, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(skip_flag::postskip) {}
+
+        match_manip(Expr const& xpr, Skipper const& s
+            , BOOST_SCOPED_ENUM(skip_flag) ps, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(ps) {}
+
+        Expr const& expr;
+        Skipper const& skipper;
+        Attribute& attr;
+        BOOST_SCOPED_ENUM(skip_flag) const post_skip;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        match_manip& operator= (match_manip const&);
+    };
+
+    template <typename Expr, typename Skipper, typename Attribute>
+    struct match_manip<Expr, mpl::false_, mpl::true_, Skipper, Attribute>
+    {
+        match_manip(Expr const& xpr, Skipper const& s, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(skip_flag::postskip) {}
+
+        match_manip(Expr const& xpr, Skipper const& s
+            , BOOST_SCOPED_ENUM(skip_flag) ps, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(ps) {}
+
+        Expr const& expr;
+        Skipper const& skipper;
+        Attribute attr;
+        BOOST_SCOPED_ENUM(skip_flag) const post_skip;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        match_manip& operator= (match_manip const&);
+    };
+
+    template <typename Expr, typename Skipper, typename Attribute>
+    struct match_manip<Expr, mpl::true_, mpl::false_, Skipper, Attribute>
+    {
+        match_manip(Expr const& xpr, Skipper const& s, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(skip_flag::postskip) {}
+
+        match_manip(Expr const& xpr, Skipper const& s
+            , BOOST_SCOPED_ENUM(skip_flag) ps, Attribute& a)
+          : expr(xpr), skipper(s), attr(a), post_skip(ps) {}
+
+        Expr expr;
+        Skipper const& skipper;
+        Attribute& attr;
+        BOOST_SCOPED_ENUM(skip_flag) const post_skip;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        match_manip& operator= (match_manip const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Enable = void>
+    struct match
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_match_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr>
+    struct match<Expr
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        typedef match_manip<Expr> type;
+
+        static type call(Expr const& expr)
+        {
+            return type(expr, unused, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Skipper, typename Enable = void>
+    struct phrase_match
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        // Did you intend to use the auto_ facilities while forgetting to 
+        // #include <boost/spirit/include/qi_match_auto.hpp>?
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+    };
+
+    template <typename Expr, typename Skipper>
+    struct phrase_match<Expr, Skipper
+      , typename enable_if<traits::matches<qi::domain, Expr> >::type>
+    {
+        typedef match_manip<Expr, mpl::false_, mpl::false_, Skipper> type;
+
+        static type call(
+            Expr const& expr
+          , Skipper const& skipper
+          , BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the delimiter is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+            return type(expr, skipper, post_skip, unused);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr>
+    inline std::basic_istream<Char, Traits> &
+    operator>>(std::basic_istream<Char, Traits> &is,
+        match_manip<Expr, CopyExpr, CopyAttr> const& fm)
+    {
+        typedef spirit::basic_istream_iterator<Char, Traits> input_iterator;
+
+        input_iterator f(is);
+        input_iterator l;
+        if (!qi::parse(f, l, fm.expr))
+        {
+            is.setstate(std::ios_base::failbit);
+        }
+        return is;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr
+      , typename Attribute>
+    inline std::basic_istream<Char, Traits> &
+    operator>>(std::basic_istream<Char, Traits> &is,
+        match_manip<Expr, CopyExpr, CopyAttr, unused_type, Attribute> const& fm)
+    {
+        typedef spirit::basic_istream_iterator<Char, Traits> input_iterator;
+
+        input_iterator f(is);
+        input_iterator l;
+        if (!qi::parse(f, l, fm.expr, fm.attr))
+        {
+            is.setstate(std::ios_base::failbit);
+        }
+        return is;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr
+      , typename Skipper>
+    inline std::basic_istream<Char, Traits> &
+    operator>>(std::basic_istream<Char, Traits> &is,
+        match_manip<Expr, CopyExpr, CopyAttr, Skipper> const& fm)
+    {
+        typedef spirit::basic_istream_iterator<Char, Traits> input_iterator;
+
+        input_iterator f(is);
+        input_iterator l;
+        if (!qi::phrase_parse(
+                f, l, fm.expr, fm.skipper, fm.post_skip))
+        {
+            is.setstate(std::ios_base::failbit);
+        }
+        return is;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Expr
+      , typename CopyExpr, typename CopyAttr
+      , typename Attribute, typename Skipper
+    >
+    inline std::basic_istream<Char, Traits> &
+    operator>>(
+        std::basic_istream<Char, Traits> &is,
+        match_manip<Expr, CopyExpr, CopyAttr, Attribute, Skipper> const& fm)
+    {
+        typedef spirit::basic_istream_iterator<Char, Traits> input_iterator;
+
+        input_iterator f(is);
+        input_iterator l;
+        if (!qi::phrase_parse(
+                f, l, fm.expr, fm.skipper, fm.post_skip, fm.attr))
+        {
+            is.setstate(std::ios_base::failbit);
+        }
+        return is;
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/detail/match_manip_auto.hpp
new file mode 100644 (file)
index 0000000..f50eda8
--- /dev/null
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_MANIP_AUTO_DEC_02_2009_0813PM)
+#define BOOST_SPIRIT_MATCH_MANIP_AUTO_DEC_02_2009_0813PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream/detail/match_manip.hpp>
+#include <boost/spirit/home/qi/auto/create_parser.hpp>
+#include <boost/utility/enable_if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    struct match<Expr
+      , typename enable_if<traits::meta_create_exists<qi::domain, Expr> >::type>
+    {
+        typedef typename result_of::create_parser<Expr>::type expr_type;
+        typedef match_manip<
+            expr_type, mpl::true_, mpl::false_, unused_type, Expr
+        > type;
+
+        static type call(Expr const& expr)
+        {
+            return type(create_parser<Expr>(), unused, const_cast<Expr&>(expr));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Skipper>
+    struct phrase_match<Expr, Skipper
+      , typename enable_if<traits::meta_create_exists<qi::domain, Expr> >::type>
+    {
+        typedef typename result_of::create_parser<Expr>::type expr_type;
+        typedef match_manip<
+            expr_type, mpl::true_, mpl::false_, Skipper, Expr
+        > type;
+
+        static type call(
+            Expr const& expr
+          , Skipper const& skipper
+          , BOOST_SCOPED_ENUM(skip_flag) post_skip)
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the delimiter is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+            return type(create_parser<Expr>(), skipper, post_skip
+              , const_cast<Expr&>(expr));
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip.hpp
new file mode 100644 (file)
index 0000000..83c7070
--- /dev/null
@@ -0,0 +1,123 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1202PM)
+#define BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1202PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/stream/detail/match_manip.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr>
+    inline typename detail::match<Expr>::type
+    match(
+        Expr const& expr)
+    {
+        return detail::match<Expr>::call(expr);
+    }
+
+    template <typename Expr, typename Attribute>
+    inline detail::match_manip<
+        Expr, mpl::false_, mpl::false_, unused_type, Attribute
+    >
+    match(
+        Expr const& xpr
+      , Attribute& p)
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        return match_manip<Expr, mpl::false_, mpl::false_, unused_type, Attribute>(
+            xpr, unused, p);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Skipper>
+    inline typename detail::phrase_match<Expr, Skipper>::type 
+    phrase_match(
+        Expr const& expr
+      , Skipper const& s
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip)
+    {
+        return detail::phrase_match<Expr, Skipper>::call(expr, s, post_skip);
+    }
+
+    template <typename Expr, typename Skipper, typename Attribute>
+    inline detail::match_manip<
+        Expr, mpl::false_, mpl::false_, Skipper, Attribute
+    >
+    phrase_match(
+        Expr const& xpr
+      , Skipper const& s
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , Attribute& p)
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+        return match_manip<Expr, mpl::false_, mpl::false_, Skipper, Attribute>(
+            xpr, s, post_skip, p);
+    }
+
+    template <typename Expr, typename Skipper, typename Attribute>
+    inline detail::match_manip<
+        Expr, mpl::false_, mpl::false_, Skipper, Attribute
+    >
+    phrase_match(
+        Expr const& xpr
+      , Skipper const& s
+      , Attribute& p)
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+        return match_manip<Expr, mpl::false_, mpl::false_, Skipper, Attribute>(
+            xpr, s, p);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Char, typename Traits, typename Derived>
+    inline std::basic_istream<Char, Traits>&
+    operator>>(std::basic_istream<Char, Traits>& is, parser<Derived> const& p)
+    {
+        typedef spirit::basic_istream_iterator<Char, Traits> input_iterator;
+
+        input_iterator f(is);
+        input_iterator l;
+        if (!p.derived().parse(f, l, unused, unused, unused))
+        {
+            is.setstate(std::ios_base::failbit);
+        }
+        return is;
+    }
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/match_manip_attr.hpp
new file mode 100644 (file)
index 0000000..4f5cd0f
--- /dev/null
@@ -0,0 +1,133 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#if !defined(BOOST_SPIRIT_MATCH_MANIP_ATTR_MAY_05_2007_1202PM)
+#define BOOST_SPIRIT_MATCH_MANIP_ATTR_MAY_05_2007_1202PM
+
+#include <boost/spirit/home/qi/stream/match_manip.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#define BOOST_PP_FILENAME_1                                                   \
+    <boost/spirit/home/qi/stream/match_manip_attr.hpp>
+#define BOOST_PP_ITERATION_LIMITS (2, SPIRIT_ARGUMENTS_LIMIT)
+#include BOOST_PP_ITERATE()
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+#else // defined(BOOST_PP_IS_ITERATING)
+
+#define N BOOST_PP_ITERATION()
+#define BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE(z, n, A) BOOST_PP_CAT(A, n) &
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::match_manip<Expr, mpl::false_, mpl::true_, unused_type
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > > 
+    match(
+        Expr const& xpr
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then the expression (expr) is not a valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return match_manip<Expr, mpl::false_, mpl::true_, unused_type, vector_type>(
+            xpr, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::match_manip<Expr, mpl::false_, mpl::true_, Skipper
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > > 
+    phrase_match(
+        Expr const& xpr
+      , Skipper const& s
+      , BOOST_SCOPED_ENUM(skip_flag) post_skip
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return match_manip<Expr, mpl::false_, mpl::true_, Skipper, vector_type>(
+            xpr, s, post_skip, attr);
+    }
+
+    template <typename Expr, typename Skipper
+      , BOOST_PP_ENUM_PARAMS(N, typename A)>
+    inline detail::match_manip<Expr, mpl::false_, mpl::true_, Skipper
+      , fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > > 
+    phrase_match(
+        Expr const& xpr
+      , Skipper const& s
+      , BOOST_PP_ENUM_BINARY_PARAMS(N, A, & attr))
+    {
+        using qi::detail::match_manip;
+
+        // Report invalid expression error as early as possible.
+        // If you got an error_invalid_expression error message here,
+        // then either the expression (expr) or skipper is not a valid
+        // spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper);
+
+        typedef fusion::vector<
+            BOOST_PP_ENUM(N, BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE, A)
+        > vector_type;
+
+        vector_type attr (BOOST_PP_ENUM_PARAMS(N, attr));
+        return match_manip<Expr, mpl::false_, mpl::true_, Skipper, vector_type>(
+            xpr, s, attr);
+    }
+
+}}}
+
+#undef BOOST_SPIRIT_QI_ATTRIBUTE_REFERENCE
+#undef N
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/stream/stream.hpp
new file mode 100644 (file)
index 0000000..83b417d
--- /dev/null
@@ -0,0 +1,118 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_STREAM_MAY_05_2007_1228PM)
+#define BOOST_SPIRIT_STREAM_MAY_05_2007_1228PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/detail/string_parse.hpp>
+#include <boost/spirit/home/qi/stream/detail/match_manip.hpp>
+#include <boost/spirit/home/qi/stream/detail/iterator_source.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+
+#include <iosfwd>
+#include <sstream>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_terminal<qi::domain, tag::stream> // enables stream
+      : mpl::true_ {};
+
+    template <>
+    struct use_terminal<qi::domain, tag::wstream> // enables wstream
+      : mpl::true_ {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::stream;
+    using spirit::wstream;
+#endif
+    using spirit::stream_type;
+    using spirit::wstream_type;
+
+    template <typename Char = char, typename T = spirit::basic_hold_any<char> >
+    struct stream_parser
+      : primitive_parser<stream_parser<Char, T> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef T type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            typedef qi::detail::iterator_source<Iterator> source_device;
+            typedef boost::iostreams::stream<source_device> instream;
+
+            qi::skip_over(first, last, skipper);
+
+            instream in(first, last);           // copies 'first'
+            in >> attr_;                        // use existing operator>>()
+
+            // advance the iterator if everything is ok
+            if (in) {
+                if (!in.eof()) {
+                    std::streamsize pos = in.tellg();
+                    std::advance(first, pos);
+                } else {
+                    first = last;
+                }
+                return true;
+            }
+
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("stream");
+        }
+    };
+
+    template <typename T, typename Char = char>
+    struct typed_stream
+      : proto::terminal<stream_parser<Char, T> >::type
+    {
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    struct make_stream
+    {
+        typedef stream_parser<Char> result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+    template <typename Modifiers>
+    struct make_primitive<tag::stream, Modifiers> : make_stream<char> {};
+
+    template <typename Modifiers>
+    struct make_primitive<tag::wstream, Modifiers> : make_stream<wchar_t> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string.hpp
new file mode 100644 (file)
index 0000000..70de51b
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_STRING_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_STRING_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string/lit.hpp>
+#include <boost/spirit/home/qi/string/symbols.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/detail/tst.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/detail/tst.hpp
new file mode 100644 (file)
index 0000000..168e4cf
--- /dev/null
@@ -0,0 +1,213 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TST_MARCH_09_2007_0905AM)
+#define BOOST_SPIRIT_TST_MARCH_09_2007_0905AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/call_traits.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/foreach.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace qi { namespace detail
+{
+    // This file contains low level TST routines, not for
+    // public consumption.
+
+    template <typename Char, typename T>
+    struct tst_node
+    {
+        tst_node(Char id_)
+          : id(id_), data(0), lt(0), eq(0), gt(0)
+        {
+        }
+
+        template <typename Alloc>
+        static void
+        destruct_node(tst_node* p, Alloc* alloc)
+        {
+            if (p)
+            {
+                if (p->data)
+                    alloc->delete_data(p->data);
+                destruct_node(p->lt, alloc);
+                destruct_node(p->eq, alloc);
+                destruct_node(p->gt, alloc);
+                alloc->delete_node(p);
+            }
+        }
+
+        template <typename Alloc>
+        static tst_node*
+        clone_node(tst_node* p, Alloc* alloc)
+        {
+            if (p)
+            {
+                tst_node* clone = alloc->new_node(p->id);
+                if (p->data)
+                    clone->data = alloc->new_data(*p->data);
+                clone->lt = clone_node(p->lt, alloc);
+                clone->eq = clone_node(p->eq, alloc);
+                clone->gt = clone_node(p->gt, alloc);
+                return clone;
+            }
+            return 0;
+        }
+
+        template <typename Iterator, typename Filter>
+        static T*
+        find(tst_node* start, Iterator& first, Iterator last, Filter filter)
+        {
+            if (first == last)
+                return 0;
+
+            Iterator i = first;
+            Iterator latest = first;
+            tst_node* p = start;
+            T* found = 0;
+
+            while (p && i != last)
+            {
+                typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                c = filter(*i); // filter only the input
+
+                if (c == p->id)
+                {
+                    if (p->data)
+                    {
+                        found = p->data;
+                        latest = i;
+                    }
+                    p = p->eq;
+                    i++;
+                }
+                else if (c < p->id)
+                {
+                    p = p->lt;
+                }
+                else
+                {
+                    p = p->gt;
+                }
+            }
+
+            if (found)
+                first = ++latest; // one past the last matching char
+            return found;
+        }
+
+        template <typename Iterator, typename Alloc>
+        static T*
+        add(
+            tst_node*& start
+          , Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val
+          , Alloc* alloc)
+        {
+            if (first == last)
+                return 0;
+
+            tst_node** pp = &start;
+            for(;;)
+            {
+                typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                c = *first;
+
+                if (*pp == 0)
+                    *pp = alloc->new_node(c);
+                tst_node* p = *pp;
+
+                if (c == p->id)
+                {
+                    if (++first == last)
+                    {
+                        if (p->data == 0)
+                            p->data = alloc->new_data(val);
+                        return p->data;
+                    }
+                    pp = &p->eq;
+                }
+                else if (c < p->id)
+                {
+                    pp = &p->lt;
+                }
+                else
+                {
+                    pp = &p->gt;
+                }
+            }
+        }
+
+        template <typename Iterator, typename Alloc>
+        static void
+        remove(tst_node*& p, Iterator first, Iterator last, Alloc* alloc)
+        {
+            if (p == 0 || first == last)
+                return;
+
+            typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            c = *first;
+
+            if (c == p->id)
+            {
+                if (++first == last)
+                {
+                    if (p->data)
+                    {
+                        alloc->delete_data(p->data);
+                        p->data = 0;
+                    }
+                }
+                remove(p->eq, first, last, alloc);
+            }
+            else if (c < p->id)
+            {
+                remove(p->lt, first, last, alloc);
+            }
+            else
+            {
+                remove(p->gt, first, last, alloc);
+            }
+
+            if (p->data == 0 && p->lt == 0 && p->eq == 0 && p->gt == 0)
+            {
+                alloc->delete_node(p);
+                p = 0;
+            }
+        }
+
+        template <typename F>
+        static void
+        for_each(tst_node* p, std::basic_string<Char> prefix, F f)
+        {
+            if (p)
+            {
+                for_each(p->lt, prefix, f);
+                std::basic_string<Char> s = prefix + p->id;
+                for_each(p->eq, s, f);
+                if (p->data)
+                    f(s, *p->data);
+                for_each(p->gt, prefix, f);
+            }
+        }
+
+        Char id;        // the node's identity character
+        T* data;        // optional data
+        tst_node* lt;   // left pointer
+        tst_node* eq;   // middle pointer
+        tst_node* gt;   // right pointer
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/lit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/lit.hpp
new file mode 100644 (file)
index 0000000..1e16361
--- /dev/null
@@ -0,0 +1,312 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_LIT_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_LIT_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/detail/string_parse.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/detail/enable_lit.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <string>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct use_terminal<qi::domain, T
+      , typename enable_if<traits::is_string<T> >::type> // enables strings
+      : mpl::true_ {};
+
+    template <typename CharEncoding, typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<
+            tag::char_code<tag::string, CharEncoding>   // enables string(str)
+          , fusion::vector1<A0> >
+    > : traits::is_string<A0> {};
+
+    template <typename CharEncoding>                    // enables string(f)
+    struct use_lazy_terminal<
+        qi::domain
+      , tag::char_code<tag::string, CharEncoding>
+      , 1 /*arity*/
+    > : mpl::true_ {};
+
+    // enables lit(...)
+    template <typename A0>
+    struct use_terminal<qi::domain
+          , terminal_ex<tag::lit, fusion::vector1<A0> >
+          , typename enable_if<traits::is_string<A0> >::type>
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using spirit::lit;
+#endif
+    using spirit::lit_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parse for literal strings
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String, bool no_attribute>
+    struct literal_string
+      : primitive_parser<literal_string<String, no_attribute> >
+    {
+        typedef typename
+            remove_const<typename traits::char_type_of<String>::type>::type
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        literal_string(typename add_reference<String>::type str_)
+          : str(str_)
+        {}
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename mpl::if_c<
+                no_attribute, unused_type, string_type>::type
+            type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+            return detail::string_parse(str, first, last, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("literal-string", str);
+        }
+
+        String str;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        literal_string& operator= (literal_string const&);
+    };
+
+    template <typename String, bool no_attribute>
+    struct no_case_literal_string
+      : primitive_parser<no_case_literal_string<String, no_attribute> >
+    {
+        typedef typename
+            remove_const<typename traits::char_type_of<String>::type>::type
+        char_type;
+        typedef std::basic_string<char_type> string_type;
+
+        template <typename CharEncoding>
+        no_case_literal_string(char_type const* in, CharEncoding encoding)
+          : str_lo(in)
+          , str_hi(in)
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            encoding; // suppresses warning: C4100: 'encoding' : unreferenced formal parameter
+#endif
+            typename string_type::iterator loi = str_lo.begin();
+            typename string_type::iterator hii = str_hi.begin();
+
+            for (; loi != str_lo.end(); ++loi, ++hii, ++in)
+            {
+                typedef typename CharEncoding::char_type encoded_char_type;
+
+                *loi = static_cast<char_type>(encoding.tolower(encoded_char_type(*loi)));
+                *hii = static_cast<char_type>(encoding.toupper(encoded_char_type(*hii)));
+            }
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename mpl::if_c<
+                no_attribute, unused_type, string_type>::type
+            type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+            return detail::string_parse(str_lo, str_hi, first, last, attr_);
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info("no-case-literal-string", str_lo);
+        }
+
+        string_type str_lo, str_hi;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Modifiers>
+    struct make_primitive<T, Modifiers
+      , typename enable_if<traits::is_string<T> >::type>
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+
+        typedef typename add_const<T>::type const_string;
+        typedef typename mpl::if_<
+            no_case
+          , no_case_literal_string<const_string, true>
+          , literal_string<const_string, true> >::type
+        result_type;
+
+        result_type operator()(
+            typename add_reference<const_string>::type str, unused_type) const
+        {
+            return op(str, no_case());
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::false_) const
+        {
+            return result_type(str);
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::true_) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+            return result_type(traits::get_c_string(str), encoding);
+        }
+    };
+
+    // lit("...")
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<tag::lit, fusion::vector1<A0> >
+      , Modifiers
+      , typename enable_if<traits::is_string<A0> >::type>
+    {
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+
+        typedef typename add_const<A0>::type const_string;
+        typedef typename mpl::if_<
+            no_case
+          , no_case_literal_string<const_string, true>
+          , literal_string<const_string, true> >::type
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return op(fusion::at_c<0>(term.args), no_case());
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::false_) const
+        {
+            return result_type(str);
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::true_) const
+        {
+            typedef typename traits::char_encoding_from_char<
+                typename traits::char_type_of<A0>::type>::type encoding_type;
+            typename spirit::detail::get_encoding<Modifiers,
+                encoding_type>::type encoding;
+            return result_type(traits::get_c_string(str), encoding);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // string("...")
+    template <typename CharEncoding, typename Modifiers, typename A0>
+    struct make_primitive<
+        terminal_ex<
+            tag::char_code<tag::string, CharEncoding>
+          , fusion::vector1<A0> >
+      , Modifiers>
+    {
+        typedef CharEncoding encoding;
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+
+        typedef typename add_const<A0>::type const_string;
+        typedef typename mpl::if_<
+            no_case
+          , no_case_literal_string<const_string, false>
+          , literal_string<const_string, false> >::type
+        result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return op(fusion::at_c<0>(term.args), no_case());
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::false_) const
+        {
+            return result_type(str);
+        }
+
+        template <typename String>
+        result_type op(String const& str, mpl::true_) const
+        {
+            return result_type(traits::get_c_string(str), encoding());
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String, bool no_attribute, typename Attribute
+      ,typename Context, typename Iterator>
+    struct handles_container<qi::literal_string<String, no_attribute>
+      , Attribute, Context, Iterator>
+      : mpl::true_ {};
+
+    template <typename String, bool no_attribute, typename Attribute
+      , typename Context, typename Iterator>
+    struct handles_container<qi::no_case_literal_string<String, no_attribute>
+      , Attribute, Context, Iterator>
+      : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/symbols.hpp
new file mode 100644 (file)
index 0000000..0816324
--- /dev/null
@@ -0,0 +1,431 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_MARCH_11_2007_1055AM)
+#define BOOST_SPIRIT_SYMBOLS_MARCH_11_2007_1055AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/string/tst.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/assign_to.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/range.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/shared_ptr.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <
+        typename Char = char
+      , typename T = unused_type
+      , typename Lookup = tst<Char, T>
+      , typename Filter = tst_pass_through>
+    struct symbols
+      : proto::extends<
+            typename proto::terminal<
+                reference<symbols<Char, T, Lookup, Filter> >
+            >::type
+          , symbols<Char, T, Lookup, Filter>
+        >
+      , primitive_parser<symbols<Char, T, Lookup, Filter> >
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef symbols<Char, T, Lookup, Filter> this_type;
+        typedef reference<this_type> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef value_type type;
+        };
+
+        symbols(std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+        }
+
+        symbols(symbols const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {
+        }
+
+        template <typename Filter_>
+        symbols(symbols<Char, T, Lookup, Filter_> const& syms)
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {
+        }
+
+        template <typename Symbols>
+        symbols(Symbols const& syms, std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            while (si != boost::end(syms))
+                add(*si++);
+        }
+
+        template <typename Symbols, typename Data>
+        symbols(Symbols const& syms, Data const& data
+              , std::string const& name = "symbols")
+          : base_type(terminal::make(reference_(*this)))
+          , add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            typename range_const_iterator<Data>::type di = boost::begin(data);
+            while (si != boost::end(syms))
+                add(*si++, *di++);
+        }
+
+        symbols&
+        operator=(symbols const& rhs)
+        {
+            name_ = rhs.name_;
+            *lookup = *rhs.lookup;
+            return *this;
+        }
+
+        template <typename Filter_>
+        symbols&
+        operator=(symbols<Char, T, Lookup, Filter_> const& rhs)
+        {
+            name_ = rhs.name_;
+            *lookup = *rhs.lookup;
+            return *this;
+        }
+
+        void clear()
+        {
+            lookup->clear();
+        }
+
+        struct adder;
+        struct remover;
+
+        template <typename Str>
+        adder const&
+        operator=(Str const& str)
+        {
+            lookup->clear();
+            return add(str);
+        }
+
+        template <typename Str>
+        friend adder const&
+        operator+=(symbols& sym, Str const& str)
+        {
+            return sym.add(str);
+        }
+
+        template <typename Str>
+        friend remover const&
+        operator-=(symbols& sym, Str const& str)
+        {
+            return sym.remove(str);
+        }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+        // non-const version needed to suppress proto's += kicking in
+        template <typename Str>
+        friend adder const&
+        operator+=(symbols& sym, Str& str)
+        {
+            return sym.add(str);
+        }
+
+        // non-const version needed to suppress proto's -= kicking in
+        template <typename Str>
+        friend remover const&
+        operator-=(symbols& sym, Str& str)
+        {
+            return sym.remove(str);
+        }
+#else
+        // for rvalue references
+        template <typename Str>
+        friend adder const&
+        operator+=(symbols& sym, Str&& str)
+        {
+            return sym.add(str);
+        }
+
+        // for rvalue references
+        template <typename Str>
+        friend remover const&
+        operator-=(symbols& sym, Str&& str)
+        {
+            return sym.remove(str);
+        }
+#endif
+        template <typename F>
+        void for_each(F f) const
+        {
+            lookup->for_each(f);
+        }
+
+        template <typename Str>
+        value_type& at(Str const& str)
+        {
+            return *lookup->add(traits::get_begin<Char>(str)
+                , traits::get_end<Char>(str), T());
+        }
+
+        template <typename Iterator>
+        value_type* prefix_find(Iterator& first, Iterator const& last)
+        {
+            return lookup->find(first, last, Filter());
+        }
+
+        template <typename Iterator>
+        value_type const* prefix_find(Iterator& first, Iterator const& last) const
+        {
+            return lookup->find(first, last, Filter());
+        }
+
+        template <typename Str>
+        value_type* find(Str const& str)
+        {
+            return find_impl(traits::get_begin<Char>(str)
+                , traits::get_end<Char>(str));
+        }
+
+        template <typename Str>
+        value_type const* find(Str const& str) const
+        {
+            return find_impl(traits::get_begin<Char>(str)
+                , traits::get_end<Char>(str));
+        }
+
+private:
+        template <typename Iterator>
+        value_type* find_impl(Iterator begin, Iterator end)
+        {
+            value_type* r = lookup->find(begin, end, Filter());
+            return begin == end ? r : 0;
+        }
+
+        template <typename Iterator>
+        value_type const* find_impl(Iterator begin, Iterator end) const
+        {
+            value_type const* r = lookup->find(begin, end, Filter());
+            return begin == end ? r : 0;
+        }
+
+public:
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& /*context*/, Skipper const& skipper, Attribute& attr_) const
+        {
+            qi::skip_over(first, last, skipper);
+
+            if (value_type* val_ptr
+                = lookup->find(first, last, Filter()))
+            {
+                spirit::traits::assign_to(*val_ptr, attr_);
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        void name(std::string const &str)
+        {
+            name_ = str;
+        }
+        std::string const &name() const
+        {
+            return name_;
+        }
+
+        struct adder
+        {
+            template <typename, typename = unused_type, typename = unused_type>
+            struct result { typedef adder const& type; };
+
+            adder(symbols& sym_)
+              : sym(sym_)
+            {
+            }
+
+            template <typename Iterator>
+            adder const&
+            operator()(Iterator const& first, Iterator const& last, T const& val) const
+            {
+                sym.lookup->add(first, last, val);
+                return *this;
+            }
+
+            template <typename Str>
+            adder const&
+            operator()(Str const& s, T const& val = T()) const
+            {
+                sym.lookup->add(traits::get_begin<Char>(s)
+                  , traits::get_end<Char>(s), val);
+                return *this;
+            }
+
+            template <typename Str>
+            adder const&
+            operator,(Str const& s) const
+            {
+                sym.lookup->add(traits::get_begin<Char>(s)
+                  , traits::get_end<Char>(s), T());
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            adder& operator= (adder const&);
+        };
+
+        struct remover
+        {
+            template <typename, typename = unused_type, typename = unused_type>
+            struct result { typedef remover const& type; };
+
+            remover(symbols& sym_)
+              : sym(sym_)
+            {
+            }
+
+            template <typename Iterator>
+            remover const&
+            operator()(Iterator const& first, Iterator const& last) const
+            {
+                sym.lookup->remove(first, last);
+                return *this;
+            }
+
+            template <typename Str>
+            remover const&
+            operator()(Str const& s) const
+            {
+                sym.lookup->remove(traits::get_begin<Char>(s)
+                  , traits::get_end<Char>(s));
+                return *this;
+            }
+
+            template <typename Str>
+            remover const&
+            operator,(Str const& s) const
+            {
+                sym.lookup->remove(traits::get_begin<Char>(s)
+                  , traits::get_end<Char>(s));
+                return *this;
+            }
+
+            symbols& sym;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            remover& operator= (remover const&);
+        };
+
+        adder add;
+        remover remove;
+        shared_ptr<Lookup> lookup;
+        std::string name_;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename T, typename Lookup
+      , typename Filter, typename Modifiers>
+    struct make_primitive<reference<symbols<Char, T, Lookup, Filter> >, Modifiers>
+    {
+        template <typename CharEncoding>
+        struct no_case_filter
+        {
+            Char operator()(Char ch) const
+            {
+                return static_cast<Char>(CharEncoding::tolower(ch));
+            }
+        };
+
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+        typedef reference<symbols<Char, T, Lookup, Filter> > reference_;
+        typedef no_case_filter<
+            typename spirit::detail::get_encoding_with_case<
+                Modifiers
+              , char_encoding::standard
+              , no_case::value>::type>
+        nc_filter;
+
+        typedef typename mpl::if_<
+            no_case
+          , symbols<Char, T, Lookup, nc_filter>
+          , reference_>::type
+        result_type;
+
+        result_type operator()(reference_ ref, unused_type) const
+        {
+            return result_type(ref.ref.get());
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename T, typename Lookup, typename Filter
+      , typename Attr, typename Context, typename Iterator>
+    struct handles_container<qi::symbols<Char, T, Lookup, Filter>, Attr, Context, Iterator>
+      : traits::is_container<Attr> {};
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst.hpp
new file mode 100644 (file)
index 0000000..200894f
--- /dev/null
@@ -0,0 +1,137 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TST_JUNE_03_2007_1031AM)
+#define BOOST_SPIRIT_TST_JUNE_03_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string/detail/tst.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    struct tst_pass_through
+    {
+        template <typename Char>
+        Char operator()(Char ch) const
+        {
+            return ch;
+        }
+    };
+
+    template <typename Char, typename T>
+    struct tst
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef detail::tst_node<Char, T> node;
+
+        tst()
+          : root(0)
+        {
+        }
+
+        ~tst()
+        {
+            clear();
+        }
+
+        tst(tst const& rhs)
+          : root(0)
+        {
+            copy(rhs);
+        }
+
+        tst& operator=(tst const& rhs)
+        {
+            return assign(rhs);
+        }
+
+        template <typename Iterator, typename Filter>
+        T* find(Iterator& first, Iterator last, Filter filter) const
+        {
+            return node::find(root, first, last, filter);
+        }
+
+        template <typename Iterator>
+        T* find(Iterator& first, Iterator last) const
+        {
+            return find(first, last, tst_pass_through());
+        }
+
+        template <typename Iterator>
+        T* add(
+            Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val)
+        {
+            return node::add(root, first, last, val, this);
+        }
+
+        template <typename Iterator>
+        void remove(Iterator first, Iterator last)
+        {
+            node::remove(root, first, last, this);
+        }
+
+        void clear()
+        {
+            node::destruct_node(root, this);
+            root = 0;
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            node::for_each(root, std::basic_string<Char>(), f);
+        }
+
+    private:
+
+        friend struct detail::tst_node<Char, T>;
+
+        void copy(tst const& rhs)
+        {
+            root = node::clone_node(rhs.root, this);
+        }
+
+        tst& assign(tst const& rhs)
+        {
+            if (this != &rhs)
+            {
+                clear();
+                copy(rhs);
+            }
+            return *this;
+        }
+
+        node* root;
+
+        node* new_node(Char id)
+        {
+            return new node(id);
+        }
+
+        T* new_data(typename boost::call_traits<T>::param_type val)
+        {
+            return new T(val);
+        }
+
+        void delete_node(node* p)
+        {
+            delete p;
+        }
+
+        void delete_data(T* p)
+        {
+            delete p;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst_map.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/string/tst_map.hpp
new file mode 100644 (file)
index 0000000..a3208f2
--- /dev/null
@@ -0,0 +1,220 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TST_MAP_JUNE_03_2007_1143AM)
+#define BOOST_SPIRIT_TST_MAP_JUNE_03_2007_1143AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string/detail/tst.hpp>
+#include <boost/unordered_map.hpp>
+#include <boost/pool/object_pool.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    struct tst_pass_through; // declared in tst.hpp
+
+    template <typename Char, typename T>
+    struct tst_map
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef detail::tst_node<Char, T> node;
+
+        tst_map()
+        {
+        }
+
+        ~tst_map()
+        {
+            // Nothing to do here.
+            // The pools do the right thing for us
+        }
+
+        tst_map(tst_map const& rhs)
+        {
+            copy(rhs);
+        }
+
+        tst_map& operator=(tst_map const& rhs)
+        {
+            return assign(rhs);
+        }
+
+        template <typename Iterator, typename Filter>
+        T* find(Iterator& first, Iterator last, Filter filter) const
+        {
+            if (first != last)
+            {
+                Iterator save = first;
+                typename map_type::const_iterator
+                    i = map.find(filter(*first++));
+
+                if (i != map.end())
+                {
+                    if (T* p = node::find(i->second.root, first, last, filter))
+                    {
+                        return p;
+                    }
+                   
+                    if (i->second.data)
+                    {
+                        return i->second.data;
+                    }
+                }
+                first = save;
+            }
+            return 0;
+        }
+
+        template <typename Iterator>
+        T* find(Iterator& first, Iterator last) const
+        {
+            return find(first, last, tst_pass_through());
+        }
+
+        template <typename Iterator>
+        bool add(
+            Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val)
+        {
+            if (first != last)
+            {
+                map_data x = {0, 0};
+                std::pair<typename map_type::iterator, bool>
+                    r = map.insert(std::pair<Char, map_data>(*first++, x));
+
+                if (first != last)
+                {
+                    return node::add(r.first->second.root
+                      , first, last, val, this) ? true : false;
+                }
+                else
+                {
+                    if (r.first->second.data)
+                        return false;
+                    r.first->second.data = this->new_data(val);
+                }
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator>
+        void remove(Iterator first, Iterator last)
+        {
+            if (first != last)
+            {
+                typename map_type::iterator i = map.find(*first++);
+                if (i != map.end())
+                {
+                    if (first != last)
+                    {
+                        node::remove(i->second.root, first, last, this);
+                    }
+                    else if (i->second.data)
+                    {
+                        this->delete_data(i->second.data);
+                        i->second.data = 0;
+                    }
+                    if (i->second.data == 0 && i->second.root == 0)
+                    {
+                        map.erase(i);
+                    }
+                }
+            }
+        }
+
+        void clear()
+        {
+            BOOST_FOREACH(typename map_type::value_type& x, map)
+            {
+                node::destruct_node(x.second.root, this);
+                if (x.second.data)
+                    this->delete_data(x.second.data);
+            }
+            map.clear();
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            BOOST_FOREACH(typename map_type::value_type const& x, map)
+            {
+                std::basic_string<Char> s(1, x.first);
+                node::for_each(x.second.root, s, f);
+                if (x.second.data)
+                    f(s, *x.second.data);
+            }
+        }
+
+    private:
+
+        friend struct detail::tst_node<Char, T>;
+
+        struct map_data
+        {
+            node* root;
+            T* data;
+        };
+
+        typedef unordered_map<Char, map_data> map_type;
+
+        void copy(tst_map const& rhs)
+        {
+            BOOST_FOREACH(typename map_type::value_type const& x, rhs.map)
+            {
+                map_data xx = {node::clone_node(x.second.root, this), 0};
+                if (x.second.data)
+                    xx.data = data_pool.construct(*x.second.data);
+                map[x.first] = xx;
+            }
+        }
+
+        tst_map& assign(tst_map const& rhs)
+        {
+            if (this != &rhs)
+            {
+                BOOST_FOREACH(typename map_type::value_type& x, map)
+                {
+                    node::destruct_node(x.second.root, this);
+                }
+                map.clear();
+                copy(rhs);
+            }
+            return *this;
+        }
+
+        node* new_node(Char id)
+        {
+            return node_pool.construct(id);
+        }
+
+        T* new_data(typename boost::call_traits<T>::param_type val)
+        {
+            return data_pool.construct(val);
+        }
+
+        void delete_node(node* p)
+        {
+            node_pool.destroy(p);
+        }
+
+        void delete_data(T* p)
+        {
+            data_pool.destroy(p);
+        }
+
+        map_type map;
+        object_pool<node> node_pool;
+        object_pool<T> data_pool;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/qi/what.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/qi/what.hpp
new file mode 100644 (file)
index 0000000..ae26b7b
--- /dev/null
@@ -0,0 +1,33 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_WHAT_APRIL_21_2007_0732AM)
+#define BOOST_SPIRIT_WHAT_APRIL_21_2007_0732AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/assert.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Expr>
+    inline info what(Expr const& expr)
+    {
+        // Report invalid expression error as early as possible.
+        // If you got an error_expr_is_not_convertible_to_a_parser
+        // error message here, then the expression (expr) is not a
+        // valid spirit qi expression.
+        BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
+        return compile<qi::domain>(expr).what(unused);
+    }
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support.hpp
new file mode 100644 (file)
index 0000000..5c341fd
--- /dev/null
@@ -0,0 +1,34 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SUPPORT_SEPTEMBER_26_2008_0340AM)
+#define BOOST_SPIRIT_SUPPORT_SEPTEMBER_26_2008_0340AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include<boost/spirit/home/support/assert_msg.hpp>
+#include<boost/spirit/home/support/action_dispatch.hpp>
+#include<boost/spirit/home/support/argument.hpp>
+#include<boost/spirit/home/support/attributes.hpp>
+#include<boost/spirit/home/support/char_class.hpp>
+#include<boost/spirit/home/support/common_terminals.hpp>
+#include<boost/spirit/home/support/container.hpp>
+#include<boost/spirit/home/support/context.hpp>
+#include<boost/spirit/home/support/info.hpp>
+#include<boost/spirit/home/support/lazy.hpp>
+#include<boost/spirit/home/support/make_component.hpp>
+#include<boost/spirit/home/support/meta_compiler.hpp>
+#include<boost/spirit/home/support/modify.hpp>
+#include<boost/spirit/home/support/sequence_base_id.hpp>
+#include<boost/spirit/home/support/string_traits.hpp>
+#include<boost/spirit/home/support/terminal.hpp>
+#include<boost/spirit/home/support/unused.hpp>
+#include<boost/spirit/home/support/utf8.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/action_dispatch.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/action_dispatch.hpp
new file mode 100644 (file)
index 0000000..c17f56d
--- /dev/null
@@ -0,0 +1,217 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ACTION_DISPATCH_APRIL_18_2008_0720AM)
+#define BOOST_SPIRIT_ACTION_DISPATCH_APRIL_18_2008_0720AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include<boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_LAMBDAS) && \
+    !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE)
+#include <utility>
+#include <type_traits>
+#endif
+
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Component>
+    struct action_dispatch
+    {
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_LAMBDAS) && \
+    !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE)
+        // omit function parameters without specializing for each possible
+        // type of callable entity
+        // many thanks to Eelis/##iso-c++ for this contribution
+
+    private:
+        // this will be used to pass around POD types which are safe
+        // to go through the ellipsis operator (if ever used)
+        template <typename>
+        struct fwd_tag {};
+
+        // the first parameter is a placeholder to obtain SFINAE when
+        // doing overload resolution, the second one is the actual
+        // forwarder, where we can apply our implementation
+        template <typename, typename T>
+        struct fwd_storage { typedef T type; };
+
+        // gcc should accept fake<T>() but it prints a sorry, needs
+        // a check once the bug is sorted out, use a FAKE_CALL macro for now
+        template <typename T>
+        T fake_call();
+
+#define BOOST_SPIRIT_FAKE_CALL(T) (*(T*)0)
+
+        // the forwarders, here we could tweak the implementation of
+        // how parameters are passed to the functions, if needed
+        struct fwd_none
+        {
+            template<typename F, typename... Rest>
+            auto operator()(F && f, Rest&&...) -> decltype(f())
+            {
+                return f();
+            }
+        };
+
+        struct fwd_attrib
+        {
+            template<typename F, typename A, typename... Rest>
+            auto operator()(F && f, A && a, Rest&&...) -> decltype(f(a))
+            {
+                 return f(a);
+            }
+        };
+
+        struct fwd_attrib_context
+        {
+             template<typename F, typename A, typename B, typename... Rest>
+             auto operator()(F && f, A && a, B && b, Rest&&...)
+                -> decltype(f(a, b))
+             {
+                 return f(a, b);
+             }
+        };
+
+        struct fwd_attrib_context_pass
+        {
+            template<typename F, typename A, typename B, typename C
+              , typename... Rest>
+            auto operator()(F && f, A && a, B && b, C && c, Rest&&...)
+               -> decltype(f(a, b, c))
+            {
+                return f(a, b, c);
+            }
+        };
+
+        // SFINAE for our calling syntax, the forwarders are stored based
+        // on what function call gives a proper result
+        // this code can probably be more generic once implementations are
+        // steady
+        template <typename F>
+        static auto do_call(F && f, ...)
+           -> typename fwd_storage<decltype(f()), fwd_none>::type
+        {
+            return {};
+        }
+
+        template <typename F, typename A>
+        static auto do_call(F && f, fwd_tag<A>, ...)
+           -> typename fwd_storage<decltype(f(BOOST_SPIRIT_FAKE_CALL(A)))
+                 , fwd_attrib>::type
+        {
+            return {};
+        }
+
+        template <typename F, typename A, typename B>
+        static auto do_call(F && f, fwd_tag<A>, fwd_tag<B>, ...)
+           -> typename fwd_storage<
+                    decltype(f(BOOST_SPIRIT_FAKE_CALL(A), BOOST_SPIRIT_FAKE_CALL(B)))
+                , fwd_attrib_context>::type
+        {
+            return {};
+        }
+
+        template <typename F, typename A, typename B, typename C>
+        static auto do_call(F && f, fwd_tag<A>, fwd_tag<B>, fwd_tag<C>, ...)
+           -> typename fwd_storage<
+                  decltype(f(BOOST_SPIRIT_FAKE_CALL(A), BOOST_SPIRIT_FAKE_CALL(B)
+                    , BOOST_SPIRIT_FAKE_CALL(C)))
+                , fwd_attrib_context_pass>::type
+        {
+            return {};
+        }
+
+        // this function calls the forwarder and is responsible for
+        // stripping the tail of the parameters
+        template <typename F, typename... A>
+        static void caller(F && f, A && ... a)
+        {
+            do_call(f, fwd_tag<typename std::remove_reference<A>::type>()...)
+                (std::forward<F>(f), std::forward<A>(a)...);
+        }
+
+#undef BOOST_SPIRIT_FAKE_CALL
+
+    public:
+        template <typename F, typename Attribute, typename Context>
+        bool operator()(F const& f, Attribute& attr, Context& context)
+        {
+            bool pass = true;
+            caller(f, attr, context, pass);
+            return pass;
+        }
+#else
+        // general handler for everything not explicitly specialized below
+        template <typename F, typename Attribute, typename Context>
+        bool operator()(F const& f, Attribute& attr, Context& context)
+        {
+            bool pass = true;
+            f(attr, context, pass);
+            return pass;
+        }
+#endif
+
+        // handler for phoenix actors
+
+        // If the component this action has to be invoked for is a tuple, we
+        // wrap any non-fusion tuple into a fusion tuple (done by pass_attribute)
+        // and pass through any fusion tuple.
+        template <typename Eval, typename Attribute, typename Context>
+        bool operator()(phoenix::actor<Eval> const& f
+          , Attribute& attr, Context& context)
+        {
+            bool pass = true;
+            typename pass_attribute<Component, Attribute>::type attr_wrap(attr);
+            f(attr_wrap, context, pass);
+            return pass;
+        }
+
+        // specializations for plain function pointers taking different number of
+        // arguments
+        template <typename RT, typename A0, typename A1, typename A2
+          , typename Attribute, typename Context>
+        bool operator()(RT(*f)(A0, A1, A2), Attribute& attr, Context& context)
+        {
+            bool pass = true;
+            f(attr, context, pass);
+            return pass;
+        }
+
+        template <typename RT, typename A0, typename A1
+          , typename Attribute, typename Context>
+        bool operator()(RT(*f)(A0, A1), Attribute& attr, Context& context)
+        {
+            f(attr, context);
+            return true;
+        }
+
+        template <typename RT, typename A0, typename Attribute, typename Context>
+        bool operator()(RT(*f)(A0), Attribute& attr, Context&)
+        {
+            f(attr);
+            return true;
+        }
+
+        template <typename RT, typename Attribute, typename Context>
+        bool operator()(RT(*f)(), Attribute&, Context&)
+        {
+            f();
+            return true;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/adapt_adt_attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/adapt_adt_attributes.hpp
new file mode 100644 (file)
index 0000000..63a898a
--- /dev/null
@@ -0,0 +1,406 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ADAPT_ADT_ATTRIBUTES_SEP_15_2010_1219PM)
+#define BOOST_SPIRIT_ADAPT_ADT_ATTRIBUTES_SEP_15_2010_1219PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+#include <boost/fusion/include/adapt_adt.hpp>
+#include <boost/utility/enable_if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// customization points allowing to use adapted classes with spirit
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, bool Const, typename Domain>
+    struct not_is_variant<
+            fusion::extension::adt_attribute_proxy<T, N, Const>, Domain>
+      : not_is_variant<
+            typename fusion::extension::adt_attribute_proxy<T, N, Const>::type
+          , Domain>
+    {};
+
+    template <typename T, int N, bool Const, typename Domain>
+    struct not_is_optional<
+            fusion::extension::adt_attribute_proxy<T, N, Const>, Domain>
+      : not_is_optional<
+            typename fusion::extension::adt_attribute_proxy<T, N, Const>::type
+          , Domain>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, bool Const>
+    struct is_container<fusion::extension::adt_attribute_proxy<T, N, Const> >
+      : is_container<
+            typename fusion::extension::adt_attribute_proxy<T, N, Const>::type
+        >
+    {};
+
+    template <typename T, int N, bool Const>
+    struct container_value<fusion::extension::adt_attribute_proxy<T, N, Const> >
+      : container_value<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<
+                    T, N, Const
+                >::type
+            >::type
+        >
+    {};
+
+    template <typename T, int N, bool Const>
+    struct container_value<
+            fusion::extension::adt_attribute_proxy<T, N, Const> const>
+      : container_value<
+            typename add_const<
+                typename remove_reference<
+                    typename fusion::extension::adt_attribute_proxy<
+                        T, N, Const
+                    >::type
+                >::type 
+            >::type 
+        >
+    {};
+
+    template <typename T, int N, typename Val>
+    struct push_back_container<
+        fusion::extension::adt_attribute_proxy<T, N, false>
+      , Val
+      , typename enable_if<is_reference<
+            typename fusion::extension::adt_attribute_proxy<T, N, false>::type
+        > >::type>
+    {
+        static bool call(
+            fusion::extension::adt_attribute_proxy<T, N, false>& p
+          , Val const& val)
+        {
+            typedef typename 
+                fusion::extension::adt_attribute_proxy<T, N, false>::type
+            type;
+            return push_back(type(p), val);
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct container_iterator<
+            fusion::extension::adt_attribute_proxy<T, N, Const> >
+      : container_iterator<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<
+                    T, N, Const
+                >::type
+            >::type
+        >
+    {};
+
+    template <typename T, int N, bool Const>
+    struct container_iterator<
+            fusion::extension::adt_attribute_proxy<T, N, Const> const>
+      : container_iterator<
+            typename add_const<
+                typename remove_reference<
+                    typename fusion::extension::adt_attribute_proxy<
+                        T, N, Const
+                    >::type
+                >::type 
+            >::type 
+        >
+    {};
+
+    template <typename T, int N, bool Const>
+    struct begin_container<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        typedef typename remove_reference<
+            typename fusion::extension::adt_attribute_proxy<T, N, Const>::type
+        >::type container_type;
+
+        static typename container_iterator<container_type>::type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const>& c)
+        {
+            return c.get().begin();
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct begin_container<fusion::extension::adt_attribute_proxy<T, N, Const> const>
+    {
+        typedef typename add_const<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+            >::type
+        >::type container_type;
+
+        static typename container_iterator<container_type>::type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& c)
+        {
+            return c.get().begin();
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct end_container<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        typedef typename remove_reference<
+            typename fusion::extension::adt_attribute_proxy<T, N, Const>::type
+        >::type container_type;
+
+        static typename container_iterator<container_type>::type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const>& c)
+        {
+            return c.get().end();
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct end_container<fusion::extension::adt_attribute_proxy<T, N, Const> const>
+    {
+        typedef typename add_const<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+            >::type
+        >::type container_type;
+
+        static typename container_iterator<container_type>::type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& c)
+        {
+            return c.get().end();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, typename Val>
+    struct assign_to_attribute_from_value<
+        fusion::extension::adt_attribute_proxy<T, N, false>
+      , Val>
+    {
+        static void 
+        call(Val const& val
+          , fusion::extension::adt_attribute_proxy<T, N, false>& attr)
+        {
+            attr = val;
+        }
+    };
+
+    template <typename T, int N, bool Const, typename Exposed>
+    struct extract_from_attribute<
+        fusion::extension::adt_attribute_proxy<T, N, Const>, Exposed>
+    {
+        typedef typename remove_const<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+            >::type
+        >::type embedded_type;
+        typedef 
+            typename spirit::result_of::extract_from<Exposed, embedded_type>::type
+        type;
+
+        template <typename Context>
+        static type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val, Context& ctx)
+        {
+            return extract_from<Exposed>(val.get(), ctx);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, bool Const>
+    struct attribute_type<fusion::extension::adt_attribute_proxy<T, N, Const> >
+      : fusion::extension::adt_attribute_proxy<T, N, Const>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, bool Const>
+    struct optional_attribute<
+        fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        typedef typename result_of::optional_value<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+            >::type
+        >::type type;
+
+        static type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val)
+        {
+            return optional_value(val.get());
+        }
+
+        static bool 
+        is_valid(fusion::extension::adt_attribute_proxy<T, N, Const> const& val)
+        {
+            return has_optional_value(val.get());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, int N, typename Attribute, typename Domain>
+    struct transform_attribute<
+        fusion::extension::adt_attribute_proxy<T, N, false>
+      , Attribute
+      , Domain
+      , typename disable_if<is_reference<
+            typename fusion::extension::adt_attribute_proxy<T, N, false>::type
+        > >::type>
+    {
+        typedef Attribute type;
+
+        static Attribute 
+        pre(fusion::extension::adt_attribute_proxy<T, N, false>& val)
+        { 
+            return val; 
+        }
+        static void 
+        post(
+            fusion::extension::adt_attribute_proxy<T, N, false>& val
+          , Attribute const& attr) 
+        {
+            val = attr;
+        }
+        static void 
+        fail(fusion::extension::adt_attribute_proxy<T, N, false>&)
+        {
+        }
+    };
+
+    template <
+        typename T, int N, bool Const, typename Attribute, typename Domain>
+    struct transform_attribute<
+        fusion::extension::adt_attribute_proxy<T, N, Const>
+      , Attribute
+      , Domain
+      , typename enable_if<is_reference<
+            typename fusion::extension::adt_attribute_proxy<
+                T, N, Const
+            >::type
+        > >::type>
+    {
+        typedef Attribute& type;
+
+        static Attribute& 
+        pre(fusion::extension::adt_attribute_proxy<T, N, Const>& val)
+        { 
+            return val; 
+        }
+        static void 
+        post(
+            fusion::extension::adt_attribute_proxy<T, N, Const>&
+          , Attribute const&)
+        {
+        }
+        static void 
+        fail(fusion::extension::adt_attribute_proxy<T, N, Const>&)
+        {
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct clear_value<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        static void call(
+            fusion::extension::adt_attribute_proxy<T, N, Const>& val)
+        {
+            typedef typename 
+                fusion::extension::adt_attribute_proxy<T, N, Const>::type
+            type;
+            clear(type(val));
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct attribute_size<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        typedef typename remove_const<
+            typename remove_reference<
+                typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+            >::type
+        >::type embedded_type;
+
+        typedef typename attribute_size<embedded_type>::type type;
+
+        static type 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val)
+        {
+            return attribute_size<embedded_type>::call(val.get());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // customization point specializations for numeric generators
+    template <typename T, int N, bool Const>
+    struct absolute_value<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        typedef typename 
+            fusion::extension::adt_attribute_proxy<T, N, Const>::type
+        type;
+
+        static type 
+        call (fusion::extension::adt_attribute_proxy<T, N, Const> const& val)
+        {
+            return get_absolute_value(val.get());
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct is_negative<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        static bool 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val) 
+        { 
+            return test_negative(val.get()); 
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct is_zero<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        static bool 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val) 
+        { 
+            return test_zero(val.get()); 
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct is_nan<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        static bool 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val) 
+        { 
+            return test_nan(val.get()); 
+        }
+    };
+
+    template <typename T, int N, bool Const>
+    struct is_infinite<fusion::extension::adt_attribute_proxy<T, N, Const> >
+    {
+        static bool 
+        call(fusion::extension::adt_attribute_proxy<T, N, Const> const& val) 
+        { 
+            return test_infinite(val.get()); 
+        }
+    };
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename T, int N, bool Const>
+    struct optional_value<fusion::extension::adt_attribute_proxy<T, N, Const> >
+      : result_of::optional_value<
+            typename remove_const<
+                typename remove_reference<
+                    typename fusion::extension::adt_attribute_proxy<T, N, Const>::type 
+                >::type
+            >::type>
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any.hpp
new file mode 100644 (file)
index 0000000..a62201f
--- /dev/null
@@ -0,0 +1,76 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ANY_APRIL_22_2006_1147AM)
+#define BOOST_SPIRIT_ANY_APRIL_22_2006_1147AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/include/equal_to.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/deref.hpp>
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/any.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit
+{
+    // This is the binary version of fusion::any. This might
+    // be a good candidate for inclusion in fusion algorithm
+
+    namespace detail
+    {
+        template <typename First1, typename Last, typename First2, typename F>
+        inline bool
+        any(First1 const&, First2 const&, Last const&, F const&, mpl::true_)
+        {
+            return false;
+        }
+
+        template <typename First1, typename Last, typename First2, typename F>
+        inline bool
+        any(First1 const& first1, First2 const& first2, Last const& last, F& f, mpl::false_)
+        {
+            return f(*first1, *first2) ||
+                detail::any(
+                    fusion::next(first1)
+                  , fusion::next(first2)
+                  , last
+                  , f
+                  , fusion::result_of::equal_to<
+                        typename fusion::result_of::next<First1>::type, Last>());
+        }
+    }
+
+    template <typename Sequence1, typename Sequence2, typename F>
+    inline bool
+    any(Sequence1 const& seq1, Sequence2& seq2, F f)
+    {
+        return detail::any(
+                fusion::begin(seq1)
+              , fusion::begin(seq2)
+              , fusion::end(seq1)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence1>::type
+                  , typename fusion::result_of::end<Sequence1>::type>());
+    }
+
+    template <typename Sequence, typename F>
+    inline bool
+    any(Sequence const& seq, unused_type, F f)
+    {
+        return fusion::any(seq, f);
+    }
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if.hpp
new file mode 100644 (file)
index 0000000..c4671cb
--- /dev/null
@@ -0,0 +1,220 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ANY_IF_MARCH_30_2007_1220PM)
+#define BOOST_SPIRIT_ANY_IF_MARCH_30_2007_1220PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/equal_to.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/deref.hpp>
+#include <boost/fusion/include/value_of.hpp>
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/any.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This is a special version for a binary fusion::any. The predicate
+    //  is used to decide whether to advance the second iterator or not.
+    //  This is needed for sequences containing components with unused
+    //  attributes. The second iterator is advanced only if the attribute
+    //  of the corresponding component iterator is not unused.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename Pred>
+        struct apply_predicate
+          : mpl::apply1<Pred, typename fusion::result_of::value_of<Iterator>::type>
+        {};
+
+        ///////////////////////////////////////////////////////////////////////
+        //  if the predicate is true, attribute_next returns next(Iterator2),
+        //  otherwise Iterator2
+        namespace result_of
+        {
+            template <
+                typename Iterator1, typename Iterator2, typename Last2
+              , typename Pred>
+            struct attribute_next
+            {
+                typedef mpl::and_<
+                    apply_predicate<Iterator1, Pred>
+                  , mpl::not_<fusion::result_of::equal_to<Iterator2, Last2> >
+                > pred;
+
+                typedef typename
+                    mpl::eval_if<
+                        pred
+                      , fusion::result_of::next<Iterator2>
+                      , mpl::identity<Iterator2>
+                    >::type
+                type;
+
+                template <typename Iterator>
+                static type
+                call(Iterator const& i, mpl::true_)
+                {
+                    return fusion::next(i);
+                }
+
+                template <typename Iterator>
+                static type
+                call(Iterator const& i, mpl::false_)
+                {
+                    return i;
+                }
+
+                template <typename Iterator>
+                static type
+                call(Iterator const& i)
+                {
+                    return call(i, pred());
+                }
+            };
+        }
+
+        template <
+            typename Pred, typename Iterator1, typename Last2
+          , typename Iterator2>
+        inline typename
+            result_of::attribute_next<Iterator1, Iterator2, Last2, Pred
+        >::type const
+        attribute_next(Iterator2 const& i)
+        {
+            return result_of::attribute_next<
+                Iterator1, Iterator2, Last2, Pred>::call(i);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  if the predicate is true, attribute_value returns deref(Iterator2),
+        //  otherwise unused
+        namespace result_of
+        {
+            template <
+                typename Iterator1, typename Iterator2, typename Last2
+              , typename Pred>
+            struct attribute_value
+            {
+                typedef mpl::and_<
+                    apply_predicate<Iterator1, Pred>
+                  , mpl::not_<fusion::result_of::equal_to<Iterator2, Last2> >
+                > pred;
+
+                typedef typename
+                    mpl::eval_if<
+                        pred
+                      , fusion::result_of::deref<Iterator2>
+                      , mpl::identity<unused_type const>
+                    >::type
+                type;
+
+                template <typename Iterator>
+                static type
+                call(Iterator const& i, mpl::true_)
+                {
+                    return fusion::deref(i);
+                }
+
+                template <typename Iterator>
+                static type
+                call(Iterator const&, mpl::false_)
+                {
+                    return unused;
+                }
+
+                template <typename Iterator>
+                static type
+                call(Iterator const& i)
+                {
+                    return call(i, pred());
+                }
+            };
+        }
+
+        template <
+            typename Pred, typename Iterator1, typename Last2
+          , typename Iterator2>
+        inline typename
+            result_of::attribute_value<Iterator1, Iterator2, Last2, Pred
+        >::type
+        attribute_value(Iterator2 const& i)
+        {
+            return result_of::attribute_value<
+                Iterator1, Iterator2, Last2, Pred>::call(i);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        template <
+            typename Pred, typename First1, typename Last1, typename First2
+          , typename Last2, typename F>
+        inline bool
+        any_if (First1 const&, First2 const&, Last1 const&, Last2 const&
+          , F const&, mpl::true_)
+        {
+            return false;
+        }
+
+        template <
+            typename Pred, typename First1, typename Last1, typename First2
+          , typename Last2, typename F>
+        inline bool
+        any_if (First1 const& first1, First2 const& first2, Last1 const& last1
+          , Last2 const& last2, F& f, mpl::false_)
+        {
+            typename result_of::attribute_value<First1, First2, Last2, Pred>::type
+                attribute = spirit::detail::attribute_value<Pred, First1, Last2>(first2);
+
+            return f(*first1, attribute) ||
+                detail::any_if<Pred>(
+                    fusion::next(first1)
+                  , attribute_next<Pred, First1, Last2>(first2)
+                  , last1, last2
+                  , f
+                  , fusion::result_of::equal_to<
+                        typename fusion::result_of::next<First1>::type, Last1>());
+        }
+    }
+
+    template <typename Pred, typename Sequence1, typename Sequence2, typename F>
+    inline bool
+    any_if(Sequence1 const& seq1, Sequence2& seq2, F f, Pred)
+    {
+        return detail::any_if<Pred>(
+                fusion::begin(seq1), fusion::begin(seq2)
+              , fusion::end(seq1), fusion::end(seq2)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence1>::type
+                  , typename fusion::result_of::end<Sequence1>::type>());
+    }
+
+    template <typename Pred, typename Sequence, typename F>
+    inline bool
+    any_if(Sequence const& seq, unused_type const, F f, Pred)
+    {
+        return fusion::any(seq, f);
+    }
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if_ns.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_if_ns.hpp
new file mode 100644 (file)
index 0000000..9af0261
--- /dev/null
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ANY_IF_NS_NOVEMBER_04_2008_0906PM)
+#define BOOST_SPIRIT_ANY_IF_NS_NOVEMBER_04_2008_0906PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/algorithm/any_if.hpp>
+#include <boost/spirit/home/support/algorithm/any_ns.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This is a special version for a binary fusion::any. The predicate
+    //  is used to decide whether to advance the second iterator or not.
+    //  This is needed for sequences containing components with unused
+    //  attributes. The second iterator is advanced only if the attribute
+    //  of the corresponding component iterator is not unused.
+    //
+    //  This is a non-short circuiting (ns) version of the any_if algorithm.
+    //  see any_if.hpp (uses | instead of ||).
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <
+            typename Pred, typename First1, typename Last1, typename First2
+          , typename Last2, typename F
+        >
+        inline bool
+        any_if_ns(First1 const&, First2 const&, Last1 const&, Last2 const&
+          , F const&, mpl::true_)
+        {
+            return false;
+        }
+
+        template <
+            typename Pred, typename First1, typename Last1, typename First2
+          , typename Last2, typename F
+        >
+        inline bool
+        any_if_ns(First1 const& first1, First2 const& first2
+          , Last1 const& last1, Last2 const& last2, F& f, mpl::false_)
+        {
+            return (0 != (f(*first1, spirit::detail::attribute_value<Pred, First1, Last2>(first2)) |
+                detail::any_if_ns<Pred>(
+                    fusion::next(first1)
+                  , attribute_next<Pred, First1, Last2>(first2)
+                  , last1, last2
+                  , f
+                  , fusion::result_of::equal_to<
+                        typename fusion::result_of::next<First1>::type, Last1>())));
+        }
+    }
+
+    template <typename Pred, typename Sequence1, typename Sequence2, typename F>
+    inline bool
+    any_if_ns(Sequence1 const& seq1, Sequence2& seq2, F f, Pred)
+    {
+        return detail::any_if_ns<Pred>(
+                fusion::begin(seq1), fusion::begin(seq2)
+              , fusion::end(seq1), fusion::end(seq2)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence1>::type
+                  , typename fusion::result_of::end<Sequence1>::type>());
+    }
+
+    template <typename Pred, typename Sequence, typename F>
+    inline bool
+    any_if_ns(Sequence const& seq, unused_type const, F f, Pred)
+    {
+        return detail::any_ns(
+                fusion::begin(seq)
+              , fusion::end(seq)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence>::type
+                  , typename fusion::result_of::end<Sequence>::type>());
+    }
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_ns.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/algorithm/any_ns.hpp
new file mode 100644 (file)
index 0000000..63b9526
--- /dev/null
@@ -0,0 +1,102 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ANY_NS_MARCH_13_2007_0827AM)
+#define BOOST_SPIRIT_ANY_NS_MARCH_13_2007_0827AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/include/equal_to.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/deref.hpp>
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/any.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit
+{
+    // A non-short circuiting (ns) version of the any algorithm (uses
+    // | instead of ||.
+
+    namespace detail
+    {
+        template <typename First1, typename Last, typename First2, typename F>
+        inline bool
+        any_ns(First1 const&, First2 const&, Last const&, F const&, mpl::true_)
+        {
+            return false;
+        }
+
+        template <typename First1, typename Last, typename First2, typename F>
+        inline bool
+        any_ns(First1 const& first1, First2 const& first2, Last const& last, F& f, mpl::false_)
+        {
+            return (0 != (f(*first1, *first2) |
+                detail::any_ns(
+                    fusion::next(first1)
+                  , fusion::next(first2)
+                  , last
+                  , f
+                  , fusion::result_of::equal_to<
+                        typename fusion::result_of::next<First1>::type, Last>())));
+        }
+
+        template <typename First, typename Last, typename F>
+        inline bool
+        any_ns(First const&, Last const&, F const&, mpl::true_)
+        {
+            return false;
+        }
+
+        template <typename First, typename Last, typename F>
+        inline bool
+        any_ns(First const& first, Last const& last, F& f, mpl::false_)
+        {
+            return (0 != (f(*first) |
+                detail::any_ns(
+                    fusion::next(first)
+                  , last
+                  , f
+                  , fusion::result_of::equal_to<
+                        typename fusion::result_of::next<First>::type, Last>())));
+        }
+    }
+
+    template <typename Sequence1, typename Sequence2, typename F>
+    inline bool
+    any_ns(Sequence1 const& seq1, Sequence2& seq2, F f)
+    {
+        return detail::any_ns(
+                fusion::begin(seq1)
+              , fusion::begin(seq2)
+              , fusion::end(seq1)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence1>::type
+                  , typename fusion::result_of::end<Sequence1>::type>());
+    }
+
+    template <typename Sequence, typename F>
+    inline bool
+    any_ns(Sequence const& seq, unused_type, F f)
+    {
+        return detail::any_ns(
+                fusion::begin(seq)
+              , fusion::end(seq)
+              , f
+              , fusion::result_of::equal_to<
+                    typename fusion::result_of::begin<Sequence>::type
+                  , typename fusion::result_of::end<Sequence>::type>());
+    }
+
+}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/argument.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/argument.hpp
new file mode 100644 (file)
index 0000000..caeee0b
--- /dev/null
@@ -0,0 +1,217 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ARGUMENT_FEBRUARY_17_2007_0339PM)
+#define BOOST_SPIRIT_ARGUMENT_FEBRUARY_17_2007_0339PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/limits.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/at.hpp>
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define SPIRIT_DECLARE_ARG(z, n, data)                                        \
+    typedef phoenix::actor<argument<n> >                                      \
+        BOOST_PP_CAT(BOOST_PP_CAT(_, BOOST_PP_INC(n)), _type);                \
+    phoenix::actor<argument<n> > const                                        \
+        BOOST_PP_CAT(_, BOOST_PP_INC(n)) =                                    \
+            BOOST_PP_CAT(BOOST_PP_CAT(_, BOOST_PP_INC(n)), _type)();          \
+        /***/
+
+#define SPIRIT_USING_ARGUMENT(z, n, data)                                     \
+    using spirit::BOOST_PP_CAT(BOOST_PP_CAT(_, n), _type);                    \
+    using spirit::BOOST_PP_CAT(_, n);                                         \
+        /***/
+
+#else
+
+#define SPIRIT_DECLARE_ARG(z, n, data)                                        \
+    typedef phoenix::actor<argument<n> >                                      \
+        BOOST_PP_CAT(BOOST_PP_CAT(_, BOOST_PP_INC(n)), _type);                \
+        /***/
+
+#define SPIRIT_USING_ARGUMENT(z, n, data)                                     \
+    using spirit::BOOST_PP_CAT(BOOST_PP_CAT(_, n), _type);                    \
+        /***/
+
+#endif
+
+namespace boost { namespace spirit
+{
+    template <int N>
+    struct argument;
+
+    template <typename Dummy>
+    struct attribute_context;
+}}
+
+BOOST_PHOENIX_DEFINE_CUSTOM_TERMINAL(
+    template <int N>
+  , boost::spirit::argument<N>
+  , mpl::false_                 // is not nullary
+  , v2_eval(
+        proto::make<
+            boost::spirit::argument<N>()
+        >
+      , proto::call<
+            functional::env(proto::_state)
+        >
+    )
+)
+
+BOOST_PHOENIX_DEFINE_CUSTOM_TERMINAL(
+    template <typename Dummy>
+  , boost::spirit::attribute_context<Dummy>
+  , mpl::false_                 // is not nullary
+  , v2_eval(
+        proto::make<
+            boost::spirit::attribute_context<Dummy>()
+        >
+      , proto::call<
+            functional::env(proto::_state)
+        >
+    )
+)
+
+namespace boost { namespace spirit
+{
+    namespace result_of
+    {
+        template <typename Sequence, int N>
+        struct get_arg
+        {
+            typedef typename
+                fusion::result_of::size<Sequence>::type
+            sequence_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < sequence_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<Sequence, N>::type
+            type;
+
+            static type call(Sequence& seq)
+            {
+                return fusion::at_c<N>(seq);
+            }
+        };
+
+        template <typename Sequence, int N>
+        struct get_arg<Sequence&, N> : get_arg<Sequence, N>
+        {
+        };
+    }
+
+    template <int N, typename T>
+    typename result_of::get_arg<T, N>::type
+    get_arg(T& val)
+    {
+        return result_of::get_arg<T, N>::call(val);
+    }
+
+    template <typename>
+    struct attribute_context
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            // FIXME: is this remove_const really necessary?
+            typedef typename
+                remove_const<
+                    typename mpl::at_c<typename Env::args_type, 0>::type
+                >::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<0>(env.args());
+        }
+    };
+
+    template <int N>
+    struct argument
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                mpl::at_c<typename Env::args_type, 0>::type
+            arg_type;
+
+            typedef typename result_of::get_arg<arg_type, N>::type type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return get_arg<N>(fusion::at_c<0>(env.args()));
+        }
+    };
+
+    // _0 refers to the whole attribute as generated by the lhs parser
+    typedef phoenix::actor<attribute_context<void> > _0_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    _0_type const _0 = _0_type();
+#endif
+
+    // _1, _2, ... refer to the attributes of the single components the lhs
+    // parser is composed of
+    typedef phoenix::actor<argument<0> > _1_type;
+    typedef phoenix::actor<argument<1> > _2_type;
+    typedef phoenix::actor<argument<2> > _3_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    _1_type const _1 = _1_type();
+    _2_type const _2 = _2_type();
+    _3_type const _3 = _3_type();
+#endif
+
+    // '_pass' may be used to make a match fail in retrospective
+    typedef phoenix::arg_names::_3_type _pass_type;
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    _pass_type const _pass = _pass_type();
+#endif
+
+    //  Bring in the rest of the arguments and attributes (_4 .. _N+1), using PP
+    BOOST_PP_REPEAT_FROM_TO(
+        3, SPIRIT_ARGUMENTS_LIMIT, SPIRIT_DECLARE_ARG, _)
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+    }
+#endif
+
+}}
+
+#undef SPIRIT_DECLARE_ARG
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/argument_expression.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/argument_expression.hpp
new file mode 100644 (file)
index 0000000..ccf5021
--- /dev/null
@@ -0,0 +1,106 @@
+/*=============================================================================
+    Copyright (c) 2011 Thomas Heller
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ARGUMENT_MARCH_22_2011_0939PM)
+#define BOOST_SPIRIT_ARGUMENT_MARCH_22_2011_0939PM
+
+#include <boost/spirit/include/phoenix_core.hpp>
+
+namespace boost { namespace spirit
+{
+    template <int N>
+    struct argument;
+
+    template <typename Dummy>
+    struct attribute_context;
+
+    namespace expression
+    {
+        template <int N>
+        struct argument
+          : phoenix::expression::terminal<spirit::argument<N> >
+        {
+            typedef typename phoenix::expression::terminal<
+                spirit::argument<N> 
+            >::type type;
+
+            static type make()
+            {
+                type const e = {{{}}};
+                return e;
+            }
+        };
+        
+        template <typename Dummy>
+        struct attribute_context
+          : phoenix::expression::terminal<spirit::attribute_context<Dummy> >
+        {
+            typedef typename phoenix::expression::terminal<
+                spirit::attribute_context<Dummy> 
+            >::type type;
+
+            static type make()
+            {
+                type const e = {{{}}};
+                return e;
+            }
+        };
+    }
+}}
+
+namespace boost { namespace phoenix
+{
+    namespace result_of
+    {
+        template <typename Dummy>
+        struct is_nullary<custom_terminal<spirit::attribute_context<Dummy> > >
+          : mpl::false_
+        {};
+
+        template <int N>
+        struct is_nullary<custom_terminal<spirit::argument<N> > >
+          : mpl::false_
+        {};
+    }
+
+    template <typename Dummy>
+    struct is_custom_terminal<spirit::attribute_context<Dummy> >
+      : mpl::true_
+    {};
+
+    template <int N>
+    struct is_custom_terminal<spirit::argument<N> >
+      : mpl::true_
+    {};
+
+    template <typename Dummy>
+    struct custom_terminal<spirit::attribute_context<Dummy> >
+      : proto::call<
+            v2_eval(
+                proto::make<spirit::attribute_context<Dummy>()>
+              , proto::call<
+                    functional::env(proto::_state)
+                >
+            )
+        >
+    {};
+
+    template <int N>
+    struct custom_terminal<spirit::argument<N> >
+      : proto::call<
+            v2_eval(
+                proto::make<spirit::argument<N>()>
+              , proto::call<
+                    functional::env(proto::_state)
+                >
+            )
+        >
+    {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/assert_msg.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/assert_msg.hpp
new file mode 100644 (file)
index 0000000..f1433da
--- /dev/null
@@ -0,0 +1,54 @@
+//  Copyright (c) 2001-2013 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ASSERT_MSG_JUN_23_2009_0836AM)
+#define BOOST_SPIRIT_ASSERT_MSG_JUN_23_2009_0836AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+// Work around the MPL problem in BOOST_MPL_ASSERT_MSG generating
+// multiple definition linker errors for certain compilers (VC++ 8).
+// BOOST_SPIRIT_DONT_USE_MPL_ASSERT_MSG can also be defined by user.
+#if !defined(BOOST_SPIRIT_DONT_USE_MPL_ASSERT_MSG)
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1500
+#  define BOOST_SPIRIT_DONT_USE_MPL_ASSERT_MSG 1
+# endif
+#endif
+
+#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || BOOST_SPIRIT_DONT_USE_MPL_ASSERT_MSG != 0
+#include <boost/static_assert.hpp>
+#define BOOST_SPIRIT_ASSERT_MSG(Cond, Msg, Types)                             \
+        BOOST_STATIC_ASSERT_MSG(Cond, # Msg)
+#else
+#include <boost/mpl/assert.hpp>
+#define BOOST_SPIRIT_ASSERT_MSG(Cond, Msg, Types)                             \
+        BOOST_MPL_ASSERT_MSG(Cond, Msg, Types)
+#endif
+
+#define BOOST_SPIRIT_ASSERT_MATCH(Domain, Expr)                               \
+        BOOST_SPIRIT_ASSERT_MSG((                                             \
+            boost::spirit::traits::matches< Domain, Expr >::value             \
+        ), error_invalid_expression, (Expr))
+
+// GCC 4.7 will overeagerly instantiate static_asserts in template functions,
+// if the assert condition does not depend on template parameters
+// (see https://svn.boost.org/trac/boost/ticket/8381).
+// There are places where we want to use constant false as the condition in
+// template functions to indicate that these function overloads should never
+// be called. This allows to generate better error messages. To solve this
+// problem we make the condition dependent on the template argument and use
+// the following macro in such places.
+#include <boost/type_traits/is_same.hpp>
+
+#define BOOST_SPIRIT_ASSERT_FAIL(TemplateParam, Msg, Types)                   \
+        BOOST_SPIRIT_ASSERT_MSG((!boost::is_same<                             \
+            TemplateParam, TemplateParam >::value), Msg, Types)
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/attributes.hpp
new file mode 100644 (file)
index 0000000..163f11c
--- /dev/null
@@ -0,0 +1,1395 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2012 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTES_JANUARY_29_2007_0954AM)
+#define BOOST_SPIRIT_ATTRIBUTES_JANUARY_29_2007_0954AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/detail/hold_any.hpp>
+#include <boost/spirit/home/support/detail/as_variant.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/fusion/include/filter_if.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/fusion/include/push_front.hpp>
+#include <boost/fusion/include/pop_front.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/fusion/include/is_view.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/foreach.hpp>
+#include <boost/utility/value_init.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/equal.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/variant.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/config.hpp>
+#include <vector>
+#include <utility>
+#include <ios>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This file deals with attribute related functions and meta-functions
+    // including generalized attribute transformation utilities for Spirit
+    // components.
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Find out if T can be a (strong) substitute for Expected attribute
+    namespace detail
+    {
+        template <typename T, typename Expected>
+        struct value_type_is_substitute
+          : is_substitute<
+                typename container_value<T>::type
+              , typename container_value<Expected>::type>
+        {};
+
+        template <typename T, typename Expected, typename Enable = void>
+        struct is_substitute_impl : is_same<T, Expected> {};
+
+        template <typename T, typename Expected>
+        struct is_substitute_impl<T, Expected,
+            typename enable_if<
+                mpl::and_<
+                    fusion::traits::is_sequence<T>,
+                    fusion::traits::is_sequence<Expected>,
+                    mpl::equal<T, Expected, is_substitute<mpl::_1, mpl::_2> >
+                >
+            >::type>
+          : mpl::true_ {};
+
+        template <typename T, typename Expected>
+        struct is_substitute_impl<T, Expected,
+            typename enable_if<
+                mpl::and_<
+                    is_container<T>,
+                    is_container<Expected>,
+                    detail::value_type_is_substitute<T, Expected>
+                >
+            >::type>
+          : mpl::true_ {};
+    }
+
+    template <typename T, typename Expected, typename Enable /*= void*/>
+    struct is_substitute
+      : detail::is_substitute_impl<T, Expected> {};
+
+    template <typename T, typename Expected>
+    struct is_substitute<optional<T>, optional<Expected> >
+      : is_substitute<T, Expected> {};
+
+    template <typename T>
+    struct is_substitute<T, T
+          , typename enable_if<not_is_optional<T> >::type>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Find out if T can be a weak substitute for Expected attribute
+    namespace detail
+    {
+        // A type, which is convertible to the attribute is at the same time
+        // usable as its weak substitute.
+        template <typename T, typename Expected, typename Enable = void>
+        struct is_weak_substitute_impl : is_convertible<T, Expected> {};
+
+//        // An exposed attribute is a weak substitute for a supplied container
+//        // attribute if it is a weak substitute for its value_type. This is
+//        // true as all character parsers are compatible with a container
+//        // attribute having the corresponding character type as its value_type.
+//        template <typename T, typename Expected>
+//        struct is_weak_substitute_for_value_type
+//          : is_weak_substitute<T, typename container_value<Expected>::type>
+//        {};
+//
+//        template <typename T, typename Expected>
+//        struct is_weak_substitute_impl<T, Expected,
+//            typename enable_if<
+//                mpl::and_<
+//                    mpl::not_<is_string<T> >
+//                  , is_string<Expected>
+//                  , is_weak_substitute_for_value_type<T, Expected> >
+//            >::type>
+//          : mpl::true_
+//        {};
+
+        // An exposed container attribute is a weak substitute for a supplied
+        // container attribute if and only if their value_types are weak
+        // substitutes.
+        template <typename T, typename Expected>
+        struct value_type_is_weak_substitute
+          : is_weak_substitute<
+                typename container_value<T>::type
+              , typename container_value<Expected>::type>
+        {};
+
+        template <typename T, typename Expected>
+        struct is_weak_substitute_impl<T, Expected,
+            typename enable_if<
+                mpl::and_<
+                    is_container<T>
+                  , is_container<Expected>
+                  , value_type_is_weak_substitute<T, Expected> >
+            >::type>
+          : mpl::true_ {};
+
+        // Two fusion sequences are weak substitutes if and only if their
+        // elements are pairwise weak substitutes.
+        template <typename T, typename Expected>
+        struct is_weak_substitute_impl<T, Expected,
+            typename enable_if<
+                mpl::and_<
+                    fusion::traits::is_sequence<T>
+                  , fusion::traits::is_sequence<Expected>
+                  , mpl::equal<T, Expected, is_weak_substitute<mpl::_1, mpl::_2> > >
+            >::type>
+          : mpl::true_ {};
+
+        // If this is not defined, the main template definition above will return
+        // true if T is convertible to the first type in a fusion::vector. We
+        // globally declare any non-Fusion sequence T as not compatible with any
+        // Fusion sequence 'Expected'.
+        template <typename T, typename Expected>
+        struct is_weak_substitute_impl<T, Expected,
+            typename enable_if<
+                mpl::and_<
+                    mpl::not_<fusion::traits::is_sequence<T> >
+                  , fusion::traits::is_sequence<Expected> >
+            >::type>
+          : mpl::false_ {};
+    }
+
+    // main template forwards to detail namespace, this helps older compilers
+    // to disambiguate things
+    template <typename T, typename Expected, typename Enable /*= void*/>
+    struct is_weak_substitute
+      : detail::is_weak_substitute_impl<T, Expected> {};
+
+    template <typename T, typename Expected>
+    struct is_weak_substitute<optional<T>, optional<Expected> >
+      : is_weak_substitute<T, Expected> {};
+
+    template <typename T, typename Expected>
+    struct is_weak_substitute<optional<T>, Expected>
+      : is_weak_substitute<T, Expected> {};
+
+    template <typename T, typename Expected>
+    struct is_weak_substitute<T, optional<Expected> >
+      : is_weak_substitute<T, Expected> {};
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+    template <typename T, typename Expected>
+    struct is_weak_substitute<boost::variant<T>, Expected>
+      : is_weak_substitute<T, Expected>
+    {};
+
+    template <typename T0, typename T1, typename ...TN, typename Expected>
+    struct is_weak_substitute<boost::variant<T0, T1, TN...>,
+            Expected>
+      : mpl::bool_<is_weak_substitute<T0, Expected>::type::value &&
+            is_weak_substitute<boost::variant<T1, TN...>, Expected>::type::value>
+    {};
+#else
+#define BOOST_SPIRIT_IS_WEAK_SUBSTITUTE(z, N, _)                              \
+    is_weak_substitute<BOOST_PP_CAT(T, N), Expected>::type::value &&          \
+    /***/
+
+    // make sure unused variant parameters do not affect the outcome
+    template <typename Expected>
+    struct is_weak_substitute<boost::detail::variant::void_, Expected>
+      : mpl::true_
+    {};
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Expected>
+    struct is_weak_substitute<
+            boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Expected>
+      : mpl::bool_<BOOST_PP_REPEAT(BOOST_VARIANT_LIMIT_TYPES
+          , BOOST_SPIRIT_IS_WEAK_SUBSTITUTE, _) true>
+    {};
+
+#undef BOOST_SPIRIT_IS_WEAK_SUBSTITUTE
+#endif
+
+    template <typename T>
+    struct is_weak_substitute<T, T
+          , typename enable_if<
+                mpl::and_<not_is_optional<T>, not_is_variant<T> >
+            >::type>
+      : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct is_proxy : mpl::false_ {};
+
+    template <typename T>
+    struct is_proxy<T,
+        typename enable_if<
+            mpl::and_<
+                fusion::traits::is_sequence<T>,
+                fusion::traits::is_view<T>
+            >
+        >::type>
+      : mpl::true_ {};
+
+    namespace detail
+    {
+        // By declaring a nested struct in your class/struct, you tell
+        // spirit that it is regarded as a variant type. The minimum
+        // required interface for such a variant is that it has constructors
+        // for various types supported by your variant and a typedef 'types'
+        // which is an mpl sequence of the contained types.
+        //
+        // This is an intrusive interface. For a non-intrusive interface,
+        // use the not_is_variant trait.
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(adapted_variant_tag)
+    }
+
+    template <typename T, typename Domain, typename Enable/* = void*/>
+    struct not_is_variant
+      : mpl::not_<detail::has_adapted_variant_tag<T> >
+    {};
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Domain>
+    struct not_is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Domain>
+      : mpl::false_
+    {};
+
+    template <typename T, typename Domain>
+    struct not_is_variant<boost::optional<T>, Domain>
+      : not_is_variant<T, Domain>
+    {};
+
+    // we treat every type as if it where the variant (as this meta function is
+    // invoked for variant types only)
+    template <typename T>
+    struct variant_type
+      : mpl::identity<T>
+    {};
+
+    template <typename T>
+    struct variant_type<boost::optional<T> >
+      : variant_type<T>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The compute_compatible_component_variant
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        //  A component is compatible to a given Attribute type if the
+        //  Attribute is the same as the expected type of the component or if
+        //  it is convertible to the expected type.
+        template <typename Expected, typename Attribute>
+        struct attribute_is_compatible
+          : is_convertible<Attribute, Expected>
+        {};
+
+        template <typename Expected, typename Attribute>
+        struct attribute_is_compatible<Expected, boost::optional<Attribute> >
+          : is_convertible<Attribute, Expected>
+        {};
+
+        template <typename Container>
+        struct is_hold_any_container
+          : traits::is_hold_any<typename traits::container_value<Container>::type>
+        {};
+    }
+
+    template <typename Attribute, typename Expected
+      , typename IsNotVariant = mpl::false_, typename Enable = void>
+    struct compute_compatible_component_variant
+      : mpl::or_<
+            traits::detail::attribute_is_compatible<Expected, Attribute>
+          , traits::is_hold_any<Expected>
+          , mpl::eval_if<
+                is_container<Expected>
+              , traits::detail::is_hold_any_container<Expected>
+              , mpl::false_> >
+    {};
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(types)
+    }
+
+    template <typename Variant, typename Expected>
+    struct compute_compatible_component_variant<Variant, Expected, mpl::false_
+      , typename enable_if<detail::has_types<Variant> >::type>
+    {
+        typedef typename traits::variant_type<Variant>::type variant_type;
+        typedef typename variant_type::types types;
+        typedef typename mpl::end<types>::type end;
+
+        typedef typename
+            mpl::find_if<types, is_same<Expected, mpl::_1> >::type
+        iter;
+
+        typedef typename mpl::distance<
+            typename mpl::begin<types>::type, iter
+        >::type distance;
+
+        // true_ if the attribute matches one of the types in the variant
+        typedef typename mpl::not_<is_same<iter, end> >::type type;
+        enum { value = type::value };
+
+        // return the type in the variant the attribute is compatible with
+        typedef typename
+            mpl::eval_if<type, mpl::deref<iter>, mpl::identity<unused_type> >::type
+        compatible_type;
+
+        // return whether the given type is compatible with the Expected type
+        static bool is_compatible(int which)
+        {
+            return which == distance::value;
+        }
+    };
+
+    template <typename Expected, typename Attribute, typename Domain>
+    struct compute_compatible_component
+      : compute_compatible_component_variant<Attribute, Expected
+          , typename spirit::traits::not_is_variant<Attribute, Domain>::type> {};
+
+    template <typename Expected, typename Domain>
+    struct compute_compatible_component<Expected, unused_type, Domain>
+      : mpl::false_ {};
+
+    template <typename Attribute, typename Domain>
+    struct compute_compatible_component<unused_type, Attribute, Domain>
+      : mpl::false_ {};
+
+    template <typename Domain>
+    struct compute_compatible_component<unused_type, unused_type, Domain>
+      : mpl::false_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // return the type currently stored in the given variant
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct variant_which<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        static int call(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& v)
+        {
+            return v.which();
+        }
+    };
+
+    template <typename T>
+    int which(T const& v)
+    {
+        return variant_which<T>::call(v);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain, typename Enable/* = void*/>
+    struct not_is_optional
+      : mpl::true_
+    {};
+
+    template <typename T, typename Domain>
+    struct not_is_optional<boost::optional<T>, Domain>
+      : mpl::false_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attribute_of
+    //
+    // Get the component's attribute
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component
+      , typename Context = unused_type, typename Iterator = unused_type>
+    struct attribute_of
+    {
+        typedef typename Component::template
+            attribute<Context, Iterator>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // attribute_not_unused
+    //
+    // An mpl meta-function class that determines whether a component's
+    // attribute is not unused.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Context, typename Iterator = unused_type>
+    struct attribute_not_unused
+    {
+        template <typename Component>
+        struct apply
+          : not_is_unused<typename
+                attribute_of<Component, Context, Iterator>::type>
+        {};
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the attribute type to use from the given type
+    //
+    // This is needed to extract the correct attribute type from proxy classes
+    // as utilized in FUSION_ADAPT_ADT et. al.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable/* = void*/>
+    struct attribute_type : mpl::identity<Attribute> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of a fusion sequence (compile time)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct sequence_size
+      : fusion::result_of::size<T>
+    {};
+
+    template <>
+    struct sequence_size<unused_type>
+      : mpl::int_<0>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of an attribute (runtime)
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Attribute, typename Enable = void>
+        struct attribute_size_impl
+        {
+            typedef std::size_t type;
+
+            static type call(Attribute const&)
+            {
+                return 1;
+            }
+        };
+
+        template <typename Attribute>
+        struct attribute_size_impl<Attribute
+          , typename enable_if<
+                mpl::and_<
+                    fusion::traits::is_sequence<Attribute>
+                  , mpl::not_<traits::is_container<Attribute> >
+                >
+            >::type>
+        {
+            typedef typename fusion::result_of::size<Attribute>::value_type type;
+
+            static type call(Attribute const& attr)
+            {
+                return fusion::size(attr);
+            }
+        };
+
+        template <typename Attribute>
+        struct attribute_size_impl<Attribute
+          , typename enable_if<
+                mpl::and_<
+                    traits::is_container<Attribute>
+                  , mpl::not_<traits::is_iterator_range<Attribute> >
+                >
+            >::type>
+        {
+            typedef typename Attribute::size_type type;
+
+            static type call(Attribute const& attr)
+            {
+                return attr.size();
+            }
+        };
+    }
+
+    template <typename Attribute, typename Enable/* = void*/>
+    struct attribute_size
+      : detail::attribute_size_impl<Attribute>
+    {};
+
+    template <typename Attribute>
+    struct attribute_size<optional<Attribute> >
+    {
+        typedef typename attribute_size<Attribute>::type type;
+
+        static type call(optional<Attribute> const& val)
+        {
+            if (!val)
+                return 0;
+            return traits::size(val.get());
+        }
+    };
+
+    namespace detail
+    {
+        struct attribute_size_visitor : static_visitor<std::size_t>
+        {
+            template <typename T>
+            std::size_t operator()(T const& val) const
+            {
+                return spirit::traits::size(val);
+            }
+        };
+    }
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct attribute_size<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        typedef std::size_t type;
+
+        static type call(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& val)
+        {
+            return apply_visitor(detail::attribute_size_visitor(), val);
+        }
+    };
+
+    template <typename Iterator>
+    struct attribute_size<iterator_range<Iterator> >
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::
+            difference_type type;
+
+        static type call(iterator_range<Iterator> const& r)
+        {
+            return boost::detail::distance(r.begin(), r.end());
+        }
+    };
+
+    template <>
+    struct attribute_size<unused_type>
+    {
+        typedef std::size_t type;
+
+        static type call(unused_type)
+        {
+            return 0;
+        }
+    };
+
+    template <typename Attribute>
+    typename attribute_size<Attribute>::type
+    size (Attribute const& attr)
+    {
+        return attribute_size<Attribute>::call(attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // pass_attribute
+    //
+    // Determines how we pass attributes to semantic actions. This
+    // may be specialized. By default, all attributes are wrapped in
+    // a fusion sequence, because the attribute has to be treated as being
+    // a single value in any case (even if it actually already is a fusion
+    // sequence in its own).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Attribute, typename Enable/* = void*/>
+    struct pass_attribute
+    {
+        typedef fusion::vector1<Attribute&> type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Subclass a pass_attribute specialization from this to wrap
+    // the attribute in a tuple only IFF it is not already a fusion tuple.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Force = mpl::false_>
+    struct wrap_if_not_tuple
+      : mpl::if_<
+            fusion::traits::is_sequence<Attribute>
+          , Attribute&, fusion::vector1<Attribute&> >
+    {};
+
+    template <typename Attribute>
+    struct wrap_if_not_tuple<Attribute, mpl::true_>
+    {
+        typedef fusion::vector1<Attribute&> type;
+    };
+
+    template <>
+    struct wrap_if_not_tuple<unused_type, mpl::false_>
+    {
+        typedef unused_type type;
+    };
+
+    template <>
+    struct wrap_if_not_tuple<unused_type const, mpl::false_>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_optional
+    //
+    // Build a boost::optional from T. Return unused_type if T is unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_optional
+    {
+        typedef boost::optional<T> type;
+    };
+
+    template <typename T>
+    struct build_optional<boost::optional<T> >
+    {
+        typedef boost::optional<T> type;
+    };
+
+    template <>
+    struct build_optional<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_std_vector
+    //
+    // Build a std::vector from T. Return unused_type if T is unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_std_vector
+    {
+        typedef std::vector<T> type;
+    };
+
+    template <>
+    struct build_std_vector<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // filter_unused_attributes
+    //
+    // Remove unused_types from a sequence
+    ///////////////////////////////////////////////////////////////////////////
+
+    // Compute the list of all *used* attributes of sub-components
+    // (filter all unused attributes from the list)
+    template <typename Sequence>
+    struct filter_unused_attributes
+      : fusion::result_of::filter_if<Sequence, not_is_unused<mpl::_> >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // sequence_attribute_transform
+    //
+    // This transform is invoked for every attribute in a sequence allowing
+    // to modify the attribute type exposed by a component to the enclosing
+    // sequence component. By default no transformation is performed.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Domain>
+    struct sequence_attribute_transform
+      : mpl::identity<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // permutation_attribute_transform
+    //
+    // This transform is invoked for every attribute in a sequence allowing
+    // to modify the attribute type exposed by a component to the enclosing
+    // permutation component. By default a build_optional transformation is
+    // performed.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Domain>
+    struct permutation_attribute_transform
+      : traits::build_optional<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // sequential_or_attribute_transform
+    //
+    // This transform is invoked for every attribute in a sequential_or allowing
+    // to modify the attribute type exposed by a component to the enclosing
+    // sequential_or component. By default a build_optional transformation is
+    // performed.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Domain>
+    struct sequential_or_attribute_transform
+      : traits::build_optional<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_fusion_vector
+    //
+    // Build a fusion vector from a fusion sequence. All unused attributes
+    // are filtered out. If the result is empty after the removal of unused
+    // types, return unused_type. If the input sequence is an unused_type,
+    // also return unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct build_fusion_vector
+    {
+        // Remove all unused attributes
+        typedef typename
+            filter_unused_attributes<Sequence>::type
+        filtered_attributes;
+
+        // Build a fusion vector from a fusion sequence (Sequence),
+        // But *only if* the sequence is not empty. i.e. if the
+        // sequence is empty, our result will be unused_type.
+
+        typedef typename
+            mpl::eval_if<
+                fusion::result_of::empty<filtered_attributes>
+              , mpl::identity<unused_type>
+              , fusion::result_of::as_vector<filtered_attributes>
+            >::type
+        type;
+    };
+
+    template <>
+    struct build_fusion_vector<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_attribute_sequence
+    //
+    // Build a fusion sequence attribute sequence from a sequence of
+    // components. Transform<T>::type is called on each element.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence, typename Context
+      , template <typename T, typename D> class Transform
+      , typename Iterator = unused_type, typename Domain = unused_type>
+    struct build_attribute_sequence
+    {
+        struct element_attribute
+        {
+            template <typename T>
+            struct result;
+
+            template <typename F, typename Element>
+            struct result<F(Element)>
+            {
+                typedef typename
+                    Transform<
+                        typename attribute_of<Element, Context, Iterator>::type
+                      , Domain
+                    >::type
+                type;
+            };
+
+            // never called, but needed for decltype-based result_of (C++0x)
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            template <typename Element>
+            typename result<element_attribute(Element)>::type
+            operator()(Element&&) const;
+#endif
+        };
+
+        // Compute the list of attributes of all sub-components
+        typedef typename
+            fusion::result_of::transform<Sequence, element_attribute>::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // has_no_unused
+    //
+    // Test if there are no unused attributes in Sequence
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct has_no_unused
+      : is_same<
+            typename mpl::find_if<Sequence, is_same<mpl::_, unused_type> >::type
+          , typename mpl::end<Sequence>::type>
+    {};
+
+    namespace detail
+    {
+        template <typename Sequence, bool no_unused
+            , int size = mpl::size<Sequence>::value>
+        struct build_collapsed_variant;
+
+        // N element case, no unused
+        template <typename Sequence, int size>
+        struct build_collapsed_variant<Sequence, true, size>
+            : spirit::detail::as_variant<Sequence> {};
+
+        // N element case with unused
+        template <typename Sequence, int size>
+        struct build_collapsed_variant<Sequence, false, size>
+        {
+            typedef boost::optional<
+                typename spirit::detail::as_variant<
+                    typename fusion::result_of::pop_front<Sequence>::type
+                >::type
+            > type;
+        };
+
+        // 1 element case, no unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, true, 1>
+            : mpl::front<Sequence> {};
+
+        // 1 element case, with unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, false, 1>
+            : mpl::front<Sequence> {};
+
+        // 2 element case, no unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, true, 2>
+            : spirit::detail::as_variant<Sequence> {};
+
+        // 2 element case, with unused
+        template <typename Sequence>
+        struct build_collapsed_variant<Sequence, false, 2>
+        {
+            typedef boost::optional<
+                typename mpl::deref<
+                    typename mpl::next<
+                        typename mpl::begin<Sequence>::type
+                    >::type
+                >::type
+            >
+            type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // alternative_attribute_transform
+    //
+    // This transform is invoked for every attribute in an alternative allowing
+    // to modify the attribute type exposed by a component to the enclosing
+    // alternative component. By default no transformation is performed.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Domain>
+    struct alternative_attribute_transform
+      : mpl::identity<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_variant
+    //
+    // Build a boost::variant from a fusion sequence. build_variant makes sure
+    // that 1) all attributes in the variant are unique 2) puts the unused
+    // attribute, if there is any, to the front and 3) collapses single element
+    // variants, variant<T> to T.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence>
+    struct build_variant
+    {
+        // Remove all unused attributes.
+        typedef typename
+            filter_unused_attributes<Sequence>::type
+        filtered_attributes;
+
+        typedef has_no_unused<Sequence> no_unused;
+
+        // If the original attribute list does not contain any unused
+        // attributes, it is used, otherwise a single unused_type is
+        // pushed to the front of the list. This is to make sure that if
+        // there is an unused_type in the list, it is the first one.
+        typedef typename
+            mpl::eval_if<
+                no_unused,
+                mpl::identity<Sequence>,
+                fusion::result_of::push_front<filtered_attributes, unused_type>
+            >::type
+        attribute_sequence;
+
+        // Make sure each of the types occur only once in the type list
+        typedef typename
+            mpl::fold<
+                attribute_sequence, mpl::vector<>,
+                mpl::if_<
+                    mpl::contains<mpl::_1, mpl::_2>,
+                    mpl::_1, mpl::push_back<mpl::_1, mpl::_2>
+                >
+            >::type
+        no_duplicates;
+
+        // If there is only one type in the list of types we strip off the
+        // variant. IOTW, collapse single element variants, variant<T> to T.
+        // Take note that this also collapses variant<unused_type, T> to T.
+        typedef typename
+            traits::detail::build_collapsed_variant<
+                no_duplicates, no_unused::value>::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  transform_attribute
+    //
+    //  Sometimes the user needs to transform the attribute types for certain
+    //  attributes. This template can be used as a customization point, where
+    //  the user is able specify specific transformation rules for any attribute
+    //  type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Domain
+      , typename Enable/* = void*/>
+    struct transform_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Domain, typename Transformed, typename Exposed>
+    typename spirit::result_of::pre_transform<Exposed, Transformed, Domain>::type
+    pre_transform(Exposed& attr BOOST_PROTO_DISABLE_IF_IS_CONST(Exposed))
+    {
+        return transform_attribute<Exposed, Transformed, Domain>::pre(attr);
+    }
+
+    template <typename Domain, typename Transformed, typename Exposed>
+    typename spirit::result_of::pre_transform<Exposed const, Transformed, Domain>::type
+    pre_transform(Exposed const& attr)
+    {
+        return transform_attribute<Exposed const, Transformed, Domain>::pre(attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // make_attribute
+    //
+    // All parsers and generators have specific attribute types.
+    // Spirit parsers and generators are passed an attribute; these are either
+    // references to the expected type, or an unused_type -- to flag that we do
+    // not care about the attribute. For semantic actions, however, we need to
+    // have a real value to pass to the semantic action. If the client did not
+    // provide one, we will have to synthesize the value. This class takes care
+    // of that. *Note that this behavior has changed. From Boost 1.47, semantic
+    // actions always take in the passed attribute as-is if the PP constant:
+    // BOOST_SPIRIT_ACTIONS_ALLOW_ATTR_COMPAT is defined.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute
+    {
+        typedef typename remove_const<Attribute>::type attribute_type;
+        typedef typename
+            mpl::if_<
+                is_same<typename remove_const<ActualAttribute>::type, unused_type>
+              , attribute_type
+              , ActualAttribute&>::type
+        type;
+
+        typedef typename
+            mpl::if_<
+                is_same<typename remove_const<ActualAttribute>::type, unused_type>
+              , attribute_type
+              , ActualAttribute>::type
+        value_type;
+
+        static Attribute call(unused_type)
+        {
+             // synthesize the attribute/parameter
+            return boost::get(value_initialized<attribute_type>());
+        }
+
+        template <typename T>
+        static T& call(T& value)
+        {
+            return value; // just pass the one provided
+        }
+    };
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute&, ActualAttribute>
+      : make_attribute<Attribute, ActualAttribute>
+    {};
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute const&, ActualAttribute>
+      : make_attribute<Attribute const, ActualAttribute>
+    {};
+
+    template <typename ActualAttribute>
+    struct make_attribute<unused_type, ActualAttribute>
+    {
+        typedef unused_type type;
+        typedef unused_type value_type;
+        static unused_type call(unused_type)
+        {
+            return unused;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // swap_impl
+    //
+    // Swap (with proper handling of unused_types)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename A, typename B>
+    void swap_impl(A& a, B& b)
+    {
+        A temp = a;
+        a = b;
+        b = temp;
+    }
+
+    template <typename T>
+    void swap_impl(T& a, T& b)
+    {
+        using namespace std;
+        swap(a, b);
+    }
+
+    template <typename A>
+    void swap_impl(A&, unused_type)
+    {
+    }
+
+    template <typename A>
+    void swap_impl(unused_type, A&)
+    {
+    }
+
+    inline void swap_impl(unused_type, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Strips single element fusion vectors into its 'naked'
+    //  form: vector<T> --> T
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct strip_single_element_vector
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct strip_single_element_vector<fusion::vector1<T> >
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct strip_single_element_vector<fusion::vector<T> >
+    {
+        typedef T type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // meta function to return whether the argument is a one element fusion
+    // sequence
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T
+      , bool IsFusionSeq = fusion::traits::is_sequence<T>::value
+      , bool IsProtoExpr = proto::is_expr<T>::value>
+    struct one_element_sequence
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct one_element_sequence<T, true, false>
+      : mpl::bool_<mpl::size<T>::value == 1>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // clear
+    //
+    // Clear data efficiently
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    void clear(T& val);
+
+    namespace detail
+    {
+        // this is used by the variant and fusion sequence dispatch
+        struct clear_visitor : static_visitor<>
+        {
+            template <typename T>
+            void operator()(T& val) const
+            {
+                spirit::traits::clear(val);
+            }
+        };
+
+        // default
+        template <typename T>
+        void clear_impl2(T& val, mpl::false_)
+        {
+            val = T();
+        }
+
+        // for fusion sequences
+        template <typename T>
+        void clear_impl2(T& val, mpl::true_)
+        {
+            fusion::for_each(val, clear_visitor());
+        }
+
+        // dispatch default or fusion sequence
+        template <typename T>
+        void clear_impl(T& val, mpl::false_)
+        {
+            clear_impl2(val, fusion::traits::is_sequence<T>());
+        }
+
+        // STL containers
+        template <typename T>
+        void clear_impl(T& val, mpl::true_)
+        {
+            val.clear();
+        }
+    }
+
+    template <typename T, typename Enable/* = void*/>
+    struct clear_value
+    {
+        static void call(T& val)
+        {
+            detail::clear_impl(val, typename is_container<T>::type());
+        }
+    };
+
+    // optionals
+    template <typename T>
+    struct clear_value<boost::optional<T> >
+    {
+        static void call(boost::optional<T>& val)
+        {
+            if (val)
+                val = none_t();   // leave optional uninitialized
+        }
+    };
+
+    // variants
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct clear_value<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        static void call(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& val)
+        {
+            apply_visitor(detail::clear_visitor(), val);
+        }
+    };
+
+    // iterator range
+    template <typename T>
+    struct clear_value<iterator_range<T> >
+    {
+        static void call(iterator_range<T>& val)
+        {
+            val = iterator_range<T>(val.end(), val.end());
+        }
+    };
+
+    // main dispatch
+    template <typename T>
+    void clear(T& val)
+    {
+        clear_value<T>::call(val);
+    }
+
+    // for unused
+    inline void clear(unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Out>
+        struct print_fusion_sequence
+        {
+            print_fusion_sequence(Out& out_)
+              : out(out_), is_first(true) {}
+
+            typedef void result_type;
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                if (is_first)
+                    is_first = false;
+                else
+                    out << ", ";
+                spirit::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+            mutable bool is_first;
+        };
+
+        // print elements in a variant
+        template <typename Out>
+        struct print_visitor : static_visitor<>
+        {
+            print_visitor(Out& out_) : out(out_) {}
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                spirit::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+        };
+    }
+
+    template <typename Out, typename T, typename Enable>
+    struct print_attribute_debug
+    {
+        // for plain data types
+        template <typename T_>
+        static void call_impl3(Out& out, T_ const& val, mpl::false_)
+        {
+            out << val;
+        }
+
+        // for fusion data types
+        template <typename T_>
+        static void call_impl3(Out& out, T_ const& val, mpl::true_)
+        {
+            out << '[';
+            fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
+            out << ']';
+        }
+
+        // non-stl container
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::false_)
+        {
+            call_impl3(out, val, fusion::traits::is_sequence<T_>());
+        }
+
+        // stl container
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::true_)
+        {
+            out << '[';
+            if (!traits::is_empty(val))
+            {
+                bool first = true;
+                typename container_iterator<T_ const>::type iend = traits::end(val);
+                for (typename container_iterator<T_ const>::type i = traits::begin(val);
+                     !traits::compare(i, iend); traits::next(i))
+                {
+                    if (!first)
+                        out << ", ";
+                    first = false;
+                    spirit::traits::print_attribute(out, traits::deref(i));
+                }
+            }
+            out << ']';
+        }
+
+        // for variant types
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::false_)
+        {
+            apply_visitor(detail::print_visitor<Out>(out), val);
+        }
+
+        // for non-variant types
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::true_)
+        {
+            call_impl2(out, val, is_container<T_>());
+        }
+
+        // main entry point
+        static void call(Out& out, T const& val)
+        {
+            call_impl(out, val, not_is_variant<T>());
+        }
+    };
+
+    template <typename Out, typename T>
+    struct print_attribute_debug<Out, boost::optional<T> >
+    {
+        static void call(Out& out, boost::optional<T> const& val)
+        {
+            if (val)
+                spirit::traits::print_attribute(out, *val);
+            else
+                out << "[empty]";
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T>
+    inline void print_attribute(Out& out, T const& val)
+    {
+        print_attribute_debug<Out, T>::call(out, val);
+    }
+
+    template <typename Out>
+    inline void print_attribute(Out&, unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate debug output for lookahead token (character) stream
+    namespace detail
+    {
+        struct token_printer_debug_for_chars
+        {
+            template<typename Out, typename Char>
+            static void print(Out& o, Char c)
+            {
+                using namespace std;    // allow for ADL to find the proper iscntrl
+
+                if (c == static_cast<Char>('\a'))
+                    o << "\\a";
+                else if (c == static_cast<Char>('\b'))
+                    o << "\\b";
+                else if (c == static_cast<Char>('\f'))
+                    o << "\\f";
+                else if (c == static_cast<Char>('\n'))
+                    o << "\\n";
+                else if (c == static_cast<Char>('\r'))
+                    o << "\\r";
+                else if (c == static_cast<Char>('\t'))
+                    o << "\\t";
+                else if (c == static_cast<Char>('\v'))
+                    o << "\\v";
+                else if (c >= 0 && c < 127 && iscntrl(c))
+                    o << "\\" << std::oct << static_cast<int>(c);
+                else
+                    o << static_cast<char>(c);
+            }
+        };
+
+        // for token types where the comparison with char constants wouldn't work
+        struct token_printer_debug
+        {
+            template<typename Out, typename T>
+            static void print(Out& o, T const& val)
+            {
+                o << val;
+            }
+        };
+    }
+
+    template <typename T, typename Enable>
+    struct token_printer_debug
+      : mpl::if_<
+            mpl::and_<
+                is_convertible<T, char>, is_convertible<char, T> >
+          , detail::token_printer_debug_for_chars
+          , detail::token_printer_debug>::type
+    {};
+
+    template <typename Out, typename T>
+    inline void print_token(Out& out, T const& val)
+    {
+        // allow to customize the token printer routine
+        token_printer_debug<T>::print(out, val);
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename Exposed, typename Transformed, typename Domain>
+    struct pre_transform
+      : traits::transform_attribute<Exposed, Transformed, Domain>
+    {};
+}}}
+
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/attributes_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/attributes_fwd.hpp
new file mode 100644 (file)
index 0000000..6086d37
--- /dev/null
@@ -0,0 +1,297 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTES_FWD_OCT_01_2009_0715AM)
+#define BOOST_SPIRIT_ATTRIBUTES_FWD_OCT_01_2009_0715AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || \
+    (defined(__APPLE__) && defined(__INTEL_COMPILER))
+#include <boost/utility/enable_if.hpp>
+#endif
+#include <boost/spirit/home/support/unused.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    // forward declaration only
+    template <typename Exposed, typename Attribute>
+    struct extract_from;
+
+    template <typename T, typename Attribute>
+    struct attribute_as;
+
+    template <typename Exposed, typename Transformed, typename Domain>
+    struct pre_transform;
+
+    template <typename T>
+    struct optional_value;
+
+    template <typename Container>
+    struct begin;
+
+    template <typename Container>
+    struct end;
+
+    template <typename Iterator>
+    struct deref;
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Find out if T can be a strong substitute for Expected attribute
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Expected, typename Enable = void>
+    struct is_substitute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Find out if T can be a weak substitute for Expected attribute
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Expected, typename Enable = void>
+    struct is_weak_substitute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a proxy
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct is_proxy;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the attribute type to use from the given type
+    //
+    // This is needed to extract the correct attribute type from proxy classes
+    // as utilized in FUSION_ADAPT_ADT et. al.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable = void>
+    struct attribute_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of a fusion sequence (compile time)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct sequence_size;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the size of an attribute (runtime)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable = void>
+    struct attribute_size;
+
+    template <typename Attribute>
+    typename attribute_size<Attribute>::type
+    size(Attribute const& attr);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determines how we pass attributes to semantic actions. This
+    // may be specialized. By default, all attributes are wrapped in
+    // a fusion sequence, because the attribute has to be treated as being
+    // a single value in any case (even if it actually already is a fusion
+    // sequence in its own).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Attribute, typename Enable = void>
+    struct pass_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct optional_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Sometimes the user needs to transform the attribute types for certain
+    // attributes. This template can be used as a customization point, where
+    // the user is able specify specific transformation rules for any attribute
+    // type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Domain
+      , typename Enable = void>
+    struct transform_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Qi only
+    template <typename Attribute, typename Iterator, typename Enable = void>
+    struct assign_to_attribute_from_iterators;
+
+    template <typename Iterator, typename Attribute>
+    void assign_to(Iterator const& first, Iterator const& last, Attribute& attr);
+
+    template <typename Iterator>
+    void assign_to(Iterator const&, Iterator const&, unused_type);
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct assign_to_attribute_from_value;
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct assign_to_container_from_value;
+
+    template <typename T, typename Attribute>
+    void assign_to(T const& val, Attribute& attr);
+
+    template <typename T>
+    void assign_to(T const&, unused_type);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma only
+    template <typename Attribute, typename Exposed, typename Enable = void>
+    struct extract_from_attribute;
+
+    template <typename Attribute, typename Exposed, typename Enable = void>
+    struct extract_from_container;
+
+    template <typename Exposed, typename Attribute, typename Context>
+    typename spirit::result_of::extract_from<Exposed, Attribute>::type
+    extract_from(Attribute const& attr, Context& ctx
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || \
+    (defined(__APPLE__) && defined(__INTEL_COMPILER))
+      , typename enable_if<traits::not_is_unused<Attribute> >::type* = NULL
+#endif
+    );
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma only
+    template <typename T, typename Attribute, typename Enable = void>
+    struct attribute_as;
+
+    template <typename T, typename Attribute>
+    typename spirit::result_of::attribute_as<T, Attribute>::type
+    as(Attribute const& attr);
+
+    template <typename T, typename Attribute>
+    bool valid_as(Attribute const& attr);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // return the type currently stored in the given variant
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct variant_which;
+
+    template <typename T>
+    int which(T const& v);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine, whether T is a variant like type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain = unused_type, typename Enable = void>
+    struct not_is_variant;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine, whether T is a variant like type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain = unused_type, typename Enable = void>
+    struct not_is_optional;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Clear data efficiently
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct clear_value;
+
+    ///////////////////////////////////////////////////////////////////////
+    // Determine the value type of the given container type
+    ///////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct container_value;
+
+    template <typename Container, typename Enable = void>
+    struct container_iterator;
+
+    template <typename T, typename Enable = void>
+    struct is_container;
+
+    template <typename T, typename Enable = void>
+    struct is_iterator_range;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute, typename Context = unused_type
+            , typename Iterator = unused_type, typename Enable = void>
+    struct handles_container;
+
+    template <typename Container, typename ValueType, typename Attribute
+      , typename Sequence, typename Domain, typename Enable = void>
+    struct pass_through_container;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Qi only
+    template <typename Container, typename T, typename Enable = void>
+    struct push_back_container;
+
+    template <typename Container, typename Enable = void>
+    struct is_empty_container;
+
+    template <typename Container, typename Enable = void>
+    struct make_container_attribute;
+
+    ///////////////////////////////////////////////////////////////////////
+    // Determine the iterator type of the given container type
+    // Karma only
+    ///////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct begin_container;
+
+    template <typename Container, typename Enable = void>
+    struct end_container;
+
+    template <typename Iterator, typename Enable = void>
+    struct deref_iterator;
+
+    template <typename Iterator, typename Enable = void>
+    struct next_iterator;
+
+    template <typename Iterator, typename Enable = void>
+    struct compare_iterators;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Print the given attribute of type T to the stream given as Out
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T, typename Enable = void>
+    struct print_attribute_debug;
+
+    template <typename Out, typename T>
+    void print_attribute(Out&, T const&);
+
+    template <typename Out>
+    void print_attribute(Out&, unused_type);
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char, typename Enable = void>
+    struct token_printer_debug;
+
+    template<typename Out, typename T>
+    void print_token(Out&, T const&);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Access attributes from a karma symbol table
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute, typename Enable = void>
+    struct symbols_lookup;
+
+    template <typename Attribute, typename T, typename Enable = void>
+    struct symbols_value;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // transform attribute types exposed from compound operator components
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Domain>
+    struct alternative_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct sequence_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct permutation_attribute_transform;
+
+    template <typename Attribute, typename Domain>
+    struct sequential_or_attribute_transform;
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/auto.hpp
new file mode 100644 (file)
index 0000000..69aa760
--- /dev/null
@@ -0,0 +1,35 @@
+/*=============================================================================
+    Copyright (c) 2001-2012 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_AUTO_FEBRUARY_7_2012_0159PM)
+#define BOOST_SPIRIT_AUTO_FEBRUARY_7_2012_0159PM
+
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+// Support for c++11 auto. See:
+// http://boost-spirit.com/home/articles/qi-example/zero-to-60-mph-in-2-seconds/
+// for more info
+
+#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS)
+
+#define BOOST_SPIRIT_AUTO(domain_, name, expr)                                  \
+    typedef boost::proto::result_of::                                           \
+        deep_copy<BOOST_TYPEOF(expr)>::type name##_expr_type;                   \
+    BOOST_SPIRIT_ASSERT_MATCH(                                                  \
+        boost::spirit::domain_::domain, name##_expr_type);                      \
+    BOOST_AUTO(name, boost::proto::deep_copy(expr));                            \
+    /****/
+
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/auto/meta_create.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/auto/meta_create.hpp
new file mode 100644 (file)
index 0000000..3734c86
--- /dev/null
@@ -0,0 +1,212 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_SUPPORT_META_CREATE_NOV_21_2009_0327PM)
+#define BOOST_SPIRIT_SUPPORT_META_CREATE_NOV_21_2009_0327PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+#include <boost/version.hpp>
+#include <boost/spirit/include/phoenix_limits.hpp>      // needs to be included before proto
+#include <boost/proto/proto.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/include/fold.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+// needed for workaround below
+#if defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ < 3))
+#include <boost/type_traits/is_same.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This is the main dispatch point for meta_create to the correct domain
+    template <typename Domain, typename T, typename Enable = void>
+    struct meta_create;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This allows to query whether a valid mapping exists for the given data 
+    // type to a component in the given domain
+    template <typename Domain, typename T, typename Enable = void>
+    struct meta_create_exists : mpl::false_ {};
+}}}
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct add_const_ref
+          : add_reference<typename add_const<T>::type> {};
+
+        template <typename T>
+        struct remove_const_ref
+          : remove_const<typename remove_reference<T>::type> {};
+
+// starting with Boost V1.42 fusion::fold has been changed to be compatible 
+// with mpl::fold (the sequence of template parameters for the meta-function 
+// object has been changed)
+#if BOOST_VERSION < 104200
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OpTag, typename Domain>
+        struct nary_proto_expr_function
+        {
+            template <typename T>
+            struct result;
+
+// this is a workaround for older versions of g++ (< V4.3) which apparently have
+// problems with the following template specialization
+#if defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ < 3))
+            template <typename F, typename T1, typename T2>
+            struct result<F(T1, T2)>
+            {
+                BOOST_STATIC_ASSERT((is_same<F, nary_proto_expr_function>::value));
+#else
+            template <typename T1, typename T2>
+            struct result<nary_proto_expr_function(T1, T2)>
+            {
+#endif
+                typedef typename remove_const_ref<T2>::type left_type;
+                typedef typename 
+                    spirit::traits::meta_create<Domain, T1>::type
+                right_type;
+
+                typedef typename mpl::eval_if<
+                    traits::not_is_unused<left_type>
+                  , proto::result_of::make_expr<OpTag, left_type, right_type>
+                  , mpl::identity<right_type>
+                >::type type;
+            };
+
+            template <typename T>
+            typename result<nary_proto_expr_function(T, unused_type const&)>::type
+            operator()(T, unused_type const&) const
+            {
+                typedef spirit::traits::meta_create<Domain, T> right_type;
+                return right_type::call();
+            }
+
+            template <typename T1, typename T2>
+            typename result<nary_proto_expr_function(T1, T2)>::type
+            operator()(T1, T2 const& t2) const
+            {
+                // we variants to the alternative operator
+                typedef spirit::traits::meta_create<Domain, T1> right_type;
+                return proto::make_expr<OpTag>(t2, right_type::call());
+            }
+        };
+#else
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OpTag, typename Domain>
+        struct nary_proto_expr_function
+        {
+            template <typename T>
+            struct result;
+
+// this is a workaround for older versions of g++ (< V4.3) which apparently have
+// problems with the following template specialization
+#if defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ < 3))
+            template <typename F, typename T1, typename T2>
+            struct result<F(T1, T2)>
+            {
+                BOOST_STATIC_ASSERT((is_same<F, nary_proto_expr_function>::value));
+#else
+            template <typename T1, typename T2>
+            struct result<nary_proto_expr_function(T1, T2)>
+            {
+#endif
+                typedef typename remove_const_ref<T1>::type left_type;
+                typedef typename 
+                    spirit::traits::meta_create<Domain, T2>::type
+                right_type;
+
+                typedef typename mpl::eval_if<
+                    traits::not_is_unused<left_type>
+                  , proto::result_of::make_expr<OpTag, left_type, right_type>
+                  , mpl::identity<right_type>
+                >::type type;
+            };
+
+            template <typename T>
+            typename result<nary_proto_expr_function(unused_type const&, T)>::type
+            operator()(unused_type const&, T) const
+            {
+                typedef spirit::traits::meta_create<Domain, T> right_type;
+                return right_type::call();
+            }
+
+            template <typename T1, typename T2>
+            typename result<nary_proto_expr_function(T1, T2)>::type
+            operator()(T1 const& t1, T2) const
+            {
+                // we variants to the alternative operator
+                typedef spirit::traits::meta_create<Domain, T2> right_type;
+                return proto::make_expr<OpTag>(t1, right_type::call());
+            }
+        };
+#endif
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename T, typename OpTag, typename Domain>
+    struct make_unary_proto_expr
+    {
+        typedef spirit::traits::meta_create<Domain, T> subject_type;
+
+        typedef typename proto::result_of::make_expr<
+            OpTag, typename subject_type::type
+        >::type type;
+
+        static type call()
+        {
+            return proto::make_expr<OpTag>(subject_type::call());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Sequence, typename OpTag, typename Domain>
+    struct make_nary_proto_expr
+    {
+        typedef detail::nary_proto_expr_function<OpTag, Domain> 
+            make_proto_expr;
+
+        typedef typename fusion::result_of::fold<
+            Sequence, unused_type, make_proto_expr
+        >::type type;
+
+        static type call()
+        {
+            return fusion::fold(Sequence(), unused, make_proto_expr());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        // Starting with newer versions of Proto, all Proto expressions are at 
+        // the same time Fusion sequences. This is the correct behavior, but
+        // we need to distinguish between Fusion sequences and Proto 
+        // expressions. This meta-function does exactly that.
+        template <typename T>
+        struct is_fusion_sequence_but_not_proto_expr
+          : mpl::and_<
+                fusion::traits::is_sequence<T>
+              , mpl::not_<proto::is_expr<T> > >
+        {};
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/auxiliary/attr_cast.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/auxiliary/attr_cast.hpp
new file mode 100644 (file)
index 0000000..89b52cd
--- /dev/null
@@ -0,0 +1,47 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_SUPPORT_ATTR_CAST_OCT_06_2009_00535PM)
+#define SPIRIT_SUPPORT_ATTR_CAST_OCT_06_2009_00535PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This one is the function that the user can call directly in order 
+    // to create a customized attr_cast component
+    template <typename Expr>
+    typename enable_if<proto::is_expr<Expr>
+      , stateful_tag_type<Expr, tag::attr_cast> >::type
+    attr_cast(Expr const& expr)
+    {
+        return stateful_tag_type<Expr, tag::attr_cast>(expr);
+    }
+
+    template <typename Exposed, typename Expr>
+    typename enable_if<proto::is_expr<Expr>
+      , stateful_tag_type<Expr, tag::attr_cast, Exposed> >::type
+    attr_cast(Expr const& expr)
+    {
+        return stateful_tag_type<Expr, tag::attr_cast, Exposed>(expr);
+    }
+
+    template <typename Exposed, typename Transformed, typename Expr>
+    typename enable_if<proto::is_expr<Expr>
+      , stateful_tag_type<Expr, tag::attr_cast, Exposed, Transformed> >::type
+    attr_cast(Expr const& expr)
+    {
+        return stateful_tag_type<Expr, tag::attr_cast, Exposed, Transformed>(expr);
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_class.hpp
new file mode 100644 (file)
index 0000000..574a25e
--- /dev/null
@@ -0,0 +1,797 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM)
+#define BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+
+#include <boost/spirit/include/phoenix_limits.hpp>      // needs to be included before proto
+#include <boost/proto/proto.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/make_signed.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4800) // 'int' : forcing value to bool 'true' or 'false' warning
+#endif
+
+namespace boost { namespace spirit { namespace detail
+{
+    // Here's the thing... typical encodings (except ASCII) deal with unsigned
+    // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed.
+    // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
+    // cast this to an unsigned int with 32 bits, you get 4294967273!
+    //
+    // The trick is to cast to an unsigned version of the source char first
+    // before casting to the target. {P.S. Don't worry about the code, the
+    // optimizer will optimize the if-else branches}
+
+    template <typename TargetChar, typename SourceChar>
+    TargetChar cast_char(SourceChar ch)
+    {
+        if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
+        {
+            if (is_signed<SourceChar>::value)
+            {
+                 // source is signed, target is unsigned
+                typedef typename make_unsigned<SourceChar>::type USourceChar;
+                return TargetChar(USourceChar(ch));
+            }
+            else
+            {
+                 // source is unsigned, target is signed
+                typedef typename make_signed<SourceChar>::type SSourceChar;
+                return TargetChar(SSourceChar(ch));
+            }
+        }
+        else
+        {
+            // source and target has same signedness
+            return TargetChar(ch); // just cast
+        }
+    }
+}}}
+
+namespace boost { namespace spirit { namespace tag
+{
+    struct char_ { BOOST_SPIRIT_IS_TAG() };
+    struct string { BOOST_SPIRIT_IS_TAG() };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // classification tags
+    struct alnum { BOOST_SPIRIT_IS_TAG() };
+    struct alpha { BOOST_SPIRIT_IS_TAG() };
+    struct digit { BOOST_SPIRIT_IS_TAG() };
+    struct xdigit { BOOST_SPIRIT_IS_TAG() };
+    struct cntrl { BOOST_SPIRIT_IS_TAG() };
+    struct graph { BOOST_SPIRIT_IS_TAG() };
+    struct print { BOOST_SPIRIT_IS_TAG() };
+    struct punct { BOOST_SPIRIT_IS_TAG() };
+    struct space { BOOST_SPIRIT_IS_TAG() };
+    struct blank { BOOST_SPIRIT_IS_TAG() };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // classification/conversion tags
+    struct no_case { BOOST_SPIRIT_IS_TAG() };
+    struct lower { BOOST_SPIRIT_IS_TAG() };
+    struct upper { BOOST_SPIRIT_IS_TAG() };
+    struct lowernum { BOOST_SPIRIT_IS_TAG() };
+    struct uppernum { BOOST_SPIRIT_IS_TAG() };
+    struct ucs4 { BOOST_SPIRIT_IS_TAG() };
+    struct encoding { BOOST_SPIRIT_IS_TAG() };
+
+#if defined(BOOST_SPIRIT_UNICODE)
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    struct letter { BOOST_SPIRIT_IS_TAG() };
+    struct mark { BOOST_SPIRIT_IS_TAG() };
+    struct number { BOOST_SPIRIT_IS_TAG() };
+    struct separator { BOOST_SPIRIT_IS_TAG() };
+    struct other { BOOST_SPIRIT_IS_TAG() };
+    struct punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct symbol { BOOST_SPIRIT_IS_TAG() };
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    struct uppercase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct lowercase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct titlecase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct modifier_letter { BOOST_SPIRIT_IS_TAG() };
+    struct other_letter { BOOST_SPIRIT_IS_TAG() };
+
+    struct nonspacing_mark { BOOST_SPIRIT_IS_TAG() };
+    struct enclosing_mark { BOOST_SPIRIT_IS_TAG() };
+    struct spacing_mark { BOOST_SPIRIT_IS_TAG() };
+
+    struct decimal_number { BOOST_SPIRIT_IS_TAG() };
+    struct letter_number { BOOST_SPIRIT_IS_TAG() };
+    struct other_number { BOOST_SPIRIT_IS_TAG() };
+
+    struct space_separator { BOOST_SPIRIT_IS_TAG() };
+    struct line_separator { BOOST_SPIRIT_IS_TAG() };
+    struct paragraph_separator { BOOST_SPIRIT_IS_TAG() };
+
+    struct control { BOOST_SPIRIT_IS_TAG() };
+    struct format { BOOST_SPIRIT_IS_TAG() };
+    struct private_use { BOOST_SPIRIT_IS_TAG() };
+    struct surrogate { BOOST_SPIRIT_IS_TAG() };
+    struct unassigned { BOOST_SPIRIT_IS_TAG() };
+
+    struct dash_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct open_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct close_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct connector_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct other_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct initial_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct final_punctuation { BOOST_SPIRIT_IS_TAG() };
+
+    struct math_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct currency_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct modifier_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct other_symbol { BOOST_SPIRIT_IS_TAG() };
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    struct alphabetic { BOOST_SPIRIT_IS_TAG() };
+    struct uppercase { BOOST_SPIRIT_IS_TAG() };
+    struct lowercase { BOOST_SPIRIT_IS_TAG() };
+    struct white_space { BOOST_SPIRIT_IS_TAG() };
+    struct hex_digit { BOOST_SPIRIT_IS_TAG() };
+    struct noncharacter_code_point { BOOST_SPIRIT_IS_TAG() };
+    struct default_ignorable_code_point { BOOST_SPIRIT_IS_TAG() };
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    struct arabic { BOOST_SPIRIT_IS_TAG() };
+    struct imperial_aramaic { BOOST_SPIRIT_IS_TAG() };
+    struct armenian { BOOST_SPIRIT_IS_TAG() };
+    struct avestan { BOOST_SPIRIT_IS_TAG() };
+    struct balinese { BOOST_SPIRIT_IS_TAG() };
+    struct bamum { BOOST_SPIRIT_IS_TAG() };
+    struct bengali { BOOST_SPIRIT_IS_TAG() };
+    struct bopomofo { BOOST_SPIRIT_IS_TAG() };
+    struct braille { BOOST_SPIRIT_IS_TAG() };
+    struct buginese { BOOST_SPIRIT_IS_TAG() };
+    struct buhid { BOOST_SPIRIT_IS_TAG() };
+    struct canadian_aboriginal { BOOST_SPIRIT_IS_TAG() };
+    struct carian { BOOST_SPIRIT_IS_TAG() };
+    struct cham { BOOST_SPIRIT_IS_TAG() };
+    struct cherokee { BOOST_SPIRIT_IS_TAG() };
+    struct coptic { BOOST_SPIRIT_IS_TAG() };
+    struct cypriot { BOOST_SPIRIT_IS_TAG() };
+    struct cyrillic { BOOST_SPIRIT_IS_TAG() };
+    struct devanagari { BOOST_SPIRIT_IS_TAG() };
+    struct deseret { BOOST_SPIRIT_IS_TAG() };
+    struct egyptian_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
+    struct ethiopic { BOOST_SPIRIT_IS_TAG() };
+    struct georgian { BOOST_SPIRIT_IS_TAG() };
+    struct glagolitic { BOOST_SPIRIT_IS_TAG() };
+    struct gothic { BOOST_SPIRIT_IS_TAG() };
+    struct greek { BOOST_SPIRIT_IS_TAG() };
+    struct gujarati { BOOST_SPIRIT_IS_TAG() };
+    struct gurmukhi { BOOST_SPIRIT_IS_TAG() };
+    struct hangul { BOOST_SPIRIT_IS_TAG() };
+    struct han { BOOST_SPIRIT_IS_TAG() };
+    struct hanunoo { BOOST_SPIRIT_IS_TAG() };
+    struct hebrew { BOOST_SPIRIT_IS_TAG() };
+    struct hiragana { BOOST_SPIRIT_IS_TAG() };
+    struct katakana_or_hiragana { BOOST_SPIRIT_IS_TAG() };
+    struct old_italic { BOOST_SPIRIT_IS_TAG() };
+    struct javanese { BOOST_SPIRIT_IS_TAG() };
+    struct kayah_li { BOOST_SPIRIT_IS_TAG() };
+    struct katakana { BOOST_SPIRIT_IS_TAG() };
+    struct kharoshthi { BOOST_SPIRIT_IS_TAG() };
+    struct khmer { BOOST_SPIRIT_IS_TAG() };
+    struct kannada { BOOST_SPIRIT_IS_TAG() };
+    struct kaithi { BOOST_SPIRIT_IS_TAG() };
+    struct tai_tham { BOOST_SPIRIT_IS_TAG() };
+    struct lao { BOOST_SPIRIT_IS_TAG() };
+    struct latin { BOOST_SPIRIT_IS_TAG() };
+    struct lepcha { BOOST_SPIRIT_IS_TAG() };
+    struct limbu { BOOST_SPIRIT_IS_TAG() };
+    struct linear_b { BOOST_SPIRIT_IS_TAG() };
+    struct lisu { BOOST_SPIRIT_IS_TAG() };
+    struct lycian { BOOST_SPIRIT_IS_TAG() };
+    struct lydian { BOOST_SPIRIT_IS_TAG() };
+    struct malayalam { BOOST_SPIRIT_IS_TAG() };
+    struct mongolian { BOOST_SPIRIT_IS_TAG() };
+    struct meetei_mayek { BOOST_SPIRIT_IS_TAG() };
+    struct myanmar { BOOST_SPIRIT_IS_TAG() };
+    struct nko { BOOST_SPIRIT_IS_TAG() };
+    struct ogham { BOOST_SPIRIT_IS_TAG() };
+    struct ol_chiki { BOOST_SPIRIT_IS_TAG() };
+    struct old_turkic { BOOST_SPIRIT_IS_TAG() };
+    struct oriya { BOOST_SPIRIT_IS_TAG() };
+    struct osmanya { BOOST_SPIRIT_IS_TAG() };
+    struct phags_pa { BOOST_SPIRIT_IS_TAG() };
+    struct inscriptional_pahlavi { BOOST_SPIRIT_IS_TAG() };
+    struct phoenician { BOOST_SPIRIT_IS_TAG() };
+    struct inscriptional_parthian { BOOST_SPIRIT_IS_TAG() };
+    struct rejang { BOOST_SPIRIT_IS_TAG() };
+    struct runic { BOOST_SPIRIT_IS_TAG() };
+    struct samaritan { BOOST_SPIRIT_IS_TAG() };
+    struct old_south_arabian { BOOST_SPIRIT_IS_TAG() };
+    struct saurashtra { BOOST_SPIRIT_IS_TAG() };
+    struct shavian { BOOST_SPIRIT_IS_TAG() };
+    struct sinhala { BOOST_SPIRIT_IS_TAG() };
+    struct sundanese { BOOST_SPIRIT_IS_TAG() };
+    struct syloti_nagri { BOOST_SPIRIT_IS_TAG() };
+    struct syriac { BOOST_SPIRIT_IS_TAG() };
+    struct tagbanwa { BOOST_SPIRIT_IS_TAG() };
+    struct tai_le { BOOST_SPIRIT_IS_TAG() };
+    struct new_tai_lue { BOOST_SPIRIT_IS_TAG() };
+    struct tamil { BOOST_SPIRIT_IS_TAG() };
+    struct tai_viet { BOOST_SPIRIT_IS_TAG() };
+    struct telugu { BOOST_SPIRIT_IS_TAG() };
+    struct tifinagh { BOOST_SPIRIT_IS_TAG() };
+    struct tagalog { BOOST_SPIRIT_IS_TAG() };
+    struct thaana { BOOST_SPIRIT_IS_TAG() };
+    struct thai { BOOST_SPIRIT_IS_TAG() };
+    struct tibetan { BOOST_SPIRIT_IS_TAG() };
+    struct ugaritic { BOOST_SPIRIT_IS_TAG() };
+    struct vai { BOOST_SPIRIT_IS_TAG() };
+    struct old_persian { BOOST_SPIRIT_IS_TAG() };
+    struct cuneiform { BOOST_SPIRIT_IS_TAG() };
+    struct yi { BOOST_SPIRIT_IS_TAG() };
+    struct inherited { BOOST_SPIRIT_IS_TAG() };
+    struct common { BOOST_SPIRIT_IS_TAG() };
+    struct unknown { BOOST_SPIRIT_IS_TAG() };
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This composite tag type encodes both the character
+    // set and the specific char tag (used for classification
+    // or conversion). char_code_base and char_encoding_base
+    // can be used to test for modifier membership (see modifier.hpp)
+    template <typename CharClass>
+    struct char_code_base {};
+
+    template <typename CharEncoding>
+    struct char_encoding_base {};
+
+    template <typename CharClass, typename CharEncoding>
+    struct char_code
+        : char_code_base<CharClass>, char_encoding_base<CharEncoding>
+    {
+        BOOST_SPIRIT_IS_TAG()
+        typedef CharEncoding char_encoding; // e.g. ascii
+        typedef CharClass char_class;       // e.g. tag::alnum
+    };
+}}}
+
+namespace boost { namespace spirit { namespace char_class
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Test characters for classification
+    template <typename CharEncoding>
+    struct classify
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+#define BOOST_SPIRIT_CLASSIFY(name, isname)                                     \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(tag::name, Char ch)                                                  \
+        {                                                                       \
+            return CharEncoding::isname                                         \
+                BOOST_PREVENT_MACRO_SUBSTITUTION                                \
+                    (detail::cast_char<char_type>(ch));                         \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CLASSIFY(char_, ischar)
+        BOOST_SPIRIT_CLASSIFY(alnum, isalnum)
+        BOOST_SPIRIT_CLASSIFY(alpha, isalpha)
+        BOOST_SPIRIT_CLASSIFY(digit, isdigit)
+        BOOST_SPIRIT_CLASSIFY(xdigit, isxdigit)
+        BOOST_SPIRIT_CLASSIFY(cntrl, iscntrl)
+        BOOST_SPIRIT_CLASSIFY(graph, isgraph)
+        BOOST_SPIRIT_CLASSIFY(lower, islower)
+        BOOST_SPIRIT_CLASSIFY(print, isprint)
+        BOOST_SPIRIT_CLASSIFY(punct, ispunct)
+        BOOST_SPIRIT_CLASSIFY(space, isspace)
+        BOOST_SPIRIT_CLASSIFY(blank, isblank)
+        BOOST_SPIRIT_CLASSIFY(upper, isupper)
+
+#undef BOOST_SPIRIT_CLASSIFY
+
+        template <typename Char>
+        static bool
+        is(tag::lowernum, Char ch)
+        {
+            return CharEncoding::islower(detail::cast_char<char_type>(ch)) ||
+                   CharEncoding::isdigit(detail::cast_char<char_type>(ch));
+        }
+
+        template <typename Char>
+        static bool
+        is(tag::uppernum, Char ch)
+        {
+            return CharEncoding::isupper(detail::cast_char<char_type>(ch)) ||
+                   CharEncoding::isdigit(detail::cast_char<char_type>(ch));
+        }
+
+#if defined(BOOST_SPIRIT_UNICODE)
+
+#define BOOST_SPIRIT_UNICODE_CLASSIFY(name)                                     \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(tag::name, Char ch)                                                  \
+        {                                                                       \
+            return CharEncoding::is_##name(detail::cast_char<char_type>(ch));   \
+        }                                                                       \
+        /***/
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(titlecase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_letter)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(nonspacing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(enclosing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(spacing_mark)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(decimal_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(letter_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_number)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(space_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(line_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(paragraph_separator)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(control)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(format)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(private_use)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(surrogate)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(unassigned)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(dash_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(open_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(close_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(connector_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(initial_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(final_punctuation)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY(math_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(currency_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(other_symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(alphabetic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(white_space)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hex_digit)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(noncharacter_code_point)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(default_ignorable_code_point)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY(arabic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(imperial_aramaic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(armenian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(avestan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(balinese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bamum)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bengali)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(bopomofo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(braille)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(buginese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(buhid)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(canadian_aboriginal)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(carian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cherokee)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(coptic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cypriot)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cyrillic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(devanagari)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(deseret)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(egyptian_hieroglyphs)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ethiopic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(georgian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(glagolitic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gothic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(greek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gujarati)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(gurmukhi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hangul)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(han)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hanunoo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hebrew)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(katakana_or_hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_italic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(javanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kayah_li)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(katakana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kharoshthi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(khmer)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kannada)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(kaithi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_tham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lao)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(latin)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lepcha)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(limbu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(linear_b)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lisu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lycian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(lydian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(malayalam)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(mongolian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(meetei_mayek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(myanmar)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(nko)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ogham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ol_chiki)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_turkic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(oriya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(osmanya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(phags_pa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_pahlavi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(phoenician)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_parthian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(rejang)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(runic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(samaritan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_south_arabian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(saurashtra)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(shavian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(sinhala)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(sundanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(syloti_nagri)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(syriac)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tagbanwa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_le)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(new_tai_lue)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tamil)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tai_viet)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(telugu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tifinagh)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tagalog)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(thaana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(thai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(tibetan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(ugaritic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(vai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(old_persian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(cuneiform)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(yi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(inherited)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(common)
+    BOOST_SPIRIT_UNICODE_CLASSIFY(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CLASSIFY
+#endif
+
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Convert characters
+    template <typename CharEncoding>
+    struct convert
+    {
+        typedef typename CharEncoding::char_type char_type;
+
+        template <typename Char>
+        static Char
+        to(tag::lower, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::tolower(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(tag::upper, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::toupper(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(tag::ucs4, Char ch)
+        {
+            return static_cast<Char>(
+                CharEncoding::toucs4(detail::cast_char<char_type>(ch)));
+        }
+
+        template <typename Char>
+        static Char
+        to(unused_type, Char ch)
+        {
+            return ch;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Info on character classification
+    template <typename CharEncoding>
+    struct what
+    {
+#define BOOST_SPIRIT_CLASSIFY_WHAT(name, isname)                                \
+        static char const* is(tag::name)                                        \
+        {                                                                       \
+            return isname;                                                      \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CLASSIFY_WHAT(char_, "char")
+        BOOST_SPIRIT_CLASSIFY_WHAT(alnum, "alnum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(alpha, "alpha")
+        BOOST_SPIRIT_CLASSIFY_WHAT(digit, "digit")
+        BOOST_SPIRIT_CLASSIFY_WHAT(xdigit, "xdigit")
+        BOOST_SPIRIT_CLASSIFY_WHAT(cntrl, "cntrl")
+        BOOST_SPIRIT_CLASSIFY_WHAT(graph, "graph")
+        BOOST_SPIRIT_CLASSIFY_WHAT(lower, "lower")
+        BOOST_SPIRIT_CLASSIFY_WHAT(lowernum, "lowernum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(print, "print")
+        BOOST_SPIRIT_CLASSIFY_WHAT(punct, "punct")
+        BOOST_SPIRIT_CLASSIFY_WHAT(space, "space")
+        BOOST_SPIRIT_CLASSIFY_WHAT(blank, "blank")
+        BOOST_SPIRIT_CLASSIFY_WHAT(upper, "upper")
+        BOOST_SPIRIT_CLASSIFY_WHAT(uppernum, "uppernum")
+        BOOST_SPIRIT_CLASSIFY_WHAT(ucs4, "ucs4")
+
+#undef BOOST_SPIRIT_CLASSIFY_WHAT
+
+#if defined(BOOST_SPIRIT_UNICODE)
+
+#define BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(name)                                \
+        static char const* is(tag::name)                                        \
+        {                                                                       \
+            return BOOST_PP_STRINGIZE(name);                                    \
+        }                                                                       \
+        /***/
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Major Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode General Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(titlecase_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_letter)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_letter)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nonspacing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(enclosing_mark)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(spacing_mark)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(decimal_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter_number)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_number)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(space_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(line_separator)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(paragraph_separator)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(control)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(format)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(private_use)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(surrogate)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unassigned)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dash_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(open_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(close_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(connector_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(initial_punctuation)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(final_punctuation)
+
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(math_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(currency_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_symbol)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_symbol)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Derived Categories
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(alphabetic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(white_space)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hex_digit)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(noncharacter_code_point)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(default_ignorable_code_point)
+
+///////////////////////////////////////////////////////////////////////////
+//  Unicode Scripts
+///////////////////////////////////////////////////////////////////////////
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(arabic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(imperial_aramaic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(armenian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(avestan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(balinese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bamum)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bengali)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bopomofo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(braille)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buginese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buhid)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(canadian_aboriginal)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(carian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cherokee)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(coptic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypriot)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cyrillic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(devanagari)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(deseret)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(egyptian_hieroglyphs)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ethiopic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(georgian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(glagolitic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gothic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(greek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gujarati)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gurmukhi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hangul)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(han)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanunoo)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hebrew)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana_or_hiragana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_italic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(javanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kayah_li)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kharoshthi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khmer)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kannada)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kaithi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_tham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lao)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(latin)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lepcha)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(limbu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_b)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lisu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lycian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lydian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(malayalam)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mongolian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meetei_mayek)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(myanmar)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nko)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ogham)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ol_chiki)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_turkic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(oriya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osmanya)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phags_pa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_pahlavi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phoenician)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_parthian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(rejang)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(runic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(samaritan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_south_arabian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(saurashtra)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(shavian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sinhala)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sundanese)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syloti_nagri)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syriac)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagbanwa)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_le)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(new_tai_lue)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tamil)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_viet)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(telugu)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tifinagh)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagalog)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thaana)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tibetan)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ugaritic)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vai)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_persian)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cuneiform)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yi)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inherited)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(common)
+    BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT
+#endif
+
+    };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // This meta-function evaluates to mpl::true_ if the function
+    // char_encoding::ischar() needs to be called to ensure correct matching.
+    // This happens mainly if the character type returned from the underlying
+    // iterator is larger than the character type of the used character
+    // encoding. Additionally, this meta-function provides a customization
+    // point for the lexer library to enforce this behavior while parsing
+    // a token stream.
+    template <typename Char, typename BaseChar>
+    struct mustcheck_ischar
+      : mpl::bool_<(sizeof(Char) > sizeof(BaseChar)) ? true : false> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The following template calls char_encoding::ischar, if necessary
+    template <typename CharParam, typename CharEncoding
+      , bool MustCheck = mustcheck_ischar<
+            CharParam, typename CharEncoding::char_type>::value>
+    struct ischar
+    {
+        static bool call(CharParam)
+        {
+            return true;
+        }
+    };
+
+    template <typename CharParam, typename CharEncoding>
+    struct ischar<CharParam, CharEncoding, true>
+    {
+        static bool call(CharParam const& ch)
+        {
+            return CharEncoding::ischar(int(ch));
+        }
+    };
+
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/ascii.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/ascii.hpp
new file mode 100644 (file)
index 0000000..8bd6c11
--- /dev/null
@@ -0,0 +1,313 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASCII_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_ASCII_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <climits>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// constants used to classify the single characters
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_CC_DIGIT    0x0001
+#define BOOST_CC_XDIGIT   0x0002
+#define BOOST_CC_ALPHA    0x0004
+#define BOOST_CC_CTRL     0x0008
+#define BOOST_CC_LOWER    0x0010
+#define BOOST_CC_UPPER    0x0020
+#define BOOST_CC_SPACE    0x0040
+#define BOOST_CC_PUNCT    0x0080
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    // The detection of isgraph(), isprint() and isblank() is done programmatically
+    // to keep the character type table small. Additionally, these functions are
+    // rather seldom used and the programmatic detection is very simple.
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ASCII character classification table
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char ascii_char_types[] =
+    {
+        /* NUL   0   0 */   BOOST_CC_CTRL,
+        /* SOH   1   1 */   BOOST_CC_CTRL,
+        /* STX   2   2 */   BOOST_CC_CTRL,
+        /* ETX   3   3 */   BOOST_CC_CTRL,
+        /* EOT   4   4 */   BOOST_CC_CTRL,
+        /* ENQ   5   5 */   BOOST_CC_CTRL,
+        /* ACK   6   6 */   BOOST_CC_CTRL,
+        /* BEL   7   7 */   BOOST_CC_CTRL,
+        /* BS    8   8 */   BOOST_CC_CTRL,
+        /* HT    9   9 */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NL   10   a */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* VT   11   b */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NP   12   c */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* CR   13   d */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* SO   14   e */   BOOST_CC_CTRL,
+        /* SI   15   f */   BOOST_CC_CTRL,
+        /* DLE  16  10 */   BOOST_CC_CTRL,
+        /* DC1  17  11 */   BOOST_CC_CTRL,
+        /* DC2  18  12 */   BOOST_CC_CTRL,
+        /* DC3  19  13 */   BOOST_CC_CTRL,
+        /* DC4  20  14 */   BOOST_CC_CTRL,
+        /* NAK  21  15 */   BOOST_CC_CTRL,
+        /* SYN  22  16 */   BOOST_CC_CTRL,
+        /* ETB  23  17 */   BOOST_CC_CTRL,
+        /* CAN  24  18 */   BOOST_CC_CTRL,
+        /* EM   25  19 */   BOOST_CC_CTRL,
+        /* SUB  26  1a */   BOOST_CC_CTRL,
+        /* ESC  27  1b */   BOOST_CC_CTRL,
+        /* FS   28  1c */   BOOST_CC_CTRL,
+        /* GS   29  1d */   BOOST_CC_CTRL,
+        /* RS   30  1e */   BOOST_CC_CTRL,
+        /* US   31  1f */   BOOST_CC_CTRL,
+        /* SP   32  20 */   BOOST_CC_SPACE,
+        /*  !   33  21 */   BOOST_CC_PUNCT,
+        /*  "   34  22 */   BOOST_CC_PUNCT,
+        /*  #   35  23 */   BOOST_CC_PUNCT,
+        /*  $   36  24 */   BOOST_CC_PUNCT,
+        /*  %   37  25 */   BOOST_CC_PUNCT,
+        /*  &   38  26 */   BOOST_CC_PUNCT,
+        /*  '   39  27 */   BOOST_CC_PUNCT,
+        /*  (   40  28 */   BOOST_CC_PUNCT,
+        /*  )   41  29 */   BOOST_CC_PUNCT,
+        /*  *   42  2a */   BOOST_CC_PUNCT,
+        /*  +   43  2b */   BOOST_CC_PUNCT,
+        /*  ,   44  2c */   BOOST_CC_PUNCT,
+        /*  -   45  2d */   BOOST_CC_PUNCT,
+        /*  .   46  2e */   BOOST_CC_PUNCT,
+        /*  /   47  2f */   BOOST_CC_PUNCT,
+        /*  0   48  30 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  1   49  31 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  2   50  32 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  3   51  33 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  4   52  34 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  5   53  35 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  6   54  36 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  7   55  37 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  8   56  38 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  9   57  39 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  :   58  3a */   BOOST_CC_PUNCT,
+        /*  ;   59  3b */   BOOST_CC_PUNCT,
+        /*  <   60  3c */   BOOST_CC_PUNCT,
+        /*  =   61  3d */   BOOST_CC_PUNCT,
+        /*  >   62  3e */   BOOST_CC_PUNCT,
+        /*  ?   63  3f */   BOOST_CC_PUNCT,
+        /*  @   64  40 */   BOOST_CC_PUNCT,
+        /*  A   65  41 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  B   66  42 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  C   67  43 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  D   68  44 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  E   69  45 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  F   70  46 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  G   71  47 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  H   72  48 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  I   73  49 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  J   74  4a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  K   75  4b */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  L   76  4c */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  M   77  4d */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  N   78  4e */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  O   79  4f */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  P   80  50 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Q   81  51 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  R   82  52 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  S   83  53 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  T   84  54 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  U   85  55 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  V   86  56 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  W   87  57 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  X   88  58 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Y   89  59 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Z   90  5a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  [   91  5b */   BOOST_CC_PUNCT,
+        /*  \   92  5c */   BOOST_CC_PUNCT,
+        /*  ]   93  5d */   BOOST_CC_PUNCT,
+        /*  ^   94  5e */   BOOST_CC_PUNCT,
+        /*  _   95  5f */   BOOST_CC_PUNCT,
+        /*  `   96  60 */   BOOST_CC_PUNCT,
+        /*  a   97  61 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  b   98  62 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  c   99  63 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  d  100  64 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  e  101  65 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  f  102  66 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  g  103  67 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  h  104  68 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  i  105  69 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  j  106  6a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  k  107  6b */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  l  108  6c */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  m  109  6d */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  n  110  6e */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  o  111  6f */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  p  112  70 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  q  113  71 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  r  114  72 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  s  115  73 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  t  116  74 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  u  117  75 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  v  118  76 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  w  119  77 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  x  120  78 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  y  121  79 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  z  122  7a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  {  123  7b */   BOOST_CC_PUNCT,
+        /*  |  124  7c */   BOOST_CC_PUNCT,
+        /*  }  125  7d */   BOOST_CC_PUNCT,
+        /*  ~  126  7e */   BOOST_CC_PUNCT,
+        /* DEL 127  7f */   BOOST_CC_CTRL,
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using ASCII)
+    ///////////////////////////////////////////////////////////////////////////
+    struct ascii
+    {
+        typedef char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            return isascii_(ch);
+        }
+
+        static bool
+        isalnum(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_ALPHA)
+                || (ascii_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static bool
+        isalpha(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_ALPHA) ? true : false;
+        }
+
+        static bool
+        isdigit(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_DIGIT) ? true : false;
+        }
+
+        static bool
+        isxdigit(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_XDIGIT) ? true : false;
+        }
+
+        static bool
+        iscntrl(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_CTRL) ? true : false;
+        }
+
+        static bool
+        isgraph(int ch)
+        {
+            return ('\x21' <= ch && ch <= '\x7e');
+        }
+
+        static bool
+        islower(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_LOWER) ? true : false;
+        }
+
+        static bool
+        isprint(int ch)
+        {
+            return ('\x20' <= ch && ch <= '\x7e');
+        }
+
+        static bool
+        ispunct(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_PUNCT) ? true : false;
+        }
+
+        static bool
+        isspace(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_SPACE) ? true : false;
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return ('\x09' == ch || '\x20' == ch);
+        }
+
+        static bool
+        isupper(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return (ascii_char_types[ch] & BOOST_CC_UPPER) ? true : false;
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Simple character conversions
+        ///////////////////////////////////////////////////////////////////////
+
+        static int
+        tolower(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return isupper(ch) ? (ch - 'A' + 'a') : ch;
+        }
+
+        static int
+        toupper(int ch)
+        {
+            BOOST_ASSERT(isascii_(ch));
+            return islower(ch) ? (ch - 'a' + 'A') : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// undefine macros
+///////////////////////////////////////////////////////////////////////////////
+#undef BOOST_CC_DIGIT
+#undef BOOST_CC_XDIGIT
+#undef BOOST_CC_ALPHA
+#undef BOOST_CC_CTRL
+#undef BOOST_CC_LOWER
+#undef BOOST_CC_UPPER
+#undef BOOST_CC_PUNCT
+#undef BOOST_CC_SPACE
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/iso8859_1.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/iso8859_1.hpp
new file mode 100644 (file)
index 0000000..b2b5dd1
--- /dev/null
@@ -0,0 +1,711 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <climits>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// constants used to classify the single characters
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_CC_DIGIT    0x0001
+#define BOOST_CC_XDIGIT   0x0002
+#define BOOST_CC_ALPHA    0x0004
+#define BOOST_CC_CTRL     0x0008
+#define BOOST_CC_LOWER    0x0010
+#define BOOST_CC_UPPER    0x0020
+#define BOOST_CC_SPACE    0x0040
+#define BOOST_CC_PUNCT    0x0080
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    // The detection of isgraph(), isprint() and isblank() is done programmatically
+    // to keep the character type table small. Additionally, these functions are
+    // rather seldom used and the programmatic detection is very simple.
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ISO 8859-1 character classification table
+    //
+    // the comments intentionally contain non-ascii characters
+    // boostinspect:noascii
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char iso8859_1_char_types[] =
+    {
+        /* NUL   0   0 */   BOOST_CC_CTRL,
+        /* SOH   1   1 */   BOOST_CC_CTRL,
+        /* STX   2   2 */   BOOST_CC_CTRL,
+        /* ETX   3   3 */   BOOST_CC_CTRL,
+        /* EOT   4   4 */   BOOST_CC_CTRL,
+        /* ENQ   5   5 */   BOOST_CC_CTRL,
+        /* ACK   6   6 */   BOOST_CC_CTRL,
+        /* BEL   7   7 */   BOOST_CC_CTRL,
+        /* BS    8   8 */   BOOST_CC_CTRL,
+        /* HT    9   9 */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NL   10   a */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* VT   11   b */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* NP   12   c */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* CR   13   d */   BOOST_CC_CTRL|BOOST_CC_SPACE,
+        /* SO   14   e */   BOOST_CC_CTRL,
+        /* SI   15   f */   BOOST_CC_CTRL,
+        /* DLE  16  10 */   BOOST_CC_CTRL,
+        /* DC1  17  11 */   BOOST_CC_CTRL,
+        /* DC2  18  12 */   BOOST_CC_CTRL,
+        /* DC3  19  13 */   BOOST_CC_CTRL,
+        /* DC4  20  14 */   BOOST_CC_CTRL,
+        /* NAK  21  15 */   BOOST_CC_CTRL,
+        /* SYN  22  16 */   BOOST_CC_CTRL,
+        /* ETB  23  17 */   BOOST_CC_CTRL,
+        /* CAN  24  18 */   BOOST_CC_CTRL,
+        /* EM   25  19 */   BOOST_CC_CTRL,
+        /* SUB  26  1a */   BOOST_CC_CTRL,
+        /* ESC  27  1b */   BOOST_CC_CTRL,
+        /* FS   28  1c */   BOOST_CC_CTRL,
+        /* GS   29  1d */   BOOST_CC_CTRL,
+        /* RS   30  1e */   BOOST_CC_CTRL,
+        /* US   31  1f */   BOOST_CC_CTRL,
+        /* SP   32  20 */   BOOST_CC_SPACE,
+        /*  !   33  21 */   BOOST_CC_PUNCT,
+        /*  "   34  22 */   BOOST_CC_PUNCT,
+        /*  #   35  23 */   BOOST_CC_PUNCT,
+        /*  $   36  24 */   BOOST_CC_PUNCT,
+        /*  %   37  25 */   BOOST_CC_PUNCT,
+        /*  &   38  26 */   BOOST_CC_PUNCT,
+        /*  '   39  27 */   BOOST_CC_PUNCT,
+        /*  (   40  28 */   BOOST_CC_PUNCT,
+        /*  )   41  29 */   BOOST_CC_PUNCT,
+        /*  *   42  2a */   BOOST_CC_PUNCT,
+        /*  +   43  2b */   BOOST_CC_PUNCT,
+        /*  ,   44  2c */   BOOST_CC_PUNCT,
+        /*  -   45  2d */   BOOST_CC_PUNCT,
+        /*  .   46  2e */   BOOST_CC_PUNCT,
+        /*  /   47  2f */   BOOST_CC_PUNCT,
+        /*  0   48  30 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  1   49  31 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  2   50  32 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  3   51  33 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  4   52  34 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  5   53  35 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  6   54  36 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  7   55  37 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  8   56  38 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  9   57  39 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
+        /*  :   58  3a */   BOOST_CC_PUNCT,
+        /*  ;   59  3b */   BOOST_CC_PUNCT,
+        /*  <   60  3c */   BOOST_CC_PUNCT,
+        /*  =   61  3d */   BOOST_CC_PUNCT,
+        /*  >   62  3e */   BOOST_CC_PUNCT,
+        /*  ?   63  3f */   BOOST_CC_PUNCT,
+        /*  @   64  40 */   BOOST_CC_PUNCT,
+        /*  A   65  41 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  B   66  42 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  C   67  43 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  D   68  44 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  E   69  45 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  F   70  46 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
+        /*  G   71  47 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  H   72  48 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  I   73  49 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  J   74  4a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  K   75  4b */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  L   76  4c */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  M   77  4d */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  N   78  4e */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  O   79  4f */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  P   80  50 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Q   81  51 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  R   82  52 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  S   83  53 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  T   84  54 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  U   85  55 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  V   86  56 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  W   87  57 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  X   88  58 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Y   89  59 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Z   90  5a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  [   91  5b */   BOOST_CC_PUNCT,
+        /*  \   92  5c */   BOOST_CC_PUNCT,
+        /*  ]   93  5d */   BOOST_CC_PUNCT,
+        /*  ^   94  5e */   BOOST_CC_PUNCT,
+        /*  _   95  5f */   BOOST_CC_PUNCT,
+        /*  `   96  60 */   BOOST_CC_PUNCT,
+        /*  a   97  61 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  b   98  62 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  c   99  63 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  d  100  64 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  e  101  65 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  f  102  66 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
+        /*  g  103  67 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  h  104  68 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  i  105  69 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  j  106  6a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  k  107  6b */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  l  108  6c */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  m  109  6d */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  n  110  6e */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  o  111  6f */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  p  112  70 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  q  113  71 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  r  114  72 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  s  115  73 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  t  116  74 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  u  117  75 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  v  118  76 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  w  119  77 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  x  120  78 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  y  121  79 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  z  122  7a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  {  123  7b */   BOOST_CC_PUNCT,
+        /*  |  124  7c */   BOOST_CC_PUNCT,
+        /*  }  125  7d */   BOOST_CC_PUNCT,
+        /*  ~  126  7e */   BOOST_CC_PUNCT,
+        /* DEL 127  7f */   BOOST_CC_CTRL,
+        /* --  128  80 */   BOOST_CC_CTRL,
+        /* --  129  81 */   BOOST_CC_CTRL,
+        /* --  130  82 */   BOOST_CC_CTRL,
+        /* --  131  83 */   BOOST_CC_CTRL,
+        /* --  132  84 */   BOOST_CC_CTRL,
+        /* --  133  85 */   BOOST_CC_CTRL,
+        /* --  134  86 */   BOOST_CC_CTRL,
+        /* --  135  87 */   BOOST_CC_CTRL,
+        /* --  136  88 */   BOOST_CC_CTRL,
+        /* --  137  89 */   BOOST_CC_CTRL,
+        /* --  138  8a */   BOOST_CC_CTRL,
+        /* --  139  8b */   BOOST_CC_CTRL,
+        /* --  140  8c */   BOOST_CC_CTRL,
+        /* --  141  8d */   BOOST_CC_CTRL,
+        /* --  142  8e */   BOOST_CC_CTRL,
+        /* --  143  8f */   BOOST_CC_CTRL,
+        /* --  144  90 */   BOOST_CC_CTRL,
+        /* --  145  91 */   BOOST_CC_CTRL,
+        /* --  146  92 */   BOOST_CC_CTRL,
+        /* --  147  93 */   BOOST_CC_CTRL,
+        /* --  148  94 */   BOOST_CC_CTRL,
+        /* --  149  95 */   BOOST_CC_CTRL,
+        /* --  150  96 */   BOOST_CC_CTRL,
+        /* --  151  97 */   BOOST_CC_CTRL,
+        /* --  152  98 */   BOOST_CC_CTRL,
+        /* --  153  99 */   BOOST_CC_CTRL,
+        /* --  154  9a */   BOOST_CC_CTRL,
+        /* --  155  9b */   BOOST_CC_CTRL,
+        /* --  156  9c */   BOOST_CC_CTRL,
+        /* --  157  9d */   BOOST_CC_CTRL,
+        /* --  158  9e */   BOOST_CC_CTRL,
+        /* --  159  9f */   BOOST_CC_CTRL,
+        /*     160  a0 */   BOOST_CC_SPACE,
+        /*  ¡  161  a1 */   BOOST_CC_PUNCT,
+        /*  ¢  162  a2 */   BOOST_CC_PUNCT,
+        /*  £  163  a3 */   BOOST_CC_PUNCT,
+        /*  ¤  164  a4 */   BOOST_CC_PUNCT,
+        /*  ¥  165  a5 */   BOOST_CC_PUNCT,
+        /*  ¦  166  a6 */   BOOST_CC_PUNCT,
+        /*  §  167  a7 */   BOOST_CC_PUNCT,
+        /*  ¨  168  a8 */   BOOST_CC_PUNCT,
+        /*  ©  169  a9 */   BOOST_CC_PUNCT,
+        /*  ª  170  aa */   BOOST_CC_PUNCT,
+        /*  «  171  ab */   BOOST_CC_PUNCT,
+        /*  ¬  172  ac */   BOOST_CC_PUNCT,
+        /*  ­  173  ad */   BOOST_CC_PUNCT,
+        /*  ®  174  ae */   BOOST_CC_PUNCT,
+        /*  ¯  175  af */   BOOST_CC_PUNCT,
+        /*  °  176  b0 */   BOOST_CC_PUNCT,
+        /*  ±  177  b1 */   BOOST_CC_PUNCT,
+        /*  ²  178  b2 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  ³  179  b3 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  ´  180  b4 */   BOOST_CC_PUNCT,
+        /*  µ  181  b5 */   BOOST_CC_PUNCT,
+        /*  ¶  182  b6 */   BOOST_CC_PUNCT,
+        /*  ·  183  b7 */   BOOST_CC_PUNCT,
+        /*  ¸  184  b8 */   BOOST_CC_PUNCT,
+        /*  ¹  185  b9 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
+        /*  º  186  ba */   BOOST_CC_PUNCT,
+        /*  »  187  bb */   BOOST_CC_PUNCT,
+        /*  ¼  188  bc */   BOOST_CC_PUNCT,
+        /*  ½  189  bd */   BOOST_CC_PUNCT,
+        /*  ¾  190  be */   BOOST_CC_PUNCT,
+        /*  ¿  191  bf */   BOOST_CC_PUNCT,
+        /*  À  192  c0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Á  193  c1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Â  194  c2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ã  195  c3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ä  196  c4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Å  197  c5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Æ  198  c6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ç  199  c7 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  È  200  c8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  É  201  c9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ê  202  ca */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ë  203  cb */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ì  204  cc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Í  205  cd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Î  206  ce */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ï  207  cf */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ð  208  d0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ñ  209  d1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ò  210  d2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ó  211  d3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ô  212  d4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Õ  213  d5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ö  214  d6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  ×  215  d7 */   BOOST_CC_PUNCT,
+        /*  Ø  216  d8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ù  217  d9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ú  218  da */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Û  219  db */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ü  220  dc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Ý  221  dd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  Þ  222  de */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
+        /*  ß  223  df */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  à  224  e0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  á  225  e1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  â  226  e2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ã  227  e3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ä  228  e4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  å  229  e5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  æ  230  e6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ç  231  e7 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  è  232  e8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  é  233  e9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ê  234  ea */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ë  235  eb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ì  236  ec */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  í  237  ed */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  î  238  ee */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ï  239  ef */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ð  240  f0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ñ  241  f1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ò  242  f2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ó  243  f3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ô  244  f4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  õ  245  f5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ö  246  f6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ÷  247  f7 */   BOOST_CC_PUNCT,
+        /*  ø  248  f8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ù  249  f9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ú  250  fa */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  û  251  fb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ü  252  fc */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ý  253  fd */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  þ  254  fe */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+        /*  ÿ  255  ff */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ISO 8859-1 character conversion table
+    ///////////////////////////////////////////////////////////////////////////
+    const unsigned char iso8859_1_char_conversion[] =
+    {
+        /* NUL   0   0 */   '\0',
+        /* SOH   1   1 */   '\0',
+        /* STX   2   2 */   '\0',
+        /* ETX   3   3 */   '\0',
+        /* EOT   4   4 */   '\0',
+        /* ENQ   5   5 */   '\0',
+        /* ACK   6   6 */   '\0',
+        /* BEL   7   7 */   '\0',
+        /* BS    8   8 */   '\0',
+        /* HT    9   9 */   '\0',
+        /* NL   10   a */   '\0',
+        /* VT   11   b */   '\0',
+        /* NP   12   c */   '\0',
+        /* CR   13   d */   '\0',
+        /* SO   14   e */   '\0',
+        /* SI   15   f */   '\0',
+        /* DLE  16  10 */   '\0',
+        /* DC1  17  11 */   '\0',
+        /* DC2  18  12 */   '\0',
+        /* DC3  19  13 */   '\0',
+        /* DC4  20  14 */   '\0',
+        /* NAK  21  15 */   '\0',
+        /* SYN  22  16 */   '\0',
+        /* ETB  23  17 */   '\0',
+        /* CAN  24  18 */   '\0',
+        /* EM   25  19 */   '\0',
+        /* SUB  26  1a */   '\0',
+        /* ESC  27  1b */   '\0',
+        /* FS   28  1c */   '\0',
+        /* GS   29  1d */   '\0',
+        /* RS   30  1e */   '\0',
+        /* US   31  1f */   '\0',
+        /* SP   32  20 */   '\0',
+        /*  !   33  21 */   '\0',
+        /*  "   34  22 */   '\0',
+        /*  #   35  23 */   '\0',
+        /*  $   36  24 */   '\0',
+        /*  %   37  25 */   '\0',
+        /*  &   38  26 */   '\0',
+        /*  '   39  27 */   '\0',
+        /*  (   40  28 */   '\0',
+        /*  )   41  29 */   '\0',
+        /*  *   42  2a */   '\0',
+        /*  +   43  2b */   '\0',
+        /*  ,   44  2c */   '\0',
+        /*  -   45  2d */   '\0',
+        /*  .   46  2e */   '\0',
+        /*  /   47  2f */   '\0',
+        /*  0   48  30 */   '\0',
+        /*  1   49  31 */   '\0',
+        /*  2   50  32 */   '\0',
+        /*  3   51  33 */   '\0',
+        /*  4   52  34 */   '\0',
+        /*  5   53  35 */   '\0',
+        /*  6   54  36 */   '\0',
+        /*  7   55  37 */   '\0',
+        /*  8   56  38 */   '\0',
+        /*  9   57  39 */   '\0',
+        /*  :   58  3a */   '\0',
+        /*  ;   59  3b */   '\0',
+        /*  <   60  3c */   '\0',
+        /*  =   61  3d */   '\0',
+        /*  >   62  3e */   '\0',
+        /*  ?   63  3f */   '\0',
+        /*  @   64  40 */   '\0',
+        /*  A   65  41 */   'a',
+        /*  B   66  42 */   'b',
+        /*  C   67  43 */   'c',
+        /*  D   68  44 */   'd',
+        /*  E   69  45 */   'e',
+        /*  F   70  46 */   'f',
+        /*  G   71  47 */   'g',
+        /*  H   72  48 */   'h',
+        /*  I   73  49 */   'i',
+        /*  J   74  4a */   'j',
+        /*  K   75  4b */   'k',
+        /*  L   76  4c */   'l',
+        /*  M   77  4d */   'm',
+        /*  N   78  4e */   'n',
+        /*  O   79  4f */   'o',
+        /*  P   80  50 */   'p',
+        /*  Q   81  51 */   'q',
+        /*  R   82  52 */   'r',
+        /*  S   83  53 */   's',
+        /*  T   84  54 */   't',
+        /*  U   85  55 */   'u',
+        /*  V   86  56 */   'v',
+        /*  W   87  57 */   'w',
+        /*  X   88  58 */   'x',
+        /*  Y   89  59 */   'y',
+        /*  Z   90  5a */   'z',
+        /*  [   91  5b */   '\0',
+        /*  \   92  5c */   '\0',
+        /*  ]   93  5d */   '\0',
+        /*  ^   94  5e */   '\0',
+        /*  _   95  5f */   '\0',
+        /*  `   96  60 */   '\0',
+        /*  a   97  61 */   'A',
+        /*  b   98  62 */   'B',
+        /*  c   99  63 */   'C',
+        /*  d  100  64 */   'D',
+        /*  e  101  65 */   'E',
+        /*  f  102  66 */   'F',
+        /*  g  103  67 */   'G',
+        /*  h  104  68 */   'H',
+        /*  i  105  69 */   'I',
+        /*  j  106  6a */   'J',
+        /*  k  107  6b */   'K',
+        /*  l  108  6c */   'L',
+        /*  m  109  6d */   'M',
+        /*  n  110  6e */   'N',
+        /*  o  111  6f */   'O',
+        /*  p  112  70 */   'P',
+        /*  q  113  71 */   'Q',
+        /*  r  114  72 */   'R',
+        /*  s  115  73 */   'S',
+        /*  t  116  74 */   'T',
+        /*  u  117  75 */   'U',
+        /*  v  118  76 */   'V',
+        /*  w  119  77 */   'W',
+        /*  x  120  78 */   'X',
+        /*  y  121  79 */   'Y',
+        /*  z  122  7a */   'Z',
+        /*  {  123  7b */   '\0',
+        /*  |  124  7c */   '\0',
+        /*  }  125  7d */   '\0',
+        /*  ~  126  7e */   '\0',
+        /* DEL 127  7f */   '\0',
+        /* --  128  80 */   '\0',
+        /* --  129  81 */   '\0',
+        /* --  130  82 */   '\0',
+        /* --  131  83 */   '\0',
+        /* --  132  84 */   '\0',
+        /* --  133  85 */   '\0',
+        /* --  134  86 */   '\0',
+        /* --  135  87 */   '\0',
+        /* --  136  88 */   '\0',
+        /* --  137  89 */   '\0',
+        /* --  138  8a */   '\0',
+        /* --  139  8b */   '\0',
+        /* --  140  8c */   '\0',
+        /* --  141  8d */   '\0',
+        /* --  142  8e */   '\0',
+        /* --  143  8f */   '\0',
+        /* --  144  90 */   '\0',
+        /* --  145  91 */   '\0',
+        /* --  146  92 */   '\0',
+        /* --  147  93 */   '\0',
+        /* --  148  94 */   '\0',
+        /* --  149  95 */   '\0',
+        /* --  150  96 */   '\0',
+        /* --  151  97 */   '\0',
+        /* --  152  98 */   '\0',
+        /* --  153  99 */   '\0',
+        /* --  154  9a */   '\0',
+        /* --  155  9b */   '\0',
+        /* --  156  9c */   '\0',
+        /* --  157  9d */   '\0',
+        /* --  158  9e */   '\0',
+        /* --  159  9f */   '\0',
+        /*     160  a0 */   '\0',
+        /*  ¡  161  a1 */   '\0',
+        /*  ¢  162  a2 */   '\0',
+        /*  £  163  a3 */   '\0',
+        /*  ¤  164  a4 */   '\0',
+        /*  ¥  165  a5 */   '\0',
+        /*  ¦  166  a6 */   '\0',
+        /*  §  167  a7 */   '\0',
+        /*  ¨  168  a8 */   '\0',
+        /*  ©  169  a9 */   '\0',
+        /*  ª  170  aa */   '\0',
+        /*  «  171  ab */   '\0',
+        /*  ¬  172  ac */   '\0',
+        /*  ­  173  ad */   '\0',
+        /*  ®  174  ae */   '\0',
+        /*  ¯  175  af */   '\0',
+        /*  °  176  b0 */   '\0',
+        /*  ±  177  b1 */   '\0',
+        /*  ²  178  b2 */   '\0',
+        /*  ³  179  b3 */   '\0',
+        /*  ´  180  b4 */   '\0',
+        /*  µ  181  b5 */   '\0',
+        /*  ¶  182  b6 */   '\0',
+        /*  ·  183  b7 */   '\0',
+        /*  ¸  184  b8 */   '\0',
+        /*  ¹  185  b9 */   '\0',
+        /*  º  186  ba */   '\0',
+        /*  »  187  bb */   '\0',
+        /*  ¼  188  bc */   '\0',
+        /*  ½  189  bd */   '\0',
+        /*  ¾  190  be */   '\0',
+        /*  ¿  191  bf */   '\0',
+        /*  à  192  c0 */   0xe0,
+        /*  á  193  c1 */   0xe1,
+        /*  â  194  c2 */   0xe2,
+        /*  ã  195  c3 */   0xe3,
+        /*  ä  196  c4 */   0xe4,
+        /*  å  197  c5 */   0xe5,
+        /*  æ  198  c6 */   0xe6,
+        /*  ç  199  c7 */   0xe7,
+        /*  è  200  c8 */   0xe8,
+        /*  é  201  c9 */   0xe9,
+        /*  ê  202  ca */   0xea,
+        /*  ë  203  cb */   0xeb,
+        /*  ì  204  cc */   0xec,
+        /*  í  205  cd */   0xed,
+        /*  î  206  ce */   0xee,
+        /*  ï  207  cf */   0xef,
+        /*  ð  208  d0 */   0xf0,
+        /*  ñ  209  d1 */   0xf1,
+        /*  ò  210  d2 */   0xf2,
+        /*  ó  211  d3 */   0xf3,
+        /*  ô  212  d4 */   0xf4,
+        /*  õ  213  d5 */   0xf5,
+        /*  ö  214  d6 */   0xf6,
+        /*  ×  215  d7 */   '\0',
+        /*  ø  216  d8 */   0xf8,
+        /*  ù  217  d9 */   0xf9,
+        /*  ú  218  da */   0xfa,
+        /*  û  219  db */   0xfb,
+        /*  ü  220  dc */   0xfc,
+        /*  ý  221  dd */   0xfd,
+        /*  þ  222  de */   0xfe,
+        /*  ß  223  df */   '\0',
+        /*  À  224  e0 */   0xc0,
+        /*  Á  225  e1 */   0xc1,
+        /*  Â  226  e2 */   0xc2,
+        /*  Ã  227  e3 */   0xc3,
+        /*  Ä  228  e4 */   0xc4,
+        /*  Å  229  e5 */   0xc5,
+        /*  Æ  230  e6 */   0xc6,
+        /*  Ç  231  e7 */   0xc7,
+        /*  È  232  e8 */   0xc8,
+        /*  É  233  e9 */   0xc9,
+        /*  Ê  234  ea */   0xca,
+        /*  Ë  235  eb */   0xcb,
+        /*  Ì  236  ec */   0xcc,
+        /*  Í  237  ed */   0xcd,
+        /*  Î  238  ee */   0xce,
+        /*  Ï  239  ef */   0xcf,
+        /*  Ð  240  f0 */   0xd0,
+        /*  Ñ  241  f1 */   0xd1,
+        /*  Ò  242  f2 */   0xd2,
+        /*  Ó  243  f3 */   0xd3,
+        /*  Ô  244  f4 */   0xd4,
+        /*  Õ  245  f5 */   0xd5,
+        /*  Ö  246  f6 */   0xd6,
+        /*  ÷  247  f7 */   '\0',
+        /*  Ø  248  f8 */   0xd8,
+        /*  Ù  249  f9 */   0xd9,
+        /*  Ú  250  fa */   0xda,
+        /*  Û  251  fb */   0xdb,
+        /*  Ü  252  fc */   0xdc,
+        /*  Ý  253  fd */   0xdd,
+        /*  Þ  254  fe */   0xde,
+        /*  ÿ  255  ff */   '\0',
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using iso8859-1)
+    ///////////////////////////////////////////////////////////////////////////
+    struct iso8859_1
+    {
+        typedef unsigned char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // iso8859.1 uses all 8 bits
+            // we have to watch out for sign extensions
+            return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
+        }
+
+        static bool
+        isalnum(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA)
+                || (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
+        }
+
+        static bool
+        isalpha(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA) ? true : false;
+        }
+
+        static bool
+        isdigit(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT) ? true : false;
+        }
+
+        static bool
+        isxdigit(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT) ? true : false;
+        }
+
+        static bool
+        iscntrl(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_CTRL) ? true : false;
+        }
+
+        static bool
+        isgraph(int ch)
+        {
+            return ('\x21' <= ch && ch <= '\x7e') || ('\xa1' <= ch && ch <= '\xff');
+        }
+
+        static bool
+        islower(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_LOWER) ? true : false;
+        }
+
+        static bool
+        isprint(int ch)
+        {
+            return ('\x20' <= ch && ch <= '\x7e') || ('\xa0' <= ch && ch <= '\xff');
+        }
+
+        static bool
+        ispunct(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT) ? true : false;
+        }
+
+        static bool
+        isspace(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_SPACE) ? true : false;
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return ('\x09' == ch || '\x20' == ch || '\xa0' == ch);
+        }
+
+        static bool
+        isupper(int ch)
+        {
+            BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
+            return (iso8859_1_char_types[ch] & BOOST_CC_UPPER) ? true : false;
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////
+
+        static int
+        tolower(int ch)
+        {
+            return isupper(ch) && '\0' != iso8859_1_char_conversion[ch] ?
+                iso8859_1_char_conversion[ch] : ch;
+        }
+
+        static int
+        toupper(int ch)
+        {
+            return islower(ch) && '\0' != iso8859_1_char_conversion[ch] ?
+                iso8859_1_char_conversion[ch] : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            // The first 256 characters in Unicode and the UCS are
+            // identical to those in ISO/IEC-8859-1.
+            return ch;
+        }
+    };
+
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// undefine macros
+///////////////////////////////////////////////////////////////////////////////
+#undef BOOST_CC_DIGIT
+#undef BOOST_CC_XDIGIT
+#undef BOOST_CC_ALPHA
+#undef BOOST_CC_CTRL
+#undef BOOST_CC_LOWER
+#undef BOOST_CC_UPPER
+#undef BOOST_CC_PUNCT
+#undef BOOST_CC_SPACE
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard.hpp
new file mode 100644 (file)
index 0000000..fb307ce
--- /dev/null
@@ -0,0 +1,138 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STANDARD_APRIL_26_2006_1106PM)
+#define BOOST_SPIRIT_STANDARD_APRIL_26_2006_1106PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cctype>
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using std functions)
+    ///////////////////////////////////////////////////////////////////////////
+    struct standard
+    {
+        typedef char char_type;
+
+        static bool
+        isascii_(int ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // uses all 8 bits
+            // we have to watch out for sign extensions
+            return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
+        }
+
+        static bool
+        isalnum(int ch)
+        {
+            return std::isalnum(ch) ? true : false;
+        }
+
+        static bool
+        isalpha(int ch)
+        {
+            return std::isalpha(ch) ? true : false;
+        }
+
+        static bool
+        isdigit(int ch)
+        {
+            return std::isdigit(ch) ? true : false;
+        }
+
+        static bool
+        isxdigit(int ch)
+        {
+            return std::isxdigit(ch) ? true : false;
+        }
+
+        static bool
+        iscntrl(int ch)
+        {
+            return std::iscntrl(ch) ? true : false;
+        }
+
+        static bool
+        isgraph(int ch)
+        {
+            return std::isgraph(ch) ? true : false;
+        }
+
+        static bool
+        islower(int ch)
+        {
+            return std::islower(ch) ? true : false;
+        }
+
+        static bool
+        isprint(int ch)
+        {
+            return std::isprint(ch) ? true : false;
+        }
+
+        static bool
+        ispunct(int ch)
+        {
+            return std::ispunct(ch) ? true : false;
+        }
+
+        static bool
+        isspace(int ch)
+        {
+            return std::isspace(ch) ? true : false;
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
+        {
+            return (ch == ' ' || ch == '\t');
+        }
+
+        static bool
+        isupper(int ch)
+        {
+            return std::isupper(ch) ? true : false;
+        }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////////
+
+        static int
+        tolower(int ch)
+        {
+            return std::tolower(ch);
+        }
+
+        static int
+        toupper(int ch)
+        {
+            return std::toupper(ch);
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard_wide.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/standard_wide.hpp
new file mode 100644 (file)
index 0000000..515a388
--- /dev/null
@@ -0,0 +1,186 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM)
+#define BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cwctype>
+#include <string>
+
+#include <boost/cstdint.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <std::size_t N>
+    struct wchar_t_size
+    {
+        BOOST_SPIRIT_ASSERT_MSG(N == 1 || N == 2 || N == 4,
+            not_supported_size_of_wchar_t, ());
+    };
+
+    template <> struct wchar_t_size<1> { enum { mask = 0xff }; };
+    template <> struct wchar_t_size<2> { enum { mask = 0xffff }; };
+    template <> struct wchar_t_size<4> { enum { mask = 0xffffffff }; };
+
+}}}
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using std wchar_t functions)
+    ///////////////////////////////////////////////////////////////////////////
+
+    struct standard_wide
+    {
+        typedef wchar_t char_type;
+
+        template <typename Char>
+        static typename std::char_traits<Char>::int_type
+        to_int_type(Char ch)
+        {
+            return std::char_traits<Char>::to_int_type(ch);
+        }
+
+        template <typename Char>
+        static Char
+        to_char_type(typename std::char_traits<Char>::int_type ch)
+        {
+            return std::char_traits<Char>::to_char_type(ch);
+        }
+
+        static bool
+        ischar(int ch)
+        {
+            // we have to watch out for sign extensions (casting is there to 
+            // silence certain compilers complaining about signed/unsigned
+            // mismatch)
+            return (
+                std::size_t(0) == 
+                    std::size_t(ch & ~traits::wchar_t_size<sizeof(wchar_t)>::mask) || 
+                std::size_t(~0) == 
+                    std::size_t(ch | traits::wchar_t_size<sizeof(wchar_t)>::mask)
+            ) ? true : false;     // any wchar_t, but no other bits set
+        }
+
+        static bool
+        isalnum(wchar_t ch)
+        {
+            using namespace std;
+            return iswalnum(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isalpha(wchar_t ch)
+        {
+            using namespace std;
+            return iswalpha(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        iscntrl(wchar_t ch)
+        {
+            using namespace std;
+            return iswcntrl(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isdigit(wchar_t ch)
+        {
+            using namespace std;
+            return iswdigit(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isgraph(wchar_t ch)
+        {
+            using namespace std;
+            return iswgraph(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        islower(wchar_t ch)
+        {
+            using namespace std;
+            return iswlower(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isprint(wchar_t ch)
+        {
+            using namespace std;
+            return iswprint(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        ispunct(wchar_t ch)
+        {
+            using namespace std;
+            return iswpunct(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isspace(wchar_t ch)
+        {
+            using namespace std;
+            return iswspace(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isupper(wchar_t ch)
+        {
+            using namespace std;
+            return iswupper(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isxdigit(wchar_t ch)
+        {
+            using namespace std;
+            return iswxdigit(to_int_type(ch)) ? true : false;
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (wchar_t ch)
+        {
+            return (ch == L' ' || ch == L'\t');
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  Simple character conversions
+        ///////////////////////////////////////////////////////////////////////
+
+        static wchar_t
+        tolower(wchar_t ch)
+        {
+            using namespace std;
+            return isupper(ch) ?
+                to_char_type<wchar_t>(towlower(to_int_type(ch))) : ch;
+        }
+
+        static wchar_t
+        toupper(wchar_t ch)
+        {
+            using namespace std;
+            return islower(ch) ?
+                to_char_type<wchar_t>(towupper(to_int_type(ch))) : ch;
+        }
+
+        static ::boost::uint32_t
+        toucs4(int ch)
+        {
+            return ch;
+        }
+    };
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode.hpp
new file mode 100644 (file)
index 0000000..b5ec3e6
--- /dev/null
@@ -0,0 +1,339 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM)
+#define BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/spirit/home/support/char_encoding/unicode/query.hpp>
+
+namespace boost { namespace spirit { namespace char_encoding
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Test characters for specified conditions (using iso8859-1)
+    ///////////////////////////////////////////////////////////////////////////
+    struct unicode
+    {
+        typedef ::boost::uint32_t char_type;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Posix stuff
+    ///////////////////////////////////////////////////////////////////////////
+        static bool
+        isascii_(char_type ch)
+        {
+            return 0 == (ch & ~0x7f);
+        }
+
+        static bool
+        ischar(char_type ch)
+        {
+            // unicode code points in the range 0x00 to 0x10FFFF
+            return ch <= 0x10FFFF;
+        }
+
+        static bool
+        isalnum(char_type ch)
+        {
+            return ucd::is_alphanumeric(ch);
+        }
+
+        static bool
+        isalpha(char_type ch)
+        {
+            return ucd::is_alphabetic(ch);
+        }
+
+        static bool
+        isdigit(char_type ch)
+        {
+            return ucd::is_decimal_number(ch);
+        }
+
+        static bool
+        isxdigit(char_type ch)
+        {
+            return ucd::is_hex_digit(ch);
+        }
+
+        static bool
+        iscntrl(char_type ch)
+        {
+            return ucd::is_control(ch);
+        }
+
+        static bool
+        isgraph(char_type ch)
+        {
+            return ucd::is_graph(ch);
+        }
+
+        static bool
+        islower(char_type ch)
+        {
+            return ucd::is_lowercase(ch);
+        }
+
+        static bool
+        isprint(char_type ch)
+        {
+            return ucd::is_print(ch);
+        }
+
+        static bool
+        ispunct(char_type ch)
+        {
+            return ucd::is_punctuation(ch);
+        }
+
+        static bool
+        isspace(char_type ch)
+        {
+            return ucd::is_white_space(ch);
+        }
+
+        static bool
+        isblank BOOST_PREVENT_MACRO_SUBSTITUTION (char_type ch)
+        {
+            return ucd::is_blank(ch);
+        }
+
+        static bool
+        isupper(char_type ch)
+        {
+            return ucd::is_uppercase(ch);
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Simple character conversions
+    ///////////////////////////////////////////////////////////////////////////
+
+        static char_type
+        tolower(char_type ch)
+        {
+            return ucd::to_lowercase(ch);
+        }
+
+        static char_type
+        toupper(char_type ch)
+        {
+            return ucd::to_uppercase(ch);
+        }
+
+        static ::boost::uint32_t
+        toucs4(char_type ch)
+        {
+            return ch;
+        }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_MAJOR_CATEGORY(name)                                       \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_major_category(ch) == ucd::properties::name;        \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_MAJOR_CATEGORY(letter)
+        BOOST_SPIRIT_MAJOR_CATEGORY(mark)
+        BOOST_SPIRIT_MAJOR_CATEGORY(number)
+        BOOST_SPIRIT_MAJOR_CATEGORY(separator)
+        BOOST_SPIRIT_MAJOR_CATEGORY(other)
+        BOOST_SPIRIT_MAJOR_CATEGORY(punctuation)
+        BOOST_SPIRIT_MAJOR_CATEGORY(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  General Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_CATEGORY(name)                                             \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_category(ch) == ucd::properties::name;              \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_CATEGORY(uppercase_letter)
+        BOOST_SPIRIT_CATEGORY(lowercase_letter)
+        BOOST_SPIRIT_CATEGORY(titlecase_letter)
+        BOOST_SPIRIT_CATEGORY(modifier_letter)
+        BOOST_SPIRIT_CATEGORY(other_letter)
+
+        BOOST_SPIRIT_CATEGORY(nonspacing_mark)
+        BOOST_SPIRIT_CATEGORY(enclosing_mark)
+        BOOST_SPIRIT_CATEGORY(spacing_mark)
+
+        BOOST_SPIRIT_CATEGORY(decimal_number)
+        BOOST_SPIRIT_CATEGORY(letter_number)
+        BOOST_SPIRIT_CATEGORY(other_number)
+
+        BOOST_SPIRIT_CATEGORY(space_separator)
+        BOOST_SPIRIT_CATEGORY(line_separator)
+        BOOST_SPIRIT_CATEGORY(paragraph_separator)
+
+        BOOST_SPIRIT_CATEGORY(control)
+        BOOST_SPIRIT_CATEGORY(format)
+        BOOST_SPIRIT_CATEGORY(private_use)
+        BOOST_SPIRIT_CATEGORY(surrogate)
+        BOOST_SPIRIT_CATEGORY(unassigned)
+
+        BOOST_SPIRIT_CATEGORY(dash_punctuation)
+        BOOST_SPIRIT_CATEGORY(open_punctuation)
+        BOOST_SPIRIT_CATEGORY(close_punctuation)
+        BOOST_SPIRIT_CATEGORY(connector_punctuation)
+        BOOST_SPIRIT_CATEGORY(other_punctuation)
+        BOOST_SPIRIT_CATEGORY(initial_punctuation)
+        BOOST_SPIRIT_CATEGORY(final_punctuation)
+
+        BOOST_SPIRIT_CATEGORY(math_symbol)
+        BOOST_SPIRIT_CATEGORY(currency_symbol)
+        BOOST_SPIRIT_CATEGORY(modifier_symbol)
+        BOOST_SPIRIT_CATEGORY(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_DERIVED_CATEGORY(name)                                     \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::is_##name(ch);                                          \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_DERIVED_CATEGORY(alphabetic)
+        BOOST_SPIRIT_DERIVED_CATEGORY(uppercase)
+        BOOST_SPIRIT_DERIVED_CATEGORY(lowercase)
+        BOOST_SPIRIT_DERIVED_CATEGORY(white_space)
+        BOOST_SPIRIT_DERIVED_CATEGORY(hex_digit)
+        BOOST_SPIRIT_DERIVED_CATEGORY(noncharacter_code_point)
+        BOOST_SPIRIT_DERIVED_CATEGORY(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Scripts
+    ///////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_SCRIPT(name)                                               \
+        static bool                                                             \
+        is_##name(char_type ch)                                                 \
+        {                                                                       \
+            return ucd::get_script(ch) == ucd::properties::name;                \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_SCRIPT(arabic)
+        BOOST_SPIRIT_SCRIPT(imperial_aramaic)
+        BOOST_SPIRIT_SCRIPT(armenian)
+        BOOST_SPIRIT_SCRIPT(avestan)
+        BOOST_SPIRIT_SCRIPT(balinese)
+        BOOST_SPIRIT_SCRIPT(bamum)
+        BOOST_SPIRIT_SCRIPT(bengali)
+        BOOST_SPIRIT_SCRIPT(bopomofo)
+        BOOST_SPIRIT_SCRIPT(braille)
+        BOOST_SPIRIT_SCRIPT(buginese)
+        BOOST_SPIRIT_SCRIPT(buhid)
+        BOOST_SPIRIT_SCRIPT(canadian_aboriginal)
+        BOOST_SPIRIT_SCRIPT(carian)
+        BOOST_SPIRIT_SCRIPT(cham)
+        BOOST_SPIRIT_SCRIPT(cherokee)
+        BOOST_SPIRIT_SCRIPT(coptic)
+        BOOST_SPIRIT_SCRIPT(cypriot)
+        BOOST_SPIRIT_SCRIPT(cyrillic)
+        BOOST_SPIRIT_SCRIPT(devanagari)
+        BOOST_SPIRIT_SCRIPT(deseret)
+        BOOST_SPIRIT_SCRIPT(egyptian_hieroglyphs)
+        BOOST_SPIRIT_SCRIPT(ethiopic)
+        BOOST_SPIRIT_SCRIPT(georgian)
+        BOOST_SPIRIT_SCRIPT(glagolitic)
+        BOOST_SPIRIT_SCRIPT(gothic)
+        BOOST_SPIRIT_SCRIPT(greek)
+        BOOST_SPIRIT_SCRIPT(gujarati)
+        BOOST_SPIRIT_SCRIPT(gurmukhi)
+        BOOST_SPIRIT_SCRIPT(hangul)
+        BOOST_SPIRIT_SCRIPT(han)
+        BOOST_SPIRIT_SCRIPT(hanunoo)
+        BOOST_SPIRIT_SCRIPT(hebrew)
+        BOOST_SPIRIT_SCRIPT(hiragana)
+        BOOST_SPIRIT_SCRIPT(katakana_or_hiragana)
+        BOOST_SPIRIT_SCRIPT(old_italic)
+        BOOST_SPIRIT_SCRIPT(javanese)
+        BOOST_SPIRIT_SCRIPT(kayah_li)
+        BOOST_SPIRIT_SCRIPT(katakana)
+        BOOST_SPIRIT_SCRIPT(kharoshthi)
+        BOOST_SPIRIT_SCRIPT(khmer)
+        BOOST_SPIRIT_SCRIPT(kannada)
+        BOOST_SPIRIT_SCRIPT(kaithi)
+        BOOST_SPIRIT_SCRIPT(tai_tham)
+        BOOST_SPIRIT_SCRIPT(lao)
+        BOOST_SPIRIT_SCRIPT(latin)
+        BOOST_SPIRIT_SCRIPT(lepcha)
+        BOOST_SPIRIT_SCRIPT(limbu)
+        BOOST_SPIRIT_SCRIPT(linear_b)
+        BOOST_SPIRIT_SCRIPT(lisu)
+        BOOST_SPIRIT_SCRIPT(lycian)
+        BOOST_SPIRIT_SCRIPT(lydian)
+        BOOST_SPIRIT_SCRIPT(malayalam)
+        BOOST_SPIRIT_SCRIPT(mongolian)
+        BOOST_SPIRIT_SCRIPT(meetei_mayek)
+        BOOST_SPIRIT_SCRIPT(myanmar)
+        BOOST_SPIRIT_SCRIPT(nko)
+        BOOST_SPIRIT_SCRIPT(ogham)
+        BOOST_SPIRIT_SCRIPT(ol_chiki)
+        BOOST_SPIRIT_SCRIPT(old_turkic)
+        BOOST_SPIRIT_SCRIPT(oriya)
+        BOOST_SPIRIT_SCRIPT(osmanya)
+        BOOST_SPIRIT_SCRIPT(phags_pa)
+        BOOST_SPIRIT_SCRIPT(inscriptional_pahlavi)
+        BOOST_SPIRIT_SCRIPT(phoenician)
+        BOOST_SPIRIT_SCRIPT(inscriptional_parthian)
+        BOOST_SPIRIT_SCRIPT(rejang)
+        BOOST_SPIRIT_SCRIPT(runic)
+        BOOST_SPIRIT_SCRIPT(samaritan)
+        BOOST_SPIRIT_SCRIPT(old_south_arabian)
+        BOOST_SPIRIT_SCRIPT(saurashtra)
+        BOOST_SPIRIT_SCRIPT(shavian)
+        BOOST_SPIRIT_SCRIPT(sinhala)
+        BOOST_SPIRIT_SCRIPT(sundanese)
+        BOOST_SPIRIT_SCRIPT(syloti_nagri)
+        BOOST_SPIRIT_SCRIPT(syriac)
+        BOOST_SPIRIT_SCRIPT(tagbanwa)
+        BOOST_SPIRIT_SCRIPT(tai_le)
+        BOOST_SPIRIT_SCRIPT(new_tai_lue)
+        BOOST_SPIRIT_SCRIPT(tamil)
+        BOOST_SPIRIT_SCRIPT(tai_viet)
+        BOOST_SPIRIT_SCRIPT(telugu)
+        BOOST_SPIRIT_SCRIPT(tifinagh)
+        BOOST_SPIRIT_SCRIPT(tagalog)
+        BOOST_SPIRIT_SCRIPT(thaana)
+        BOOST_SPIRIT_SCRIPT(thai)
+        BOOST_SPIRIT_SCRIPT(tibetan)
+        BOOST_SPIRIT_SCRIPT(ugaritic)
+        BOOST_SPIRIT_SCRIPT(vai)
+        BOOST_SPIRIT_SCRIPT(old_persian)
+        BOOST_SPIRIT_SCRIPT(cuneiform)
+        BOOST_SPIRIT_SCRIPT(yi)
+        BOOST_SPIRIT_SCRIPT(inherited)
+        BOOST_SPIRIT_SCRIPT(common)
+        BOOST_SPIRIT_SCRIPT(unknown)
+
+#undef BOOST_SPIRIT_MAJOR_CATEGORY
+#undef BOOST_SPIRIT_CATEGORY
+#undef BOOST_SPIRIT_DERIVED_CATEGORY
+#undef BOOST_SPIRIT_SCRIPT
+
+    };
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/DerivedCoreProperties.txt b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/DerivedCoreProperties.txt
new file mode 100644 (file)
index 0000000..d1acdd7
--- /dev/null
@@ -0,0 +1,9247 @@
+# DerivedCoreProperties-5.2.0.txt
+# Date: 2009-08-26, 00:45:22 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2009 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# It is ok to redistribute this file "solely for informational 
+# purposes in the creation of products supporting the Unicode Standard".
+# We don't nee to add a Boost License to this file: boostinspect:nolicense.
+
+# ================================================
+
+# Derived Property: Math
+#  Generated from: Sm + Other_Math
+
+002B          ; Math # Sm       PLUS SIGN
+003C..003E    ; Math # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+005E          ; Math # Sk       CIRCUMFLEX ACCENT
+007C          ; Math # Sm       VERTICAL LINE
+007E          ; Math # Sm       TILDE
+00AC          ; Math # Sm       NOT SIGN
+00B1          ; Math # Sm       PLUS-MINUS SIGN
+00D7          ; Math # Sm       MULTIPLICATION SIGN
+00F7          ; Math # Sm       DIVISION SIGN
+03D0..03D2    ; Math # L&   [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5          ; Math # L&       GREEK PHI SYMBOL
+03F0..03F1    ; Math # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5    ; Math # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6          ; Math # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL
+0606..0608    ; Math # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+2016          ; Math # Po       DOUBLE VERTICAL LINE
+2032..2034    ; Math # Po   [3] PRIME..TRIPLE PRIME
+2040          ; Math # Pc       CHARACTER TIE
+2044          ; Math # Sm       FRACTION SLASH
+2052          ; Math # Sm       COMMERCIAL MINUS SIGN
+2061..2064    ; Math # Cf   [4] FUNCTION APPLICATION..INVISIBLE PLUS
+207A..207C    ; Math # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D          ; Math # Ps       SUPERSCRIPT LEFT PARENTHESIS
+207E          ; Math # Pe       SUPERSCRIPT RIGHT PARENTHESIS
+208A..208C    ; Math # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D          ; Math # Ps       SUBSCRIPT LEFT PARENTHESIS
+208E          ; Math # Pe       SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC    ; Math # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; Math # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6    ; Math # Mn   [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20EB..20EF    ; Math # Mn   [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
+2102          ; Math # L&       DOUBLE-STRUCK CAPITAL C
+210A..2113    ; Math # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; Math # L&       DOUBLE-STRUCK CAPITAL N
+2119..211D    ; Math # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Math # L&       DOUBLE-STRUCK CAPITAL Z
+2128          ; Math # L&       BLACK-LETTER CAPITAL Z
+2129          ; Math # So       TURNED GREEK SMALL LETTER IOTA
+212C..212D    ; Math # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131    ; Math # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134    ; Math # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138    ; Math # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F    ; Math # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144    ; Math # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149    ; Math # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214B          ; Math # Sm       TURNED AMPERSAND
+2190..2194    ; Math # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199    ; Math # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B    ; Math # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F    ; Math # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0          ; Math # Sm       RIGHTWARDS TWO HEADED ARROW
+21A1..21A2    ; Math # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3          ; Math # Sm       RIGHTWARDS ARROW WITH TAIL
+21A4..21A5    ; Math # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6          ; Math # Sm       RIGHTWARDS ARROW FROM BAR
+21A7          ; Math # So       DOWNWARDS ARROW FROM BAR
+21A9..21AD    ; Math # So   [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW
+21AE          ; Math # Sm       LEFT RIGHT ARROW WITH STROKE
+21B0..21B1    ; Math # So   [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS
+21B6..21B7    ; Math # So   [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21BC..21CD    ; Math # So  [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF    ; Math # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Math # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2          ; Math # Sm       RIGHTWARDS DOUBLE ARROW
+21D3          ; Math # So       DOWNWARDS DOUBLE ARROW
+21D4          ; Math # Sm       LEFT RIGHT DOUBLE ARROW
+21D5..21DB    ; Math # So   [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW
+21DD          ; Math # So       RIGHTWARDS SQUIGGLE ARROW
+21E4..21E5    ; Math # So   [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR
+21F4..22FF    ; Math # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2308..230B    ; Math # Sm   [4] LEFT CEILING..RIGHT FLOOR
+2320..2321    ; Math # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+237C          ; Math # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+239B..23B3    ; Math # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23B5    ; Math # So   [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET
+23B7          ; Math # So       RADICAL SYMBOL BOTTOM
+23D0          ; Math # So       VERTICAL LINE EXTENSION
+23DC..23E1    ; Math # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2          ; Math # So       WHITE TRAPEZIUM
+25A0..25A1    ; Math # So   [2] BLACK SQUARE..WHITE SQUARE
+25AE..25B6    ; Math # So   [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE
+25B7          ; Math # Sm       WHITE RIGHT-POINTING TRIANGLE
+25BC..25C0    ; Math # So   [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1          ; Math # Sm       WHITE LEFT-POINTING TRIANGLE
+25C6..25C7    ; Math # So   [2] BLACK DIAMOND..WHITE DIAMOND
+25CA..25CB    ; Math # So   [2] LOZENGE..WHITE CIRCLE
+25CF..25D3    ; Math # So   [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK
+25E2          ; Math # So       BLACK LOWER RIGHT TRIANGLE
+25E4          ; Math # So       BLACK UPPER LEFT TRIANGLE
+25E7..25EC    ; Math # So   [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT
+25F8..25FF    ; Math # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2605..2606    ; Math # So   [2] BLACK STAR..WHITE STAR
+2640          ; Math # So       FEMALE SIGN
+2642          ; Math # So       MALE SIGN
+2660..2663    ; Math # So   [4] BLACK SPADE SUIT..BLACK CLUB SUIT
+266D..266E    ; Math # So   [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN
+266F          ; Math # Sm       MUSIC SHARP SIGN
+27C0..27C4    ; Math # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5          ; Math # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Math # Pe       RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Math # Sm   [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CC          ; Math # Sm       LONG DIVISION
+27D0..27E5    ; Math # Sm  [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6          ; Math # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Math # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Math # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Math # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Math # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Math # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Math # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Math # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Math # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Math # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Math # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982    ; Math # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983          ; Math # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Math # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Math # Ps       LEFT WHITE PARENTHESIS
+2986          ; Math # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Math # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Math # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Math # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Math # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Math # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Math # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Math # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Math # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Math # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Math # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Math # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Math # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Math # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Math # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7    ; Math # Sm  [63] DOTTED FENCE..BLACK HOURGLASS
+29D8          ; Math # Ps       LEFT WIGGLY FENCE
+29D9          ; Math # Pe       RIGHT WIGGLY FENCE
+29DA          ; Math # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Math # Pe       RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB    ; Math # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC          ; Math # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Math # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF    ; Math # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B30..2B44    ; Math # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B47..2B4C    ; Math # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+FB29          ; Math # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN
+FE61          ; Math # Po       SMALL ASTERISK
+FE62          ; Math # Sm       SMALL PLUS SIGN
+FE63          ; Math # Pd       SMALL HYPHEN-MINUS
+FE64..FE66    ; Math # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68          ; Math # Po       SMALL REVERSE SOLIDUS
+FF0B          ; Math # Sm       FULLWIDTH PLUS SIGN
+FF1C..FF1E    ; Math # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF3C          ; Math # Po       FULLWIDTH REVERSE SOLIDUS
+FF3E          ; Math # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF5C          ; Math # Sm       FULLWIDTH VERTICAL LINE
+FF5E          ; Math # Sm       FULLWIDTH TILDE
+FFE2          ; Math # Sm       FULLWIDTH NOT SIGN
+FFE9..FFEC    ; Math # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+1D400..1D454  ; Math # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Math # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Math # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Math # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Math # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Math # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Math # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Math # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Math # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Math # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Math # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Math # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Math # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Math # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Math # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Math # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Math # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1         ; Math # Sm       MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA  ; Math # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB         ; Math # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA  ; Math # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB         ; Math # Sm       MATHEMATICAL ITALIC NABLA
+1D6FC..1D714  ; Math # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715         ; Math # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734  ; Math # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735         ; Math # Sm       MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E  ; Math # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F         ; Math # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E  ; Math # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8  ; Math # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB  ; Math # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Math # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 2161
+
+# ================================================
+
+# Derived Property: Alphabetic
+#  Generated from: Lu+Ll+Lt+Lm+Lo+Nl + Other_Alphabetic
+
+0041..005A    ; Alphabetic # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; Alphabetic # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; Alphabetic # L&       FEMININE ORDINAL INDICATOR
+00B5          ; Alphabetic # L&       MICRO SIGN
+00BA          ; Alphabetic # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; Alphabetic # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Alphabetic # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; Alphabetic # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; Alphabetic # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; Alphabetic # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; Alphabetic # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; Alphabetic # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; Alphabetic # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; Alphabetic # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; Alphabetic # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; Alphabetic # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; Alphabetic # Lm       MODIFIER LETTER VOICING
+02EE          ; Alphabetic # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0345          ; Alphabetic # Mn       COMBINING GREEK YPOGEGRAMMENI
+0370..0373    ; Alphabetic # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; Alphabetic # Lm       GREEK NUMERAL SIGN
+0376..0377    ; Alphabetic # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Alphabetic # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Alphabetic # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Alphabetic # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Alphabetic # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Alphabetic # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Alphabetic # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; Alphabetic # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; Alphabetic # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..0525    ; Alphabetic # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; Alphabetic # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Alphabetic # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; Alphabetic # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+05B0..05BD    ; Alphabetic # Mn  [14] HEBREW POINT SHEVA..HEBREW POINT METEG
+05BF          ; Alphabetic # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Alphabetic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; Alphabetic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; Alphabetic # Mn       HEBREW POINT QAMATS QATAN
+05D0..05EA    ; Alphabetic # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; Alphabetic # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A    ; Alphabetic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0621..063F    ; Alphabetic # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; Alphabetic # Lm       ARABIC TATWEEL
+0641..064A    ; Alphabetic # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..0657    ; Alphabetic # Mn  [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065E    ; Alphabetic # Mn   [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS
+066E..066F    ; Alphabetic # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670          ; Alphabetic # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3    ; Alphabetic # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; Alphabetic # Lo       ARABIC LETTER AE
+06D6..06DC    ; Alphabetic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4    ; Alphabetic # Mn   [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; Alphabetic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; Alphabetic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED          ; Alphabetic # Mn       ARABIC SMALL LOW MEEM
+06EE..06EF    ; Alphabetic # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC    ; Alphabetic # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; Alphabetic # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; Alphabetic # Lo       SYRIAC LETTER ALAPH
+0711          ; Alphabetic # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F    ; Alphabetic # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..073F    ; Alphabetic # Mn  [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+074D..07A5    ; Alphabetic # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0    ; Alphabetic # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07B1          ; Alphabetic # Lo       THAANA LETTER NAA
+07CA..07EA    ; Alphabetic # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5    ; Alphabetic # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; Alphabetic # Lm       NKO LAJANYALAN
+0800..0815    ; Alphabetic # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0817    ; Alphabetic # Mn   [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF
+081A          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; Alphabetic # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; Alphabetic # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER I
+0829..082C    ; Alphabetic # Mn   [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+0900..0902    ; Alphabetic # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; Alphabetic # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; Alphabetic # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D          ; Alphabetic # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; Alphabetic # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; Alphabetic # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; Alphabetic # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E          ; Alphabetic # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950          ; Alphabetic # Lo       DEVANAGARI OM
+0955          ; Alphabetic # Mn       DEVANAGARI VOWEL SIGN CANDRA LONG E
+0958..0961    ; Alphabetic # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963    ; Alphabetic # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0971          ; Alphabetic # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; Alphabetic # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; Alphabetic # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0981          ; Alphabetic # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; Alphabetic # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; Alphabetic # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Alphabetic # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Alphabetic # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Alphabetic # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Alphabetic # Lo       BENGALI LETTER LA
+09B6..09B9    ; Alphabetic # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD          ; Alphabetic # Lo       BENGALI SIGN AVAGRAHA
+09BE..09C0    ; Alphabetic # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; Alphabetic # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CE          ; Alphabetic # Lo       BENGALI LETTER KHANDA TA
+09D7          ; Alphabetic # Mc       BENGALI AU LENGTH MARK
+09DC..09DD    ; Alphabetic # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; Alphabetic # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3    ; Alphabetic # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09F0..09F1    ; Alphabetic # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A01..0A02    ; Alphabetic # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; Alphabetic # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Alphabetic # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Alphabetic # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Alphabetic # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Alphabetic # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; Alphabetic # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; Alphabetic # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; Alphabetic # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40    ; Alphabetic # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A51          ; Alphabetic # Mn       GURMUKHI SIGN UDAAT
+0A59..0A5C    ; Alphabetic # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; Alphabetic # Lo       GURMUKHI LETTER FA
+0A70..0A71    ; Alphabetic # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74    ; Alphabetic # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75          ; Alphabetic # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; Alphabetic # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83          ; Alphabetic # Mc       GUJARATI SIGN VISARGA
+0A85..0A8D    ; Alphabetic # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; Alphabetic # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; Alphabetic # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; Alphabetic # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; Alphabetic # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; Alphabetic # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD          ; Alphabetic # Lo       GUJARATI SIGN AVAGRAHA
+0ABE..0AC0    ; Alphabetic # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5    ; Alphabetic # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; Alphabetic # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9          ; Alphabetic # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; Alphabetic # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AD0          ; Alphabetic # Lo       GUJARATI OM
+0AE0..0AE1    ; Alphabetic # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3    ; Alphabetic # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01          ; Alphabetic # Mn       ORIYA SIGN CANDRABINDU
+0B02..0B03    ; Alphabetic # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C    ; Alphabetic # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; Alphabetic # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; Alphabetic # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; Alphabetic # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; Alphabetic # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; Alphabetic # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D          ; Alphabetic # Lo       ORIYA SIGN AVAGRAHA
+0B3E          ; Alphabetic # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; Alphabetic # Mn       ORIYA VOWEL SIGN I
+0B40          ; Alphabetic # Mc       ORIYA VOWEL SIGN II
+0B41..0B44    ; Alphabetic # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48    ; Alphabetic # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; Alphabetic # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B56          ; Alphabetic # Mn       ORIYA AI LENGTH MARK
+0B57          ; Alphabetic # Mc       ORIYA AU LENGTH MARK
+0B5C..0B5D    ; Alphabetic # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; Alphabetic # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63    ; Alphabetic # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B71          ; Alphabetic # Lo       ORIYA LETTER WA
+0B82          ; Alphabetic # Mn       TAMIL SIGN ANUSVARA
+0B83          ; Alphabetic # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; Alphabetic # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; Alphabetic # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; Alphabetic # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; Alphabetic # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; Alphabetic # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; Alphabetic # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; Alphabetic # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; Alphabetic # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; Alphabetic # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF    ; Alphabetic # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0          ; Alphabetic # Mn       TAMIL VOWEL SIGN II
+0BC1..0BC2    ; Alphabetic # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Alphabetic # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; Alphabetic # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD0          ; Alphabetic # Lo       TAMIL OM
+0BD7          ; Alphabetic # Mc       TAMIL AU LENGTH MARK
+0C01..0C03    ; Alphabetic # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C    ; Alphabetic # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; Alphabetic # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; Alphabetic # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; Alphabetic # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; Alphabetic # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; Alphabetic # Lo       TELUGU SIGN AVAGRAHA
+0C3E..0C40    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44    ; Alphabetic # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4C    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU
+0C55..0C56    ; Alphabetic # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C59    ; Alphabetic # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; Alphabetic # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63    ; Alphabetic # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C82..0C83    ; Alphabetic # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; Alphabetic # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; Alphabetic # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; Alphabetic # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; Alphabetic # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; Alphabetic # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD          ; Alphabetic # Lo       KANNADA SIGN AVAGRAHA
+0CBE          ; Alphabetic # Mc       KANNADA VOWEL SIGN AA
+0CBF          ; Alphabetic # Mn       KANNADA VOWEL SIGN I
+0CC0..0CC4    ; Alphabetic # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6          ; Alphabetic # Mn       KANNADA VOWEL SIGN E
+0CC7..0CC8    ; Alphabetic # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; Alphabetic # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC          ; Alphabetic # Mn       KANNADA VOWEL SIGN AU
+0CD5..0CD6    ; Alphabetic # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE          ; Alphabetic # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; Alphabetic # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; Alphabetic # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D02..0D03    ; Alphabetic # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; Alphabetic # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; Alphabetic # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; Alphabetic # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; Alphabetic # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; Alphabetic # Lo       MALAYALAM SIGN AVAGRAHA
+0D3E..0D40    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44    ; Alphabetic # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D57          ; Alphabetic # Mc       MALAYALAM AU LENGTH MARK
+0D60..0D61    ; Alphabetic # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D62..0D63    ; Alphabetic # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D7A..0D7F    ; Alphabetic # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; Alphabetic # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96    ; Alphabetic # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; Alphabetic # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; Alphabetic # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; Alphabetic # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; Alphabetic # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCF..0DD1    ; Alphabetic # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4    ; Alphabetic # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Alphabetic # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF    ; Alphabetic # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3    ; Alphabetic # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30    ; Alphabetic # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31          ; Alphabetic # Mn       THAI CHARACTER MAI HAN-AKAT
+0E32..0E33    ; Alphabetic # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A    ; Alphabetic # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45    ; Alphabetic # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; Alphabetic # Lm       THAI CHARACTER MAIYAMOK
+0E4D          ; Alphabetic # Mn       THAI CHARACTER NIKHAHIT
+0E81..0E82    ; Alphabetic # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; Alphabetic # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; Alphabetic # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; Alphabetic # Lo       LAO LETTER SO TAM
+0E8D          ; Alphabetic # Lo       LAO LETTER NYO
+0E94..0E97    ; Alphabetic # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; Alphabetic # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; Alphabetic # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; Alphabetic # Lo       LAO LETTER LO LOOT
+0EA7          ; Alphabetic # Lo       LAO LETTER WO
+0EAA..0EAB    ; Alphabetic # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; Alphabetic # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB1          ; Alphabetic # Mn       LAO VOWEL SIGN MAI KAN
+0EB2..0EB3    ; Alphabetic # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9    ; Alphabetic # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; Alphabetic # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD          ; Alphabetic # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; Alphabetic # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; Alphabetic # Lm       LAO KO LA
+0ECD          ; Alphabetic # Mn       LAO NIGGAHITA
+0EDC..0EDD    ; Alphabetic # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; Alphabetic # Lo       TIBETAN SYLLABLE OM
+0F40..0F47    ; Alphabetic # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; Alphabetic # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E    ; Alphabetic # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F          ; Alphabetic # Mc       TIBETAN SIGN RNAM BCAD
+0F80..0F81    ; Alphabetic # Mn   [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II
+0F88..0F8B    ; Alphabetic # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0F90..0F97    ; Alphabetic # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; Alphabetic # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+1000..102A    ; Alphabetic # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030    ; Alphabetic # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031          ; Alphabetic # Mc       MYANMAR VOWEL SIGN E
+1032..1036    ; Alphabetic # Mn   [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA
+1038          ; Alphabetic # Mc       MYANMAR SIGN VISARGA
+103B..103C    ; Alphabetic # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E    ; Alphabetic # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F          ; Alphabetic # Lo       MYANMAR LETTER GREAT SA
+1050..1055    ; Alphabetic # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059    ; Alphabetic # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D    ; Alphabetic # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060    ; Alphabetic # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061          ; Alphabetic # Lo       MYANMAR LETTER SGAW KAREN SHA
+1062          ; Alphabetic # Mc       MYANMAR VOWEL SIGN SGAW KAREN EU
+1065..1066    ; Alphabetic # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..1068    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+106E..1070    ; Alphabetic # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074    ; Alphabetic # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081    ; Alphabetic # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082          ; Alphabetic # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086    ; Alphabetic # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108E          ; Alphabetic # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+109C          ; Alphabetic # Mc       MYANMAR VOWEL SIGN AITON A
+109D          ; Alphabetic # Mn       MYANMAR VOWEL SIGN AITON AI
+10A0..10C5    ; Alphabetic # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; Alphabetic # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; Alphabetic # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; Alphabetic # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; Alphabetic # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; Alphabetic # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; Alphabetic # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; Alphabetic # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; Alphabetic # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; Alphabetic # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; Alphabetic # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F          ; Alphabetic # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1380..138F    ; Alphabetic # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F4    ; Alphabetic # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C    ; Alphabetic # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F    ; Alphabetic # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A    ; Alphabetic # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; Alphabetic # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; Alphabetic # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; Alphabetic # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; Alphabetic # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1713    ; Alphabetic # Mn   [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
+1720..1731    ; Alphabetic # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1733    ; Alphabetic # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1740..1751    ; Alphabetic # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753    ; Alphabetic # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C    ; Alphabetic # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; Alphabetic # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773    ; Alphabetic # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3    ; Alphabetic # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6          ; Alphabetic # Mc       KHMER VOWEL SIGN AA
+17B7..17BD    ; Alphabetic # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5    ; Alphabetic # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6          ; Alphabetic # Mn       KHMER SIGN NIKAHIT
+17C7..17C8    ; Alphabetic # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17D7          ; Alphabetic # Lm       KHMER SIGN LEK TOO
+17DC          ; Alphabetic # Lo       KHMER SIGN AVAKRAHASANYA
+1820..1842    ; Alphabetic # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; Alphabetic # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; Alphabetic # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; Alphabetic # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9          ; Alphabetic # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+18AA          ; Alphabetic # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; Alphabetic # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; Alphabetic # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1920..1922    ; Alphabetic # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926    ; Alphabetic # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928    ; Alphabetic # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B    ; Alphabetic # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; Alphabetic # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932          ; Alphabetic # Mn       LIMBU SMALL LETTER ANUSVARA
+1933..1938    ; Alphabetic # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1950..196D    ; Alphabetic # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; Alphabetic # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; Alphabetic # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C0    ; Alphabetic # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7    ; Alphabetic # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9    ; Alphabetic # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+1A00..1A16    ; Alphabetic # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18    ; Alphabetic # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B    ; Alphabetic # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A20..1A54    ; Alphabetic # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55          ; Alphabetic # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A56          ; Alphabetic # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A57          ; Alphabetic # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E    ; Alphabetic # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A61          ; Alphabetic # Mc       TAI THAM VOWEL SIGN A
+1A62          ; Alphabetic # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64    ; Alphabetic # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C    ; Alphabetic # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72    ; Alphabetic # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A74    ; Alphabetic # Mn   [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
+1AA7          ; Alphabetic # Lm       TAI THAM SIGN MAI YAMOK
+1B00..1B03    ; Alphabetic # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04          ; Alphabetic # Mc       BALINESE SIGN BISAH
+1B05..1B33    ; Alphabetic # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B35          ; Alphabetic # Mc       BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A    ; Alphabetic # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B          ; Alphabetic # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C          ; Alphabetic # Mn       BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41    ; Alphabetic # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42          ; Alphabetic # Mn       BALINESE VOWEL SIGN PEPET
+1B43          ; Alphabetic # Mc       BALINESE VOWEL SIGN PEPET TEDUNG
+1B45..1B4B    ; Alphabetic # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B80..1B81    ; Alphabetic # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82          ; Alphabetic # Mc       SUNDANESE SIGN PANGWISAD
+1B83..1BA0    ; Alphabetic # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1          ; Alphabetic # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5    ; Alphabetic # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7    ; Alphabetic # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9    ; Alphabetic # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAE..1BAF    ; Alphabetic # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1C00..1C23    ; Alphabetic # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B    ; Alphabetic # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33    ; Alphabetic # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35    ; Alphabetic # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C4D..1C4F    ; Alphabetic # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77    ; Alphabetic # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; Alphabetic # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CE9..1CEC    ; Alphabetic # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1    ; Alphabetic # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2          ; Alphabetic # Mc       VEDIC SIGN ARDHAVISARGA
+1D00..1D2B    ; Alphabetic # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; Alphabetic # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; Alphabetic # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; Alphabetic # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; Alphabetic # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; Alphabetic # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15    ; Alphabetic # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Alphabetic # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Alphabetic # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Alphabetic # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Alphabetic # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; Alphabetic # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Alphabetic # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; Alphabetic # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; Alphabetic # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Alphabetic # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; Alphabetic # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; Alphabetic # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; Alphabetic # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; Alphabetic # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Alphabetic # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; Alphabetic # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071          ; Alphabetic # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; Alphabetic # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; Alphabetic # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2102          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; Alphabetic # L&       EULER CONSTANT
+210A..2113    ; Alphabetic # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL N
+2119..211D    ; Alphabetic # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; Alphabetic # L&       OHM SIGN
+2128          ; Alphabetic # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; Alphabetic # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2134    ; Alphabetic # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; Alphabetic # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; Alphabetic # L&       INFORMATION SOURCE
+213C..213F    ; Alphabetic # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; Alphabetic # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; Alphabetic # L&       TURNED SMALL F
+2160..2182    ; Alphabetic # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; Alphabetic # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; Alphabetic # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+24B6..24E9    ; Alphabetic # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C2E    ; Alphabetic # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Alphabetic # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; Alphabetic # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; Alphabetic # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; Alphabetic # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; Alphabetic # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Alphabetic # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; Alphabetic # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; Alphabetic # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; Alphabetic # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF    ; Alphabetic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E2F          ; Alphabetic # Lm       VERTICAL TILDE
+3005          ; Alphabetic # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; Alphabetic # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; Alphabetic # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; Alphabetic # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035    ; Alphabetic # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A    ; Alphabetic # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; Alphabetic # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; Alphabetic # Lo       MASU MARK
+3041..3096    ; Alphabetic # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E    ; Alphabetic # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; Alphabetic # Lo       HIRAGANA DIGRAPH YORI
+30A1..30FA    ; Alphabetic # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; Alphabetic # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; Alphabetic # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; Alphabetic # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; Alphabetic # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31B7    ; Alphabetic # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF    ; Alphabetic # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DB5    ; Alphabetic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; Alphabetic # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; Alphabetic # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; Alphabetic # Lm       YI SYLLABLE WU
+A016..A48C    ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7    ; Alphabetic # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; Alphabetic # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B    ; Alphabetic # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; Alphabetic # Lm       VAI SYLLABLE LENGTHENER
+A610..A61F    ; Alphabetic # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B    ; Alphabetic # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; Alphabetic # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; Alphabetic # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; Alphabetic # Lo       CYRILLIC LETTER MULTIOCULAR O
+A67F          ; Alphabetic # Lm       CYRILLIC PAYEROK
+A680..A697    ; Alphabetic # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; Alphabetic # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; Alphabetic # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F    ; Alphabetic # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F    ; Alphabetic # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; Alphabetic # Lm       MODIFIER LETTER US
+A771..A787    ; Alphabetic # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; Alphabetic # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78C    ; Alphabetic # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; Alphabetic # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805    ; Alphabetic # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A    ; Alphabetic # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822    ; Alphabetic # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824    ; Alphabetic # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826    ; Alphabetic # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827          ; Alphabetic # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A840..A873    ; Alphabetic # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881    ; Alphabetic # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3    ; Alphabetic # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3    ; Alphabetic # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8F2..A8F7    ; Alphabetic # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; Alphabetic # Lo       DEVANAGARI HEADSTROKE
+A90A..A925    ; Alphabetic # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92A    ; Alphabetic # Mn   [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O
+A930..A946    ; Alphabetic # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951    ; Alphabetic # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952          ; Alphabetic # Mc       REJANG CONSONANT SIGN H
+A960..A97C    ; Alphabetic # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982    ; Alphabetic # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983          ; Alphabetic # Mc       JAVANESE SIGN WIGNYAN
+A984..A9B2    ; Alphabetic # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3          ; Alphabetic # Mn       JAVANESE SIGN CECAK TELU
+A9B4..A9B5    ; Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9    ; Alphabetic # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB    ; Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC          ; Alphabetic # Mn       JAVANESE VOWEL SIGN PEPET
+A9BD..A9BF    ; Alphabetic # Mc   [3] JAVANESE CONSONANT SIGN KERET..JAVANESE CONSONANT SIGN CAKRA
+A9CF          ; Alphabetic # Lm       JAVANESE PANGRANGKEP
+AA00..AA28    ; Alphabetic # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E    ; Alphabetic # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30    ; Alphabetic # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32    ; Alphabetic # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34    ; Alphabetic # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36    ; Alphabetic # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42    ; Alphabetic # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43          ; Alphabetic # Mn       CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B    ; Alphabetic # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C          ; Alphabetic # Mn       CHAM CONSONANT SIGN FINAL M
+AA4D          ; Alphabetic # Mc       CHAM CONSONANT SIGN FINAL H
+AA60..AA6F    ; Alphabetic # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; Alphabetic # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; Alphabetic # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A          ; Alphabetic # Lo       MYANMAR LETTER AITON RA
+AA80..AAAF    ; Alphabetic # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0          ; Alphabetic # Mn       TAI VIET MAI KANG
+AAB1          ; Alphabetic # Lo       TAI VIET VOWEL AA
+AAB2..AAB4    ; Alphabetic # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6    ; Alphabetic # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8    ; Alphabetic # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD    ; Alphabetic # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE          ; Alphabetic # Mn       TAI VIET VOWEL AM
+AAC0          ; Alphabetic # Lo       TAI VIET TONE MAI NUENG
+AAC2          ; Alphabetic # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; Alphabetic # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; Alphabetic # Lm       TAI VIET SYMBOL SAM
+ABC0..ABE2    ; Alphabetic # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5          ; Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8          ; Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+AC00..D7A3    ; Alphabetic # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; Alphabetic # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; Alphabetic # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; Alphabetic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; Alphabetic # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; Alphabetic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; Alphabetic # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Alphabetic # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; Alphabetic # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1E          ; Alphabetic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28    ; Alphabetic # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36    ; Alphabetic # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; Alphabetic # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; Alphabetic # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; Alphabetic # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; Alphabetic # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; Alphabetic # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; Alphabetic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; Alphabetic # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; Alphabetic # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; Alphabetic # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE70..FE74    ; Alphabetic # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; Alphabetic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A    ; Alphabetic # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; Alphabetic # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F    ; Alphabetic # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; Alphabetic # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; Alphabetic # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F    ; Alphabetic # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE    ; Alphabetic # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; Alphabetic # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B  ; Alphabetic # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; Alphabetic # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; Alphabetic # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; Alphabetic # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; Alphabetic # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; Alphabetic # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; Alphabetic # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174  ; Alphabetic # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C  ; Alphabetic # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; Alphabetic # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; Alphabetic # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10330..10340  ; Alphabetic # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; Alphabetic # Nl       GOTHIC LETTER NINETY
+10342..10349  ; Alphabetic # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; Alphabetic # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; Alphabetic # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; Alphabetic # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; Alphabetic # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; Alphabetic # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; Alphabetic # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; Alphabetic # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+10800..10805  ; Alphabetic # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; Alphabetic # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; Alphabetic # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; Alphabetic # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; Alphabetic # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; Alphabetic # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10900..10915  ; Alphabetic # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; Alphabetic # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+10A00         ; Alphabetic # Lo       KHAROSHTHI LETTER A
+10A01..10A03  ; Alphabetic # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Alphabetic # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; Alphabetic # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13  ; Alphabetic # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; Alphabetic # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; Alphabetic # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A60..10A7C  ; Alphabetic # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10B00..10B35  ; Alphabetic # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; Alphabetic # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; Alphabetic # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10C00..10C48  ; Alphabetic # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+11082         ; Alphabetic # Mc       KAITHI SIGN VISARGA
+11083..110AF  ; Alphabetic # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2  ; Alphabetic # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6  ; Alphabetic # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8  ; Alphabetic # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+12000..1236E  ; Alphabetic # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; Alphabetic # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+13000..1342E  ; Alphabetic # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D400..1D454  ; Alphabetic # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Alphabetic # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Alphabetic # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Alphabetic # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Alphabetic # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Alphabetic # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Alphabetic # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Alphabetic # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Alphabetic # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Alphabetic # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Alphabetic # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Alphabetic # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Alphabetic # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Alphabetic # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Alphabetic # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Alphabetic # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Alphabetic # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Alphabetic # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Alphabetic # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Alphabetic # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; Alphabetic # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; Alphabetic # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; Alphabetic # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; Alphabetic # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; Alphabetic # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; Alphabetic # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; Alphabetic # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; Alphabetic # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; Alphabetic # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; Alphabetic # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+20000..2A6D6  ; Alphabetic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; Alphabetic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 100520
+
+# ================================================
+
+# Derived Property: Lowercase
+#  Generated from: Ll + Other_Lowercase
+
+0061..007A    ; Lowercase # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; Lowercase # L&       FEMININE ORDINAL INDICATOR
+00B5          ; Lowercase # L&       MICRO SIGN
+00BA          ; Lowercase # L&       MASCULINE ORDINAL INDICATOR
+00DF..00F6    ; Lowercase # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF    ; Lowercase # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101          ; Lowercase # L&       LATIN SMALL LETTER A WITH MACRON
+0103          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE
+0105          ; Lowercase # L&       LATIN SMALL LETTER A WITH OGONEK
+0107          ; Lowercase # L&       LATIN SMALL LETTER C WITH ACUTE
+0109          ; Lowercase # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B          ; Lowercase # L&       LATIN SMALL LETTER C WITH DOT ABOVE
+010D          ; Lowercase # L&       LATIN SMALL LETTER C WITH CARON
+010F          ; Lowercase # L&       LATIN SMALL LETTER D WITH CARON
+0111          ; Lowercase # L&       LATIN SMALL LETTER D WITH STROKE
+0113          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON
+0115          ; Lowercase # L&       LATIN SMALL LETTER E WITH BREVE
+0117          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOT ABOVE
+0119          ; Lowercase # L&       LATIN SMALL LETTER E WITH OGONEK
+011B          ; Lowercase # L&       LATIN SMALL LETTER E WITH CARON
+011D          ; Lowercase # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F          ; Lowercase # L&       LATIN SMALL LETTER G WITH BREVE
+0121          ; Lowercase # L&       LATIN SMALL LETTER G WITH DOT ABOVE
+0123          ; Lowercase # L&       LATIN SMALL LETTER G WITH CEDILLA
+0125          ; Lowercase # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127          ; Lowercase # L&       LATIN SMALL LETTER H WITH STROKE
+0129          ; Lowercase # L&       LATIN SMALL LETTER I WITH TILDE
+012B          ; Lowercase # L&       LATIN SMALL LETTER I WITH MACRON
+012D          ; Lowercase # L&       LATIN SMALL LETTER I WITH BREVE
+012F          ; Lowercase # L&       LATIN SMALL LETTER I WITH OGONEK
+0131          ; Lowercase # L&       LATIN SMALL LETTER DOTLESS I
+0133          ; Lowercase # L&       LATIN SMALL LIGATURE IJ
+0135          ; Lowercase # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137..0138    ; Lowercase # L&   [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA
+013A          ; Lowercase # L&       LATIN SMALL LETTER L WITH ACUTE
+013C          ; Lowercase # L&       LATIN SMALL LETTER L WITH CEDILLA
+013E          ; Lowercase # L&       LATIN SMALL LETTER L WITH CARON
+0140          ; Lowercase # L&       LATIN SMALL LETTER L WITH MIDDLE DOT
+0142          ; Lowercase # L&       LATIN SMALL LETTER L WITH STROKE
+0144          ; Lowercase # L&       LATIN SMALL LETTER N WITH ACUTE
+0146          ; Lowercase # L&       LATIN SMALL LETTER N WITH CEDILLA
+0148..0149    ; Lowercase # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B          ; Lowercase # L&       LATIN SMALL LETTER ENG
+014D          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON
+014F          ; Lowercase # L&       LATIN SMALL LETTER O WITH BREVE
+0151          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153          ; Lowercase # L&       LATIN SMALL LIGATURE OE
+0155          ; Lowercase # L&       LATIN SMALL LETTER R WITH ACUTE
+0157          ; Lowercase # L&       LATIN SMALL LETTER R WITH CEDILLA
+0159          ; Lowercase # L&       LATIN SMALL LETTER R WITH CARON
+015B          ; Lowercase # L&       LATIN SMALL LETTER S WITH ACUTE
+015D          ; Lowercase # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F          ; Lowercase # L&       LATIN SMALL LETTER S WITH CEDILLA
+0161          ; Lowercase # L&       LATIN SMALL LETTER S WITH CARON
+0163          ; Lowercase # L&       LATIN SMALL LETTER T WITH CEDILLA
+0165          ; Lowercase # L&       LATIN SMALL LETTER T WITH CARON
+0167          ; Lowercase # L&       LATIN SMALL LETTER T WITH STROKE
+0169          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE
+016B          ; Lowercase # L&       LATIN SMALL LETTER U WITH MACRON
+016D          ; Lowercase # L&       LATIN SMALL LETTER U WITH BREVE
+016F          ; Lowercase # L&       LATIN SMALL LETTER U WITH RING ABOVE
+0171          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173          ; Lowercase # L&       LATIN SMALL LETTER U WITH OGONEK
+0175          ; Lowercase # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177          ; Lowercase # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A          ; Lowercase # L&       LATIN SMALL LETTER Z WITH ACUTE
+017C          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180    ; Lowercase # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183          ; Lowercase # L&       LATIN SMALL LETTER B WITH TOPBAR
+0185          ; Lowercase # L&       LATIN SMALL LETTER TONE SIX
+0188          ; Lowercase # L&       LATIN SMALL LETTER C WITH HOOK
+018C..018D    ; Lowercase # L&   [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA
+0192          ; Lowercase # L&       LATIN SMALL LETTER F WITH HOOK
+0195          ; Lowercase # L&       LATIN SMALL LETTER HV
+0199..019B    ; Lowercase # L&   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE
+019E          ; Lowercase # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN
+01A3          ; Lowercase # L&       LATIN SMALL LETTER OI
+01A5          ; Lowercase # L&       LATIN SMALL LETTER P WITH HOOK
+01A8          ; Lowercase # L&       LATIN SMALL LETTER TONE TWO
+01AA..01AB    ; Lowercase # L&   [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK
+01AD          ; Lowercase # L&       LATIN SMALL LETTER T WITH HOOK
+01B0          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN
+01B4          ; Lowercase # L&       LATIN SMALL LETTER Y WITH HOOK
+01B6          ; Lowercase # L&       LATIN SMALL LETTER Z WITH STROKE
+01B9..01BA    ; Lowercase # L&   [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL
+01BD..01BF    ; Lowercase # L&   [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN
+01C6          ; Lowercase # L&       LATIN SMALL LETTER DZ WITH CARON
+01C9          ; Lowercase # L&       LATIN SMALL LETTER LJ
+01CC          ; Lowercase # L&       LATIN SMALL LETTER NJ
+01CE          ; Lowercase # L&       LATIN SMALL LETTER A WITH CARON
+01D0          ; Lowercase # L&       LATIN SMALL LETTER I WITH CARON
+01D2          ; Lowercase # L&       LATIN SMALL LETTER O WITH CARON
+01D4          ; Lowercase # L&       LATIN SMALL LETTER U WITH CARON
+01D6          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD    ; Lowercase # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF          ; Lowercase # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3          ; Lowercase # L&       LATIN SMALL LETTER AE WITH MACRON
+01E5          ; Lowercase # L&       LATIN SMALL LETTER G WITH STROKE
+01E7          ; Lowercase # L&       LATIN SMALL LETTER G WITH CARON
+01E9          ; Lowercase # L&       LATIN SMALL LETTER K WITH CARON
+01EB          ; Lowercase # L&       LATIN SMALL LETTER O WITH OGONEK
+01ED          ; Lowercase # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F0    ; Lowercase # L&   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F3          ; Lowercase # L&       LATIN SMALL LETTER DZ
+01F5          ; Lowercase # L&       LATIN SMALL LETTER G WITH ACUTE
+01F9          ; Lowercase # L&       LATIN SMALL LETTER N WITH GRAVE
+01FB          ; Lowercase # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD          ; Lowercase # L&       LATIN SMALL LETTER AE WITH ACUTE
+01FF          ; Lowercase # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203          ; Lowercase # L&       LATIN SMALL LETTER A WITH INVERTED BREVE
+0205          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207          ; Lowercase # L&       LATIN SMALL LETTER E WITH INVERTED BREVE
+0209          ; Lowercase # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B          ; Lowercase # L&       LATIN SMALL LETTER I WITH INVERTED BREVE
+020D          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F          ; Lowercase # L&       LATIN SMALL LETTER O WITH INVERTED BREVE
+0211          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213          ; Lowercase # L&       LATIN SMALL LETTER R WITH INVERTED BREVE
+0215          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217          ; Lowercase # L&       LATIN SMALL LETTER U WITH INVERTED BREVE
+0219          ; Lowercase # L&       LATIN SMALL LETTER S WITH COMMA BELOW
+021B          ; Lowercase # L&       LATIN SMALL LETTER T WITH COMMA BELOW
+021D          ; Lowercase # L&       LATIN SMALL LETTER YOGH
+021F          ; Lowercase # L&       LATIN SMALL LETTER H WITH CARON
+0221          ; Lowercase # L&       LATIN SMALL LETTER D WITH CURL
+0223          ; Lowercase # L&       LATIN SMALL LETTER OU
+0225          ; Lowercase # L&       LATIN SMALL LETTER Z WITH HOOK
+0227          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT ABOVE
+0229          ; Lowercase # L&       LATIN SMALL LETTER E WITH CEDILLA
+022B          ; Lowercase # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT ABOVE
+0231          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233..0239    ; Lowercase # L&   [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH
+023C          ; Lowercase # L&       LATIN SMALL LETTER C WITH STROKE
+023F..0240    ; Lowercase # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242          ; Lowercase # L&       LATIN SMALL LETTER GLOTTAL STOP
+0247          ; Lowercase # L&       LATIN SMALL LETTER E WITH STROKE
+0249          ; Lowercase # L&       LATIN SMALL LETTER J WITH STROKE
+024B          ; Lowercase # L&       LATIN SMALL LETTER Q WITH HOOK TAIL
+024D          ; Lowercase # L&       LATIN SMALL LETTER R WITH STROKE
+024F..0293    ; Lowercase # L&  [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL
+0295..02AF    ; Lowercase # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8    ; Lowercase # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1    ; Lowercase # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4    ; Lowercase # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345          ; Lowercase # Mn       COMBINING GREEK YPOGEGRAMMENI
+0371          ; Lowercase # L&       GREEK SMALL LETTER HETA
+0373          ; Lowercase # L&       GREEK SMALL LETTER ARCHAIC SAMPI
+0377          ; Lowercase # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Lowercase # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Lowercase # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390          ; Lowercase # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE    ; Lowercase # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1    ; Lowercase # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7    ; Lowercase # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9          ; Lowercase # L&       GREEK SMALL LETTER ARCHAIC KOPPA
+03DB          ; Lowercase # L&       GREEK SMALL LETTER STIGMA
+03DD          ; Lowercase # L&       GREEK SMALL LETTER DIGAMMA
+03DF          ; Lowercase # L&       GREEK SMALL LETTER KOPPA
+03E1          ; Lowercase # L&       GREEK SMALL LETTER SAMPI
+03E3          ; Lowercase # L&       COPTIC SMALL LETTER SHEI
+03E5          ; Lowercase # L&       COPTIC SMALL LETTER FEI
+03E7          ; Lowercase # L&       COPTIC SMALL LETTER KHEI
+03E9          ; Lowercase # L&       COPTIC SMALL LETTER HORI
+03EB          ; Lowercase # L&       COPTIC SMALL LETTER GANGIA
+03ED          ; Lowercase # L&       COPTIC SMALL LETTER SHIMA
+03EF..03F3    ; Lowercase # L&   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
+03F5          ; Lowercase # L&       GREEK LUNATE EPSILON SYMBOL
+03F8          ; Lowercase # L&       GREEK SMALL LETTER SHO
+03FB..03FC    ; Lowercase # L&   [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL
+0430..045F    ; Lowercase # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461          ; Lowercase # L&       CYRILLIC SMALL LETTER OMEGA
+0463          ; Lowercase # L&       CYRILLIC SMALL LETTER YAT
+0465          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED E
+0467          ; Lowercase # L&       CYRILLIC SMALL LETTER LITTLE YUS
+0469          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B          ; Lowercase # L&       CYRILLIC SMALL LETTER BIG YUS
+046D          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F          ; Lowercase # L&       CYRILLIC SMALL LETTER KSI
+0471          ; Lowercase # L&       CYRILLIC SMALL LETTER PSI
+0473          ; Lowercase # L&       CYRILLIC SMALL LETTER FITA
+0475          ; Lowercase # L&       CYRILLIC SMALL LETTER IZHITSA
+0477          ; Lowercase # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479          ; Lowercase # L&       CYRILLIC SMALL LETTER UK
+047B          ; Lowercase # L&       CYRILLIC SMALL LETTER ROUND OMEGA
+047D          ; Lowercase # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F          ; Lowercase # L&       CYRILLIC SMALL LETTER OT
+0481          ; Lowercase # L&       CYRILLIC SMALL LETTER KOPPA
+048B          ; Lowercase # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D          ; Lowercase # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F          ; Lowercase # L&       CYRILLIC SMALL LETTER ER WITH TICK
+0491          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH STROKE
+0495          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499          ; Lowercase # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH STROKE
+04A1          ; Lowercase # L&       CYRILLIC SMALL LETTER BASHKIR KA
+04A3          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE EN GHE
+04A7          ; Lowercase # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB          ; Lowercase # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD          ; Lowercase # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF          ; Lowercase # L&       CYRILLIC SMALL LETTER STRAIGHT U
+04B1          ; Lowercase # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE TE TSE
+04B7          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB          ; Lowercase # L&       CYRILLIC SMALL LETTER SHHA
+04BD          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH HOOK
+04C6          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH TAIL
+04C8          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH HOOK
+04CA          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH TAIL
+04CC          ; Lowercase # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF    ; Lowercase # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1          ; Lowercase # L&       CYRILLIC SMALL LETTER A WITH BREVE
+04D3          ; Lowercase # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE A IE
+04D7          ; Lowercase # L&       CYRILLIC SMALL LETTER IE WITH BREVE
+04D9          ; Lowercase # L&       CYRILLIC SMALL LETTER SCHWA
+04DB          ; Lowercase # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF          ; Lowercase # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3          ; Lowercase # L&       CYRILLIC SMALL LETTER I WITH MACRON
+04E5          ; Lowercase # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7          ; Lowercase # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9          ; Lowercase # L&       CYRILLIC SMALL LETTER BARRED O
+04EB          ; Lowercase # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED          ; Lowercase # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH MACRON
+04F1          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9          ; Lowercase # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH HOOK
+04FF          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH STROKE
+0501          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DE
+0503          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DJE
+0505          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI ZJE
+0507          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DZJE
+0509          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI LJE
+050B          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI NJE
+050D          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI SJE
+050F          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI TJE
+0511          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED ZE
+0513          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH HOOK
+0515          ; Lowercase # L&       CYRILLIC SMALL LETTER LHA
+0517          ; Lowercase # L&       CYRILLIC SMALL LETTER RHA
+0519          ; Lowercase # L&       CYRILLIC SMALL LETTER YAE
+051B          ; Lowercase # L&       CYRILLIC SMALL LETTER QA
+051D          ; Lowercase # L&       CYRILLIC SMALL LETTER WE
+051F          ; Lowercase # L&       CYRILLIC SMALL LETTER ALEUT KA
+0521          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525          ; Lowercase # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER
+0561..0587    ; Lowercase # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+1D00..1D2B    ; Lowercase # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; Lowercase # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; Lowercase # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; Lowercase # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; Lowercase # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; Lowercase # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E01          ; Lowercase # L&       LATIN SMALL LETTER A WITH RING BELOW
+1E03          ; Lowercase # L&       LATIN SMALL LETTER B WITH DOT ABOVE
+1E05          ; Lowercase # L&       LATIN SMALL LETTER B WITH DOT BELOW
+1E07          ; Lowercase # L&       LATIN SMALL LETTER B WITH LINE BELOW
+1E09          ; Lowercase # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B          ; Lowercase # L&       LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D          ; Lowercase # L&       LATIN SMALL LETTER D WITH DOT BELOW
+1E0F          ; Lowercase # L&       LATIN SMALL LETTER D WITH LINE BELOW
+1E11          ; Lowercase # L&       LATIN SMALL LETTER D WITH CEDILLA
+1E13          ; Lowercase # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B          ; Lowercase # L&       LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D          ; Lowercase # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F          ; Lowercase # L&       LATIN SMALL LETTER F WITH DOT ABOVE
+1E21          ; Lowercase # L&       LATIN SMALL LETTER G WITH MACRON
+1E23          ; Lowercase # L&       LATIN SMALL LETTER H WITH DOT ABOVE
+1E25          ; Lowercase # L&       LATIN SMALL LETTER H WITH DOT BELOW
+1E27          ; Lowercase # L&       LATIN SMALL LETTER H WITH DIAERESIS
+1E29          ; Lowercase # L&       LATIN SMALL LETTER H WITH CEDILLA
+1E2B          ; Lowercase # L&       LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D          ; Lowercase # L&       LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F          ; Lowercase # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31          ; Lowercase # L&       LATIN SMALL LETTER K WITH ACUTE
+1E33          ; Lowercase # L&       LATIN SMALL LETTER K WITH DOT BELOW
+1E35          ; Lowercase # L&       LATIN SMALL LETTER K WITH LINE BELOW
+1E37          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOT BELOW
+1E39          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B          ; Lowercase # L&       LATIN SMALL LETTER L WITH LINE BELOW
+1E3D          ; Lowercase # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F          ; Lowercase # L&       LATIN SMALL LETTER M WITH ACUTE
+1E41          ; Lowercase # L&       LATIN SMALL LETTER M WITH DOT ABOVE
+1E43          ; Lowercase # L&       LATIN SMALL LETTER M WITH DOT BELOW
+1E45          ; Lowercase # L&       LATIN SMALL LETTER N WITH DOT ABOVE
+1E47          ; Lowercase # L&       LATIN SMALL LETTER N WITH DOT BELOW
+1E49          ; Lowercase # L&       LATIN SMALL LETTER N WITH LINE BELOW
+1E4B          ; Lowercase # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55          ; Lowercase # L&       LATIN SMALL LETTER P WITH ACUTE
+1E57          ; Lowercase # L&       LATIN SMALL LETTER P WITH DOT ABOVE
+1E59          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT BELOW
+1E5D          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F          ; Lowercase # L&       LATIN SMALL LETTER R WITH LINE BELOW
+1E61          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT ABOVE
+1E63          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT BELOW
+1E65          ; Lowercase # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67          ; Lowercase # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B          ; Lowercase # L&       LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D          ; Lowercase # L&       LATIN SMALL LETTER T WITH DOT BELOW
+1E6F          ; Lowercase # L&       LATIN SMALL LETTER T WITH LINE BELOW
+1E71          ; Lowercase # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE BELOW
+1E77          ; Lowercase # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B          ; Lowercase # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D          ; Lowercase # L&       LATIN SMALL LETTER V WITH TILDE
+1E7F          ; Lowercase # L&       LATIN SMALL LETTER V WITH DOT BELOW
+1E81          ; Lowercase # L&       LATIN SMALL LETTER W WITH GRAVE
+1E83          ; Lowercase # L&       LATIN SMALL LETTER W WITH ACUTE
+1E85          ; Lowercase # L&       LATIN SMALL LETTER W WITH DIAERESIS
+1E87          ; Lowercase # L&       LATIN SMALL LETTER W WITH DOT ABOVE
+1E89          ; Lowercase # L&       LATIN SMALL LETTER W WITH DOT BELOW
+1E8B          ; Lowercase # L&       LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D          ; Lowercase # L&       LATIN SMALL LETTER X WITH DIAERESIS
+1E8F          ; Lowercase # L&       LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91          ; Lowercase # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9D    ; Lowercase # L&   [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE
+1E9F          ; Lowercase # L&       LATIN SMALL LETTER DELTA
+1EA1          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT BELOW
+1EA3          ; Lowercase # L&       LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOT BELOW
+1EBB          ; Lowercase # L&       LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD          ; Lowercase # L&       LATIN SMALL LETTER E WITH TILDE
+1EBF          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9          ; Lowercase # L&       LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB          ; Lowercase # L&       LATIN SMALL LETTER I WITH DOT BELOW
+1ECD          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT BELOW
+1ECF          ; Lowercase # L&       LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOT BELOW
+1EE7          ; Lowercase # L&       LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3          ; Lowercase # L&       LATIN SMALL LETTER Y WITH GRAVE
+1EF5          ; Lowercase # L&       LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7          ; Lowercase # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9          ; Lowercase # L&       LATIN SMALL LETTER Y WITH TILDE
+1EFB          ; Lowercase # L&       LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD          ; Lowercase # L&       LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07    ; Lowercase # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15    ; Lowercase # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27    ; Lowercase # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37    ; Lowercase # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45    ; Lowercase # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Lowercase # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67    ; Lowercase # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D    ; Lowercase # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1F87    ; Lowercase # L&   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F90..1F97    ; Lowercase # L&   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA0..1FA7    ; Lowercase # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FB0..1FB4    ; Lowercase # L&   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7    ; Lowercase # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBE          ; Lowercase # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Lowercase # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7    ; Lowercase # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FD0..1FD3    ; Lowercase # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7    ; Lowercase # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7    ; Lowercase # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4    ; Lowercase # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7    ; Lowercase # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+2090..2094    ; Lowercase # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+210A          ; Lowercase # L&       SCRIPT SMALL G
+210E..210F    ; Lowercase # L&   [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI
+2113          ; Lowercase # L&       SCRIPT SMALL L
+212F          ; Lowercase # L&       SCRIPT SMALL E
+2134          ; Lowercase # L&       SCRIPT SMALL O
+2139          ; Lowercase # L&       INFORMATION SOURCE
+213C..213D    ; Lowercase # L&   [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA
+2146..2149    ; Lowercase # L&   [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; Lowercase # L&       TURNED SMALL F
+2170..217F    ; Lowercase # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184          ; Lowercase # L&       LATIN SMALL LETTER REVERSED C
+24D0..24E9    ; Lowercase # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5E    ; Lowercase # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C61          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66    ; Lowercase # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68          ; Lowercase # L&       LATIN SMALL LETTER H WITH DESCENDER
+2C6A          ; Lowercase # L&       LATIN SMALL LETTER K WITH DESCENDER
+2C6C          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DESCENDER
+2C71          ; Lowercase # L&       LATIN SMALL LETTER V WITH RIGHT HOOK
+2C73..2C74    ; Lowercase # L&   [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL
+2C76..2C7C    ; Lowercase # L&   [7] LATIN SMALL LETTER HALF H..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; Lowercase # Lm       MODIFIER LETTER CAPITAL V
+2C81          ; Lowercase # L&       COPTIC SMALL LETTER ALFA
+2C83          ; Lowercase # L&       COPTIC SMALL LETTER VIDA
+2C85          ; Lowercase # L&       COPTIC SMALL LETTER GAMMA
+2C87          ; Lowercase # L&       COPTIC SMALL LETTER DALDA
+2C89          ; Lowercase # L&       COPTIC SMALL LETTER EIE
+2C8B          ; Lowercase # L&       COPTIC SMALL LETTER SOU
+2C8D          ; Lowercase # L&       COPTIC SMALL LETTER ZATA
+2C8F          ; Lowercase # L&       COPTIC SMALL LETTER HATE
+2C91          ; Lowercase # L&       COPTIC SMALL LETTER THETHE
+2C93          ; Lowercase # L&       COPTIC SMALL LETTER IAUDA
+2C95          ; Lowercase # L&       COPTIC SMALL LETTER KAPA
+2C97          ; Lowercase # L&       COPTIC SMALL LETTER LAULA
+2C99          ; Lowercase # L&       COPTIC SMALL LETTER MI
+2C9B          ; Lowercase # L&       COPTIC SMALL LETTER NI
+2C9D          ; Lowercase # L&       COPTIC SMALL LETTER KSI
+2C9F          ; Lowercase # L&       COPTIC SMALL LETTER O
+2CA1          ; Lowercase # L&       COPTIC SMALL LETTER PI
+2CA3          ; Lowercase # L&       COPTIC SMALL LETTER RO
+2CA5          ; Lowercase # L&       COPTIC SMALL LETTER SIMA
+2CA7          ; Lowercase # L&       COPTIC SMALL LETTER TAU
+2CA9          ; Lowercase # L&       COPTIC SMALL LETTER UA
+2CAB          ; Lowercase # L&       COPTIC SMALL LETTER FI
+2CAD          ; Lowercase # L&       COPTIC SMALL LETTER KHI
+2CAF          ; Lowercase # L&       COPTIC SMALL LETTER PSI
+2CB1          ; Lowercase # L&       COPTIC SMALL LETTER OOU
+2CB3          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P NI
+2CBD          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1          ; Lowercase # L&       COPTIC SMALL LETTER SAMPI
+2CC3          ; Lowercase # L&       COPTIC SMALL LETTER CROSSED SHEI
+2CC5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9          ; Lowercase # L&       COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P HORI
+2CCD          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HA
+2CD1          ; Lowercase # L&       COPTIC SMALL LETTER L-SHAPED HA
+2CD3          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3..2CE4    ; Lowercase # L&   [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI
+2CEC          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Lowercase # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+A641          ; Lowercase # L&       CYRILLIC SMALL LETTER ZEMLYA
+A643          ; Lowercase # L&       CYRILLIC SMALL LETTER DZELO
+A645          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED DZE
+A647          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTA
+A649          ; Lowercase # L&       CYRILLIC SMALL LETTER DJERV
+A64B          ; Lowercase # L&       CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D          ; Lowercase # L&       CYRILLIC SMALL LETTER BROAD OMEGA
+A64F          ; Lowercase # L&       CYRILLIC SMALL LETTER NEUTRAL YER
+A651          ; Lowercase # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED YAT
+A655          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED YU
+A657          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED A
+A659          ; Lowercase # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B          ; Lowercase # L&       CYRILLIC SMALL LETTER BLENDED YUS
+A65D          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F          ; Lowercase # L&       CYRILLIC SMALL LETTER YN
+A663          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT DE
+A665          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT EL
+A667          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT EM
+A669          ; Lowercase # L&       CYRILLIC SMALL LETTER MONOCULAR O
+A66B          ; Lowercase # L&       CYRILLIC SMALL LETTER BINOCULAR O
+A66D          ; Lowercase # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681          ; Lowercase # L&       CYRILLIC SMALL LETTER DWE
+A683          ; Lowercase # L&       CYRILLIC SMALL LETTER DZWE
+A685          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHWE
+A687          ; Lowercase # L&       CYRILLIC SMALL LETTER CCHE
+A689          ; Lowercase # L&       CYRILLIC SMALL LETTER DZZE
+A68B          ; Lowercase # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D          ; Lowercase # L&       CYRILLIC SMALL LETTER TWE
+A68F          ; Lowercase # L&       CYRILLIC SMALL LETTER TSWE
+A691          ; Lowercase # L&       CYRILLIC SMALL LETTER TSSE
+A693          ; Lowercase # L&       CYRILLIC SMALL LETTER TCHE
+A695          ; Lowercase # L&       CYRILLIC SMALL LETTER HWE
+A697          ; Lowercase # L&       CYRILLIC SMALL LETTER SHWE
+A723          ; Lowercase # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725          ; Lowercase # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727          ; Lowercase # L&       LATIN SMALL LETTER HENG
+A729          ; Lowercase # L&       LATIN SMALL LETTER TZ
+A72B          ; Lowercase # L&       LATIN SMALL LETTER TRESILLO
+A72D          ; Lowercase # L&       LATIN SMALL LETTER CUATRILLO
+A72F..A731    ; Lowercase # L&   [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S
+A733          ; Lowercase # L&       LATIN SMALL LETTER AA
+A735          ; Lowercase # L&       LATIN SMALL LETTER AO
+A737          ; Lowercase # L&       LATIN SMALL LETTER AU
+A739          ; Lowercase # L&       LATIN SMALL LETTER AV
+A73B          ; Lowercase # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D          ; Lowercase # L&       LATIN SMALL LETTER AY
+A73F          ; Lowercase # L&       LATIN SMALL LETTER REVERSED C WITH DOT
+A741          ; Lowercase # L&       LATIN SMALL LETTER K WITH STROKE
+A743          ; Lowercase # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745          ; Lowercase # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747          ; Lowercase # L&       LATIN SMALL LETTER BROKEN L
+A749          ; Lowercase # L&       LATIN SMALL LETTER L WITH HIGH STROKE
+A74B          ; Lowercase # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D          ; Lowercase # L&       LATIN SMALL LETTER O WITH LOOP
+A74F          ; Lowercase # L&       LATIN SMALL LETTER OO
+A751          ; Lowercase # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753          ; Lowercase # L&       LATIN SMALL LETTER P WITH FLOURISH
+A755          ; Lowercase # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757          ; Lowercase # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759          ; Lowercase # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B          ; Lowercase # L&       LATIN SMALL LETTER R ROTUNDA
+A75D          ; Lowercase # L&       LATIN SMALL LETTER RUM ROTUNDA
+A75F          ; Lowercase # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761          ; Lowercase # L&       LATIN SMALL LETTER VY
+A763          ; Lowercase # L&       LATIN SMALL LETTER VISIGOTHIC Z
+A765          ; Lowercase # L&       LATIN SMALL LETTER THORN WITH STROKE
+A767          ; Lowercase # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769          ; Lowercase # L&       LATIN SMALL LETTER VEND
+A76B          ; Lowercase # L&       LATIN SMALL LETTER ET
+A76D          ; Lowercase # L&       LATIN SMALL LETTER IS
+A76F          ; Lowercase # L&       LATIN SMALL LETTER CON
+A770          ; Lowercase # Lm       MODIFIER LETTER US
+A771..A778    ; Lowercase # L&   [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM
+A77A          ; Lowercase # L&       LATIN SMALL LETTER INSULAR D
+A77C          ; Lowercase # L&       LATIN SMALL LETTER INSULAR F
+A77F          ; Lowercase # L&       LATIN SMALL LETTER TURNED INSULAR G
+A781          ; Lowercase # L&       LATIN SMALL LETTER TURNED L
+A783          ; Lowercase # L&       LATIN SMALL LETTER INSULAR R
+A785          ; Lowercase # L&       LATIN SMALL LETTER INSULAR S
+A787          ; Lowercase # L&       LATIN SMALL LETTER INSULAR T
+A78C          ; Lowercase # L&       LATIN SMALL LETTER SALTILLO
+FB00..FB06    ; Lowercase # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Lowercase # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A    ; Lowercase # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F  ; Lowercase # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+1D41A..1D433  ; Lowercase # L&  [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z
+1D44E..1D454  ; Lowercase # L&   [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D467  ; Lowercase # L&  [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z
+1D482..1D49B  ; Lowercase # L&  [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z
+1D4B6..1D4B9  ; Lowercase # L&   [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Lowercase # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Lowercase # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D4CF  ; Lowercase # L&  [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z
+1D4EA..1D503  ; Lowercase # L&  [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z
+1D51E..1D537  ; Lowercase # L&  [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z
+1D552..1D56B  ; Lowercase # L&  [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D586..1D59F  ; Lowercase # L&  [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5BA..1D5D3  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z
+1D5EE..1D607  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D622..1D63B  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D656..1D66F  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D68A..1D6A5  ; Lowercase # L&  [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6C2..1D6DA  ; Lowercase # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6E1  ; Lowercase # L&   [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL
+1D6FC..1D714  ; Lowercase # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D71B  ; Lowercase # L&   [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL
+1D736..1D74E  ; Lowercase # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D755  ; Lowercase # L&   [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D770..1D788  ; Lowercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D78F  ; Lowercase # L&   [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D7AA..1D7C2  ; Lowercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7C9  ; Lowercase # L&   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CB         ; Lowercase # L&       MATHEMATICAL BOLD SMALL DIGAMMA
+
+# Total code points: 1908
+
+# ================================================
+
+# Derived Property: Uppercase
+#  Generated from: Lu + Other_Uppercase
+
+0041..005A    ; Uppercase # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00C0..00D6    ; Uppercase # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DE    ; Uppercase # L&   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
+0100          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH MACRON
+0102          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE
+0104          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH OGONEK
+0106          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH ACUTE
+0108          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CARON
+010E          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CARON
+0110          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH STROKE
+0112          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON
+0114          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH BREVE
+0116          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH OGONEK
+011A          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CARON
+011C          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH BREVE
+0120          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CEDILLA
+0124          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH STROKE
+0128          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH TILDE
+012A          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH MACRON
+012C          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH BREVE
+012E          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH OGONEK
+0130          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132          ; Uppercase # L&       LATIN CAPITAL LIGATURE IJ
+0134          ; Uppercase # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH CEDILLA
+0139          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH ACUTE
+013B          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CEDILLA
+013D          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CARON
+013F          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH STROKE
+0143          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH ACUTE
+0145          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CEDILLA
+0147          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CARON
+014A          ; Uppercase # L&       LATIN CAPITAL LETTER ENG
+014C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON
+014E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH BREVE
+0150          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152          ; Uppercase # L&       LATIN CAPITAL LIGATURE OE
+0154          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH ACUTE
+0156          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH CEDILLA
+0158          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH CARON
+015A          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH ACUTE
+015C          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CEDILLA
+0160          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CARON
+0162          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CEDILLA
+0164          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CARON
+0166          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH STROKE
+0168          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE
+016A          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH MACRON
+016C          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH BREVE
+016E          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH RING ABOVE
+0170          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH OGONEK
+0174          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179    ; Uppercase # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH CARON
+0181..0182    ; Uppercase # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184          ; Uppercase # L&       LATIN CAPITAL LETTER TONE SIX
+0186..0187    ; Uppercase # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B    ; Uppercase # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191    ; Uppercase # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194    ; Uppercase # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198    ; Uppercase # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D    ; Uppercase # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0    ; Uppercase # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2          ; Uppercase # L&       LATIN CAPITAL LETTER OI
+01A4          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7    ; Uppercase # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9          ; Uppercase # L&       LATIN CAPITAL LETTER ESH
+01AC          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF    ; Uppercase # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3    ; Uppercase # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8    ; Uppercase # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC          ; Uppercase # L&       LATIN CAPITAL LETTER TONE FIVE
+01C4          ; Uppercase # L&       LATIN CAPITAL LETTER DZ WITH CARON
+01C7          ; Uppercase # L&       LATIN CAPITAL LETTER LJ
+01CA          ; Uppercase # L&       LATIN CAPITAL LETTER NJ
+01CD          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CARON
+01CF          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH CARON
+01D1          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CARON
+01D3          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH CARON
+01D5          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2          ; Uppercase # L&       LATIN CAPITAL LETTER AE WITH MACRON
+01E4          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH STROKE
+01E6          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CARON
+01E8          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH CARON
+01EA          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH OGONEK
+01EC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE          ; Uppercase # L&       LATIN CAPITAL LETTER EZH WITH CARON
+01F1          ; Uppercase # L&       LATIN CAPITAL LETTER DZ
+01F4          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8    ; Uppercase # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC          ; Uppercase # L&       LATIN CAPITAL LETTER AE WITH ACUTE
+01FE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C          ; Uppercase # L&       LATIN CAPITAL LETTER YOGH
+021E          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CARON
+0220          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222          ; Uppercase # L&       LATIN CAPITAL LETTER OU
+0224          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH HOOK
+0226          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CEDILLA
+022A          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B    ; Uppercase # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E    ; Uppercase # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241          ; Uppercase # L&       LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246    ; Uppercase # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248          ; Uppercase # L&       LATIN CAPITAL LETTER J WITH STROKE
+024A          ; Uppercase # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH STROKE
+024E          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH STROKE
+0370          ; Uppercase # L&       GREEK CAPITAL LETTER HETA
+0372          ; Uppercase # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376          ; Uppercase # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+0386          ; Uppercase # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Uppercase # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Uppercase # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F    ; Uppercase # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1    ; Uppercase # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB    ; Uppercase # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03CF          ; Uppercase # L&       GREEK CAPITAL KAI SYMBOL
+03D2..03D4    ; Uppercase # L&   [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D8          ; Uppercase # L&       GREEK LETTER ARCHAIC KOPPA
+03DA          ; Uppercase # L&       GREEK LETTER STIGMA
+03DC          ; Uppercase # L&       GREEK LETTER DIGAMMA
+03DE          ; Uppercase # L&       GREEK LETTER KOPPA
+03E0          ; Uppercase # L&       GREEK LETTER SAMPI
+03E2          ; Uppercase # L&       COPTIC CAPITAL LETTER SHEI
+03E4          ; Uppercase # L&       COPTIC CAPITAL LETTER FEI
+03E6          ; Uppercase # L&       COPTIC CAPITAL LETTER KHEI
+03E8          ; Uppercase # L&       COPTIC CAPITAL LETTER HORI
+03EA          ; Uppercase # L&       COPTIC CAPITAL LETTER GANGIA
+03EC          ; Uppercase # L&       COPTIC CAPITAL LETTER SHIMA
+03EE          ; Uppercase # L&       COPTIC CAPITAL LETTER DEI
+03F4          ; Uppercase # L&       GREEK CAPITAL THETA SYMBOL
+03F7          ; Uppercase # L&       GREEK CAPITAL LETTER SHO
+03F9..03FA    ; Uppercase # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F    ; Uppercase # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OMEGA
+0462          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YAT
+0464          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED E
+0466          ; Uppercase # L&       CYRILLIC CAPITAL LETTER LITTLE YUS
+0468          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BIG YUS
+046C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KSI
+0470          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PSI
+0472          ; Uppercase # L&       CYRILLIC CAPITAL LETTER FITA
+0474          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IZHITSA
+0476          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478          ; Uppercase # L&       CYRILLIC CAPITAL LETTER UK
+047A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OT
+0480          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOPPA
+048A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ER WITH TICK
+0490          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE EN GHE
+04A6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE TE TSE
+04B6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHHA
+04BC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1    ; Uppercase # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE A IE
+04D6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SCHWA
+04DA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4          ; Uppercase # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BARRED O
+04EA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DE
+0502          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DJE
+0504          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI ZJE
+0506          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DZJE
+0508          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI LJE
+050A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI NJE
+050C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI SJE
+050E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI TJE
+0510          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED ZE
+0512          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514          ; Uppercase # L&       CYRILLIC CAPITAL LETTER LHA
+0516          ; Uppercase # L&       CYRILLIC CAPITAL LETTER RHA
+0518          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YAE
+051A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER QA
+051C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER WE
+051E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ALEUT KA
+0520          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0531..0556    ; Uppercase # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+10A0..10C5    ; Uppercase # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+1E00          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH RING BELOW
+1E02          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CEDILLA
+1E12          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E          ; Uppercase # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH MACRON
+1E22          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH ACUTE
+1E32          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH ACUTE
+1E40          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH ACUTE
+1E56          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH TILDE
+1E7E          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH GRAVE
+1E82          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH ACUTE
+1E84          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A          ; Uppercase # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C          ; Uppercase # L&       LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9E          ; Uppercase # L&       LATIN CAPITAL LETTER SHARP S
+1EA0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH TILDE
+1EBE          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH TILDE
+1EFA          ; Uppercase # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC          ; Uppercase # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D    ; Uppercase # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D    ; Uppercase # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1FB8..1FBB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FC8..1FCB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA
+1FD8..1FDB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC    ; Uppercase # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF8..1FFB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA
+2102          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; Uppercase # L&       EULER CONSTANT
+210B..210D    ; Uppercase # L&   [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H
+2110..2112    ; Uppercase # L&   [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L
+2115          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL N
+2119..211D    ; Uppercase # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; Uppercase # L&       OHM SIGN
+2128          ; Uppercase # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; Uppercase # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+2130..2133    ; Uppercase # L&   [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M
+213E..213F    ; Uppercase # L&   [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI
+2145          ; Uppercase # L&       DOUBLE-STRUCK ITALIC CAPITAL D
+2160..216F    ; Uppercase # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183          ; Uppercase # L&       ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF    ; Uppercase # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2E    ; Uppercase # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64    ; Uppercase # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DESCENDER
+2C69          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70    ; Uppercase # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH HOOK
+2C75          ; Uppercase # L&       LATIN CAPITAL LETTER HALF H
+2C7E..2C80    ; Uppercase # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82          ; Uppercase # L&       COPTIC CAPITAL LETTER VIDA
+2C84          ; Uppercase # L&       COPTIC CAPITAL LETTER GAMMA
+2C86          ; Uppercase # L&       COPTIC CAPITAL LETTER DALDA
+2C88          ; Uppercase # L&       COPTIC CAPITAL LETTER EIE
+2C8A          ; Uppercase # L&       COPTIC CAPITAL LETTER SOU
+2C8C          ; Uppercase # L&       COPTIC CAPITAL LETTER ZATA
+2C8E          ; Uppercase # L&       COPTIC CAPITAL LETTER HATE
+2C90          ; Uppercase # L&       COPTIC CAPITAL LETTER THETHE
+2C92          ; Uppercase # L&       COPTIC CAPITAL LETTER IAUDA
+2C94          ; Uppercase # L&       COPTIC CAPITAL LETTER KAPA
+2C96          ; Uppercase # L&       COPTIC CAPITAL LETTER LAULA
+2C98          ; Uppercase # L&       COPTIC CAPITAL LETTER MI
+2C9A          ; Uppercase # L&       COPTIC CAPITAL LETTER NI
+2C9C          ; Uppercase # L&       COPTIC CAPITAL LETTER KSI
+2C9E          ; Uppercase # L&       COPTIC CAPITAL LETTER O
+2CA0          ; Uppercase # L&       COPTIC CAPITAL LETTER PI
+2CA2          ; Uppercase # L&       COPTIC CAPITAL LETTER RO
+2CA4          ; Uppercase # L&       COPTIC CAPITAL LETTER SIMA
+2CA6          ; Uppercase # L&       COPTIC CAPITAL LETTER TAU
+2CA8          ; Uppercase # L&       COPTIC CAPITAL LETTER UA
+2CAA          ; Uppercase # L&       COPTIC CAPITAL LETTER FI
+2CAC          ; Uppercase # L&       COPTIC CAPITAL LETTER KHI
+2CAE          ; Uppercase # L&       COPTIC CAPITAL LETTER PSI
+2CB0          ; Uppercase # L&       COPTIC CAPITAL LETTER OOU
+2CB2          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0          ; Uppercase # L&       COPTIC CAPITAL LETTER SAMPI
+2CC2          ; Uppercase # L&       COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8          ; Uppercase # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0          ; Uppercase # L&       COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+A640          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZEMLYA
+A642          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZELO
+A644          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED DZE
+A646          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTA
+A648          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DJERV
+A64A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED YU
+A656          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED A
+A658          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YN
+A662          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT DE
+A664          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT EL
+A666          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT EM
+A668          ; Uppercase # L&       CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DWE
+A682          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZWE
+A684          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHWE
+A686          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CCHE
+A688          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZZE
+A68A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TWE
+A68E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TSWE
+A690          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TSSE
+A692          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TCHE
+A694          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HWE
+A696          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHWE
+A722          ; Uppercase # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724          ; Uppercase # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726          ; Uppercase # L&       LATIN CAPITAL LETTER HENG
+A728          ; Uppercase # L&       LATIN CAPITAL LETTER TZ
+A72A          ; Uppercase # L&       LATIN CAPITAL LETTER TRESILLO
+A72C          ; Uppercase # L&       LATIN CAPITAL LETTER CUATRILLO
+A72E          ; Uppercase # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732          ; Uppercase # L&       LATIN CAPITAL LETTER AA
+A734          ; Uppercase # L&       LATIN CAPITAL LETTER AO
+A736          ; Uppercase # L&       LATIN CAPITAL LETTER AU
+A738          ; Uppercase # L&       LATIN CAPITAL LETTER AV
+A73A          ; Uppercase # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C          ; Uppercase # L&       LATIN CAPITAL LETTER AY
+A73E          ; Uppercase # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH STROKE
+A742          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746          ; Uppercase # L&       LATIN CAPITAL LETTER BROKEN L
+A748          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH LOOP
+A74E          ; Uppercase # L&       LATIN CAPITAL LETTER OO
+A750          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH FLOURISH
+A754          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756          ; Uppercase # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758          ; Uppercase # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A          ; Uppercase # L&       LATIN CAPITAL LETTER R ROTUNDA
+A75C          ; Uppercase # L&       LATIN CAPITAL LETTER RUM ROTUNDA
+A75E          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760          ; Uppercase # L&       LATIN CAPITAL LETTER VY
+A762          ; Uppercase # L&       LATIN CAPITAL LETTER VISIGOTHIC Z
+A764          ; Uppercase # L&       LATIN CAPITAL LETTER THORN WITH STROKE
+A766          ; Uppercase # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768          ; Uppercase # L&       LATIN CAPITAL LETTER VEND
+A76A          ; Uppercase # L&       LATIN CAPITAL LETTER ET
+A76C          ; Uppercase # L&       LATIN CAPITAL LETTER IS
+A76E          ; Uppercase # L&       LATIN CAPITAL LETTER CON
+A779          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR D
+A77B          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR F
+A77D..A77E    ; Uppercase # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780          ; Uppercase # L&       LATIN CAPITAL LETTER TURNED L
+A782          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR R
+A784          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR S
+A786          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR T
+A78B          ; Uppercase # L&       LATIN CAPITAL LETTER SALTILLO
+FF21..FF3A    ; Uppercase # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427  ; Uppercase # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+1D400..1D419  ; Uppercase # L&  [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z
+1D434..1D44D  ; Uppercase # L&  [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z
+1D468..1D481  ; Uppercase # L&  [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D49C         ; Uppercase # L&       MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Uppercase # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Uppercase # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Uppercase # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Uppercase # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B5  ; Uppercase # L&   [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z
+1D4D0..1D4E9  ; Uppercase # L&  [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D504..1D505  ; Uppercase # L&   [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Uppercase # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Uppercase # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Uppercase # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D538..1D539  ; Uppercase # L&   [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Uppercase # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Uppercase # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Uppercase # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Uppercase # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D56C..1D585  ; Uppercase # L&  [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D5A0..1D5B9  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5D4..1D5ED  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D608..1D621  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D63C..1D655  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D670..1D689  ; Uppercase # L&  [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z
+1D6A8..1D6C0  ; Uppercase # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6E2..1D6FA  ; Uppercase # L&  [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D71C..1D734  ; Uppercase # L&  [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D756..1D76E  ; Uppercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D790..1D7A8  ; Uppercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7CA         ; Uppercase # L&       MATHEMATICAL BOLD CAPITAL DIGAMMA
+
+# Total code points: 1469
+
+# ================================================
+
+# Derived Property:   Cased (Cased)
+#  As defined by Unicode Standard Definition D120
+#  C has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter.
+
+0041..005A    ; Cased # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; Cased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; Cased # L&       FEMININE ORDINAL INDICATOR
+00B5          ; Cased # L&       MICRO SIGN
+00BA          ; Cased # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; Cased # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Cased # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BC..01BF    ; Cased # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C4..0293    ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0295..02AF    ; Cased # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8    ; Cased # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1    ; Cased # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4    ; Cased # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345          ; Cased # Mn       COMBINING GREEK YPOGEGRAMMENI
+0370..0373    ; Cased # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0376..0377    ; Cased # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Cased # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Cased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Cased # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Cased # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Cased # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Cased # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; Cased # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; Cased # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..0525    ; Cased # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; Cased # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0561..0587    ; Cased # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+10A0..10C5    ; Cased # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+1D00..1D2B    ; Cased # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; Cased # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; Cased # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; Cased # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; Cased # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; Cased # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15    ; Cased # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Cased # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Cased # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Cased # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Cased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; Cased # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Cased # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; Cased # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; Cased # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Cased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; Cased # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; Cased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; Cased # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; Cased # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Cased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; Cased # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2090..2094    ; Cased # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2102          ; Cased # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; Cased # L&       EULER CONSTANT
+210A..2113    ; Cased # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; Cased # L&       DOUBLE-STRUCK CAPITAL N
+2119..211D    ; Cased # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Cased # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; Cased # L&       OHM SIGN
+2128          ; Cased # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; Cased # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2134    ; Cased # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2139          ; Cased # L&       INFORMATION SOURCE
+213C..213F    ; Cased # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; Cased # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; Cased # L&       TURNED SMALL F
+2160..217F    ; Cased # Nl  [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2183..2184    ; Cased # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+24B6..24E9    ; Cased # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C2E    ; Cased # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Cased # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; Cased # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; Cased # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; Cased # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; Cased # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Cased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+A640..A65F    ; Cased # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; Cased # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A680..A697    ; Cased # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A722..A76F    ; Cased # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; Cased # Lm       MODIFIER LETTER US
+A771..A787    ; Cased # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A78B..A78C    ; Cased # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+FB00..FB06    ; Cased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Cased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A    ; Cased # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; Cased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10400..1044F  ; Cased # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+1D400..1D454  ; Cased # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Cased # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Cased # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Cased # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Cased # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Cased # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Cased # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Cased # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Cased # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Cased # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Cased # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Cased # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Cased # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Cased # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Cased # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Cased # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Cased # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Cased # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Cased # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Cased # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; Cased # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; Cased # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; Cased # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; Cased # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; Cased # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; Cased # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; Cased # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; Cased # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; Cased # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; Cased # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+
+# Total code points: 3408
+
+# ================================================
+
+# Derived Property:   Case_Ignorable (CI)
+#  As defined by Unicode Standard Definition D121
+#  C is defined to be case-ignorable if
+#    Word_Break(C) = MidLetter or MidNumLet, or
+#    General_Category(C) = Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk).
+
+0027          ; Case_Ignorable # Po       APOSTROPHE
+002E          ; Case_Ignorable # Po       FULL STOP
+003A          ; Case_Ignorable # Po       COLON
+005E          ; Case_Ignorable # Sk       CIRCUMFLEX ACCENT
+0060          ; Case_Ignorable # Sk       GRAVE ACCENT
+00A8          ; Case_Ignorable # Sk       DIAERESIS
+00AD          ; Case_Ignorable # Cf       SOFT HYPHEN
+00AF          ; Case_Ignorable # Sk       MACRON
+00B4          ; Case_Ignorable # Sk       ACUTE ACCENT
+00B7          ; Case_Ignorable # Po       MIDDLE DOT
+00B8          ; Case_Ignorable # Sk       CEDILLA
+02B0..02C1    ; Case_Ignorable # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5    ; Case_Ignorable # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1    ; Case_Ignorable # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF    ; Case_Ignorable # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4    ; Case_Ignorable # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB    ; Case_Ignorable # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC          ; Case_Ignorable # Lm       MODIFIER LETTER VOICING
+02ED          ; Case_Ignorable # Sk       MODIFIER LETTER UNASPIRATED
+02EE          ; Case_Ignorable # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF    ; Case_Ignorable # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..036F    ; Case_Ignorable # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0374          ; Case_Ignorable # Lm       GREEK NUMERAL SIGN
+0375          ; Case_Ignorable # Sk       GREEK LOWER NUMERAL SIGN
+037A          ; Case_Ignorable # Lm       GREEK YPOGEGRAMMENI
+0384..0385    ; Case_Ignorable # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0387          ; Case_Ignorable # Po       GREEK ANO TELEIA
+0483..0487    ; Case_Ignorable # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489    ; Case_Ignorable # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0559          ; Case_Ignorable # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0591..05BD    ; Case_Ignorable # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF          ; Case_Ignorable # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Case_Ignorable # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; Case_Ignorable # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; Case_Ignorable # Mn       HEBREW POINT QAMATS QATAN
+05F4          ; Case_Ignorable # Po       HEBREW PUNCTUATION GERSHAYIM
+0600..0603    ; Case_Ignorable # Cf   [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+0610..061A    ; Case_Ignorable # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0640          ; Case_Ignorable # Lm       ARABIC TATWEEL
+064B..065E    ; Case_Ignorable # Mn  [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS
+0670          ; Case_Ignorable # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC    ; Case_Ignorable # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DD          ; Case_Ignorable # Cf       ARABIC END OF AYAH
+06DE          ; Case_Ignorable # Me       ARABIC START OF RUB EL HIZB
+06DF..06E4    ; Case_Ignorable # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; Case_Ignorable # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; Case_Ignorable # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED    ; Case_Ignorable # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+070F          ; Case_Ignorable # Cf       SYRIAC ABBREVIATION MARK
+0711          ; Case_Ignorable # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A    ; Case_Ignorable # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0    ; Case_Ignorable # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3    ; Case_Ignorable # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5    ; Case_Ignorable # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; Case_Ignorable # Lm       NKO LAJANYALAN
+0816..0819    ; Case_Ignorable # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; Case_Ignorable # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; Case_Ignorable # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER I
+0829..082D    ; Case_Ignorable # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0900..0902    ; Case_Ignorable # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+093C          ; Case_Ignorable # Mn       DEVANAGARI SIGN NUKTA
+0941..0948    ; Case_Ignorable # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D          ; Case_Ignorable # Mn       DEVANAGARI SIGN VIRAMA
+0951..0955    ; Case_Ignorable # Mn   [5] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN CANDRA LONG E
+0962..0963    ; Case_Ignorable # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0971          ; Case_Ignorable # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0981          ; Case_Ignorable # Mn       BENGALI SIGN CANDRABINDU
+09BC          ; Case_Ignorable # Mn       BENGALI SIGN NUKTA
+09C1..09C4    ; Case_Ignorable # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD          ; Case_Ignorable # Mn       BENGALI SIGN VIRAMA
+09E2..09E3    ; Case_Ignorable # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02    ; Case_Ignorable # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C          ; Case_Ignorable # Mn       GURMUKHI SIGN NUKTA
+0A41..0A42    ; Case_Ignorable # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Case_Ignorable # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; Case_Ignorable # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51          ; Case_Ignorable # Mn       GURMUKHI SIGN UDAAT
+0A70..0A71    ; Case_Ignorable # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75          ; Case_Ignorable # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; Case_Ignorable # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC          ; Case_Ignorable # Mn       GUJARATI SIGN NUKTA
+0AC1..0AC5    ; Case_Ignorable # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; Case_Ignorable # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD          ; Case_Ignorable # Mn       GUJARATI SIGN VIRAMA
+0AE2..0AE3    ; Case_Ignorable # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01          ; Case_Ignorable # Mn       ORIYA SIGN CANDRABINDU
+0B3C          ; Case_Ignorable # Mn       ORIYA SIGN NUKTA
+0B3F          ; Case_Ignorable # Mn       ORIYA VOWEL SIGN I
+0B41..0B44    ; Case_Ignorable # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D          ; Case_Ignorable # Mn       ORIYA SIGN VIRAMA
+0B56          ; Case_Ignorable # Mn       ORIYA AI LENGTH MARK
+0B62..0B63    ; Case_Ignorable # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82          ; Case_Ignorable # Mn       TAMIL SIGN ANUSVARA
+0BC0          ; Case_Ignorable # Mn       TAMIL VOWEL SIGN II
+0BCD          ; Case_Ignorable # Mn       TAMIL SIGN VIRAMA
+0C3E..0C40    ; Case_Ignorable # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48    ; Case_Ignorable # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; Case_Ignorable # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; Case_Ignorable # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63    ; Case_Ignorable # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0CBC          ; Case_Ignorable # Mn       KANNADA SIGN NUKTA
+0CBF          ; Case_Ignorable # Mn       KANNADA VOWEL SIGN I
+0CC6          ; Case_Ignorable # Mn       KANNADA VOWEL SIGN E
+0CCC..0CCD    ; Case_Ignorable # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CE2..0CE3    ; Case_Ignorable # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D41..0D44    ; Case_Ignorable # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D4D          ; Case_Ignorable # Mn       MALAYALAM SIGN VIRAMA
+0D62..0D63    ; Case_Ignorable # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0DCA          ; Case_Ignorable # Mn       SINHALA SIGN AL-LAKUNA
+0DD2..0DD4    ; Case_Ignorable # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Case_Ignorable # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0E31          ; Case_Ignorable # Mn       THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A    ; Case_Ignorable # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E46          ; Case_Ignorable # Lm       THAI CHARACTER MAIYAMOK
+0E47..0E4E    ; Case_Ignorable # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1          ; Case_Ignorable # Mn       LAO VOWEL SIGN MAI KAN
+0EB4..0EB9    ; Case_Ignorable # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; Case_Ignorable # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EC6          ; Case_Ignorable # Lm       LAO KO LA
+0EC8..0ECD    ; Case_Ignorable # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19    ; Case_Ignorable # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35          ; Case_Ignorable # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; Case_Ignorable # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39          ; Case_Ignorable # Mn       TIBETAN MARK TSA -PHRU
+0F71..0F7E    ; Case_Ignorable # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84    ; Case_Ignorable # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87    ; Case_Ignorable # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F90..0F97    ; Case_Ignorable # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; Case_Ignorable # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; Case_Ignorable # Mn       TIBETAN SYMBOL PADMA GDAN
+102D..1030    ; Case_Ignorable # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032..1037    ; Case_Ignorable # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1039..103A    ; Case_Ignorable # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103D..103E    ; Case_Ignorable # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059    ; Case_Ignorable # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060    ; Case_Ignorable # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1071..1074    ; Case_Ignorable # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082          ; Case_Ignorable # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1085..1086    ; Case_Ignorable # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108D          ; Case_Ignorable # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+109D          ; Case_Ignorable # Mn       MYANMAR VOWEL SIGN AITON AI
+10FC          ; Case_Ignorable # Lm       MODIFIER LETTER GEORGIAN NAR
+135F          ; Case_Ignorable # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1712..1714    ; Case_Ignorable # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1734    ; Case_Ignorable # Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1752..1753    ; Case_Ignorable # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773    ; Case_Ignorable # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B4..17B5    ; Case_Ignorable # Cf   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B7..17BD    ; Case_Ignorable # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6          ; Case_Ignorable # Mn       KHMER SIGN NIKAHIT
+17C9..17D3    ; Case_Ignorable # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7          ; Case_Ignorable # Lm       KHMER SIGN LEK TOO
+17DD          ; Case_Ignorable # Mn       KHMER SIGN ATTHACAN
+180B..180D    ; Case_Ignorable # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1843          ; Case_Ignorable # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+18A9          ; Case_Ignorable # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922    ; Case_Ignorable # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928    ; Case_Ignorable # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932          ; Case_Ignorable # Mn       LIMBU SMALL LETTER ANUSVARA
+1939..193B    ; Case_Ignorable # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A17..1A18    ; Case_Ignorable # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A56          ; Case_Ignorable # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A58..1A5E    ; Case_Ignorable # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60          ; Case_Ignorable # Mn       TAI THAM SIGN SAKOT
+1A62          ; Case_Ignorable # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A65..1A6C    ; Case_Ignorable # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A73..1A7C    ; Case_Ignorable # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; Case_Ignorable # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AA7          ; Case_Ignorable # Lm       TAI THAM SIGN MAI YAMOK
+1B00..1B03    ; Case_Ignorable # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34          ; Case_Ignorable # Mn       BALINESE SIGN REREKAN
+1B36..1B3A    ; Case_Ignorable # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3C          ; Case_Ignorable # Mn       BALINESE VOWEL SIGN LA LENGA
+1B42          ; Case_Ignorable # Mn       BALINESE VOWEL SIGN PEPET
+1B6B..1B73    ; Case_Ignorable # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81    ; Case_Ignorable # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA2..1BA5    ; Case_Ignorable # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA8..1BA9    ; Case_Ignorable # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1C2C..1C33    ; Case_Ignorable # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C36..1C37    ; Case_Ignorable # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C78..1C7D    ; Case_Ignorable # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2    ; Case_Ignorable # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0    ; Case_Ignorable # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8    ; Case_Ignorable # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED          ; Case_Ignorable # Mn       VEDIC SIGN TIRYAK
+1D2C..1D61    ; Case_Ignorable # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D78          ; Case_Ignorable # Lm       MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF    ; Case_Ignorable # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DE6    ; Case_Ignorable # Mn  [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
+1DFD..1DFF    ; Case_Ignorable # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1FBD          ; Case_Ignorable # Sk       GREEK KORONIS
+1FBF..1FC1    ; Case_Ignorable # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF    ; Case_Ignorable # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF    ; Case_Ignorable # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF    ; Case_Ignorable # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE    ; Case_Ignorable # Sk   [2] GREEK OXIA..GREEK DASIA
+200B..200F    ; Case_Ignorable # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+2018          ; Case_Ignorable # Pi       LEFT SINGLE QUOTATION MARK
+2019          ; Case_Ignorable # Pf       RIGHT SINGLE QUOTATION MARK
+2024          ; Case_Ignorable # Po       ONE DOT LEADER
+2027          ; Case_Ignorable # Po       HYPHENATION POINT
+202A..202E    ; Case_Ignorable # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2064    ; Case_Ignorable # Cf   [5] WORD JOINER..INVISIBLE PLUS
+206A..206F    ; Case_Ignorable # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2071          ; Case_Ignorable # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; Case_Ignorable # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; Case_Ignorable # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+20D0..20DC    ; Case_Ignorable # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0    ; Case_Ignorable # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1          ; Case_Ignorable # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4    ; Case_Ignorable # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0    ; Case_Ignorable # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2C7D          ; Case_Ignorable # Lm       MODIFIER LETTER CAPITAL V
+2CEF..2CF1    ; Case_Ignorable # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D6F          ; Case_Ignorable # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2DE0..2DFF    ; Case_Ignorable # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E2F          ; Case_Ignorable # Lm       VERTICAL TILDE
+3005          ; Case_Ignorable # Lm       IDEOGRAPHIC ITERATION MARK
+302A..302F    ; Case_Ignorable # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3031..3035    ; Case_Ignorable # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+303B          ; Case_Ignorable # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+3099..309A    ; Case_Ignorable # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C    ; Case_Ignorable # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; Case_Ignorable # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30FC..30FE    ; Case_Ignorable # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015          ; Case_Ignorable # Lm       YI SYLLABLE WU
+A4F8..A4FD    ; Case_Ignorable # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A60C          ; Case_Ignorable # Lm       VAI SYLLABLE LENGTHENER
+A66F          ; Case_Ignorable # Mn       COMBINING CYRILLIC VZMET
+A670..A672    ; Case_Ignorable # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A67C..A67D    ; Case_Ignorable # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67F          ; Case_Ignorable # Lm       CYRILLIC PAYEROK
+A6F0..A6F1    ; Case_Ignorable # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A700..A716    ; Case_Ignorable # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F    ; Case_Ignorable # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721    ; Case_Ignorable # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A770          ; Case_Ignorable # Lm       MODIFIER LETTER US
+A788          ; Case_Ignorable # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A    ; Case_Ignorable # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A802          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN DVISVARA
+A806          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN HASANTA
+A80B          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN ANUSVARA
+A825..A826    ; Case_Ignorable # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A8C4          ; Case_Ignorable # Mn       SAURASHTRA SIGN VIRAMA
+A8E0..A8F1    ; Case_Ignorable # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A926..A92D    ; Case_Ignorable # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A947..A951    ; Case_Ignorable # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A980..A982    ; Case_Ignorable # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3          ; Case_Ignorable # Mn       JAVANESE SIGN CECAK TELU
+A9B6..A9B9    ; Case_Ignorable # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BC          ; Case_Ignorable # Mn       JAVANESE VOWEL SIGN PEPET
+A9CF          ; Case_Ignorable # Lm       JAVANESE PANGRANGKEP
+AA29..AA2E    ; Case_Ignorable # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA31..AA32    ; Case_Ignorable # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA35..AA36    ; Case_Ignorable # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43          ; Case_Ignorable # Mn       CHAM CONSONANT SIGN FINAL NG
+AA4C          ; Case_Ignorable # Mn       CHAM CONSONANT SIGN FINAL M
+AA70          ; Case_Ignorable # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AAB0          ; Case_Ignorable # Mn       TAI VIET MAI KANG
+AAB2..AAB4    ; Case_Ignorable # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8    ; Case_Ignorable # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF    ; Case_Ignorable # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1          ; Case_Ignorable # Mn       TAI VIET TONE MAI THO
+AADD          ; Case_Ignorable # Lm       TAI VIET SYMBOL SAM
+ABE5          ; Case_Ignorable # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE8          ; Case_Ignorable # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABED          ; Case_Ignorable # Mn       MEETEI MAYEK APUN IYEK
+FB1E          ; Case_Ignorable # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F    ; Case_Ignorable # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE13          ; Case_Ignorable # Po       PRESENTATION FORM FOR VERTICAL COLON
+FE20..FE26    ; Case_Ignorable # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+FE52          ; Case_Ignorable # Po       SMALL FULL STOP
+FE55          ; Case_Ignorable # Po       SMALL COLON
+FEFF          ; Case_Ignorable # Cf       ZERO WIDTH NO-BREAK SPACE
+FF07          ; Case_Ignorable # Po       FULLWIDTH APOSTROPHE
+FF0E          ; Case_Ignorable # Po       FULLWIDTH FULL STOP
+FF1A          ; Case_Ignorable # Po       FULLWIDTH COLON
+FF3E          ; Case_Ignorable # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF40          ; Case_Ignorable # Sk       FULLWIDTH GRAVE ACCENT
+FF70          ; Case_Ignorable # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F    ; Case_Ignorable # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE3          ; Case_Ignorable # Sk       FULLWIDTH MACRON
+FFF9..FFFB    ; Case_Ignorable # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+101FD         ; Case_Ignorable # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10A01..10A03  ; Case_Ignorable # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Case_Ignorable # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; Case_Ignorable # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A38..10A3A  ; Case_Ignorable # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; Case_Ignorable # Mn       KHAROSHTHI VIRAMA
+11080..11081  ; Case_Ignorable # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+110B3..110B6  ; Case_Ignorable # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B9..110BA  ; Case_Ignorable # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BD         ; Case_Ignorable # Cf       KAITHI NUMBER SIGN
+1D167..1D169  ; Case_Ignorable # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D173..1D17A  ; Case_Ignorable # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D17B..1D182  ; Case_Ignorable # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; Case_Ignorable # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; Case_Ignorable # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244  ; Case_Ignorable # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+E0001         ; Case_Ignorable # Cf       LANGUAGE TAG
+E0020..E007F  ; Case_Ignorable # Cf  [96] TAG SPACE..CANCEL TAG
+E0100..E01EF  ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 1632
+
+# ================================================
+
+# Derived Property:   Changes_When_Lowercased (CWL)
+#  Characters whose normalized forms are not stable under a toLowercase mapping.
+#  For more information, see D124 in Section 3.13, "Default Case Algorithms".
+#  Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X)
+
+0041..005A    ; Changes_When_Lowercased # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00C0..00D6    ; Changes_When_Lowercased # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DE    ; Changes_When_Lowercased # L&   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
+0100          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH MACRON
+0102          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE
+0104          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH OGONEK
+0106          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH ACUTE
+0108          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CARON
+010E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CARON
+0110          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH STROKE
+0112          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON
+0114          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH BREVE
+0116          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH OGONEK
+011A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CARON
+011C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH BREVE
+0120          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CEDILLA
+0124          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH STROKE
+0128          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH TILDE
+012A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH MACRON
+012C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH BREVE
+012E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH OGONEK
+0130          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132          ; Changes_When_Lowercased # L&       LATIN CAPITAL LIGATURE IJ
+0134          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH CEDILLA
+0139          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH ACUTE
+013B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CEDILLA
+013D          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CARON
+013F          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH STROKE
+0143          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH ACUTE
+0145          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CEDILLA
+0147          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CARON
+014A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ENG
+014C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON
+014E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH BREVE
+0150          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152          ; Changes_When_Lowercased # L&       LATIN CAPITAL LIGATURE OE
+0154          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH ACUTE
+0156          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH CEDILLA
+0158          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH CARON
+015A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH ACUTE
+015C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CEDILLA
+0160          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CARON
+0162          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CEDILLA
+0164          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CARON
+0166          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH STROKE
+0168          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE
+016A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH MACRON
+016C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH BREVE
+016E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH RING ABOVE
+0170          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH OGONEK
+0174          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH CARON
+0181..0182    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TONE SIX
+0186..0187    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OI
+01A4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7    ; Changes_When_Lowercased # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ESH
+01AC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TONE FIVE
+01C4..01C5    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7..01C8    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA..01CB    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CARON
+01CF          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH CARON
+01D1          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CARON
+01D3          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH CARON
+01D5          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AE WITH MACRON
+01E4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH STROKE
+01E6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CARON
+01E8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH CARON
+01EA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH OGONEK
+01EC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F2    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AE WITH ACUTE
+01FE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER YOGH
+021E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CARON
+0220          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OU
+0224          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH HOOK
+0226          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CEDILLA
+022A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER J WITH STROKE
+024A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH STROKE
+024E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH STROKE
+0370          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER HETA
+0372          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+0386          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Changes_When_Lowercased # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F    ; Changes_When_Lowercased # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1    ; Changes_When_Lowercased # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB    ; Changes_When_Lowercased # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03CF          ; Changes_When_Lowercased # L&       GREEK CAPITAL KAI SYMBOL
+03D8          ; Changes_When_Lowercased # L&       GREEK LETTER ARCHAIC KOPPA
+03DA          ; Changes_When_Lowercased # L&       GREEK LETTER STIGMA
+03DC          ; Changes_When_Lowercased # L&       GREEK LETTER DIGAMMA
+03DE          ; Changes_When_Lowercased # L&       GREEK LETTER KOPPA
+03E0          ; Changes_When_Lowercased # L&       GREEK LETTER SAMPI
+03E2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SHEI
+03E4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER FEI
+03E6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KHEI
+03E8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER HORI
+03EA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER GANGIA
+03EC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SHIMA
+03EE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DEI
+03F4          ; Changes_When_Lowercased # L&       GREEK CAPITAL THETA SYMBOL
+03F7          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER SHO
+03F9..03FA    ; Changes_When_Lowercased # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F    ; Changes_When_Lowercased # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OMEGA
+0462          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YAT
+0464          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED E
+0466          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER LITTLE YUS
+0468          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BIG YUS
+046C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KSI
+0470          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PSI
+0472          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER FITA
+0474          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IZHITSA
+0476          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER UK
+047A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OT
+0480          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOPPA
+048A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ER WITH TICK
+0490          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE EN GHE
+04A6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE TE TSE
+04B6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHHA
+04BC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1    ; Changes_When_Lowercased # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE A IE
+04D6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SCHWA
+04DA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BARRED O
+04EA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DE
+0502          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DJE
+0504          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI ZJE
+0506          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DZJE
+0508          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI LJE
+050A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI NJE
+050C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI SJE
+050E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI TJE
+0510          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED ZE
+0512          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER LHA
+0516          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER RHA
+0518          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YAE
+051A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER QA
+051C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER WE
+051E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ALEUT KA
+0520          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0531..0556    ; Changes_When_Lowercased # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+10A0..10C5    ; Changes_When_Lowercased # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+1E00          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH RING BELOW
+1E02          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CEDILLA
+1E12          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH MACRON
+1E22          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH ACUTE
+1E32          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH ACUTE
+1E40          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH ACUTE
+1E56          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH TILDE
+1E7E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH GRAVE
+1E82          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH ACUTE
+1E84          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SHARP S
+1EA0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH TILDE
+1EBE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH TILDE
+1EFA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D    ; Changes_When_Lowercased # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D    ; Changes_When_Lowercased # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F88..1F8F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F98..1F9F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA8..1FAF    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB8..1FBC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC8..1FCC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD8..1FDB    ; Changes_When_Lowercased # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF8..1FFC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126          ; Changes_When_Lowercased # L&       OHM SIGN
+212A..212B    ; Changes_When_Lowercased # L&   [2] KELVIN SIGN..ANGSTROM SIGN
+2132          ; Changes_When_Lowercased # L&       TURNED CAPITAL F
+2160..216F    ; Changes_When_Lowercased # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183          ; Changes_When_Lowercased # L&       ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF    ; Changes_When_Lowercased # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2E    ; Changes_When_Lowercased # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DESCENDER
+2C69          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH HOOK
+2C75          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER HALF H
+2C7E..2C80    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER VIDA
+2C84          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER GAMMA
+2C86          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DALDA
+2C88          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER EIE
+2C8A          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SOU
+2C8C          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER ZATA
+2C8E          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER HATE
+2C90          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER THETHE
+2C92          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER IAUDA
+2C94          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KAPA
+2C96          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER LAULA
+2C98          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER MI
+2C9A          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER NI
+2C9C          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KSI
+2C9E          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER O
+2CA0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER PI
+2CA2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER RO
+2CA4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SIMA
+2CA6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER TAU
+2CA8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER UA
+2CAA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER FI
+2CAC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KHI
+2CAE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER PSI
+2CB0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OOU
+2CB2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SAMPI
+2CC2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+A640          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZEMLYA
+A642          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZELO
+A644          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED DZE
+A646          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTA
+A648          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DJERV
+A64A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED YU
+A656          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED A
+A658          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YN
+A662          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT DE
+A664          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT EL
+A666          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT EM
+A668          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DWE
+A682          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZWE
+A684          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHWE
+A686          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CCHE
+A688          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZZE
+A68A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TWE
+A68E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TSWE
+A690          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TSSE
+A692          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TCHE
+A694          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HWE
+A696          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHWE
+A722          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER HENG
+A728          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TZ
+A72A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TRESILLO
+A72C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CUATRILLO
+A72E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AA
+A734          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AO
+A736          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AU
+A738          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AV
+A73A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AY
+A73E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH STROKE
+A742          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER BROKEN L
+A748          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH LOOP
+A74E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OO
+A750          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH FLOURISH
+A754          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R ROTUNDA
+A75C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER RUM ROTUNDA
+A75E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VY
+A762          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VISIGOTHIC Z
+A764          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER THORN WITH STROKE
+A766          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VEND
+A76A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ET
+A76C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER IS
+A76E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CON
+A779          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR D
+A77B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR F
+A77D..A77E    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TURNED L
+A782          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR R
+A784          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR S
+A786          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR T
+A78B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SALTILLO
+FF21..FF3A    ; Changes_When_Lowercased # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427  ; Changes_When_Lowercased # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+
+# Total code points: 1029
+
+# ================================================
+
+# Derived Property:   Changes_When_Uppercased (CWU)
+#  Characters whose normalized forms are not stable under a toUppercase mapping.
+#  For more information, see D125 in Section 3.13, "Default Case Algorithms".
+#  Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X)
+
+0061..007A    ; Changes_When_Uppercased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5          ; Changes_When_Uppercased # L&       MICRO SIGN
+00DF..00F6    ; Changes_When_Uppercased # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF    ; Changes_When_Uppercased # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH MACRON
+0103          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE
+0105          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH OGONEK
+0107          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH ACUTE
+0109          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH DOT ABOVE
+010D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CARON
+010F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CARON
+0111          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH STROKE
+0113          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON
+0115          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH BREVE
+0117          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOT ABOVE
+0119          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH OGONEK
+011B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CARON
+011D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH BREVE
+0121          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH DOT ABOVE
+0123          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CEDILLA
+0125          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH STROKE
+0129          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH TILDE
+012B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH MACRON
+012D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH BREVE
+012F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH OGONEK
+0131          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER DOTLESS I
+0133          ; Changes_When_Uppercased # L&       LATIN SMALL LIGATURE IJ
+0135          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH CEDILLA
+013A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH ACUTE
+013C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CEDILLA
+013E          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CARON
+0140          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH MIDDLE DOT
+0142          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH STROKE
+0144          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH ACUTE
+0146          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH CEDILLA
+0148..0149    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ENG
+014D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON
+014F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH BREVE
+0151          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153          ; Changes_When_Uppercased # L&       LATIN SMALL LIGATURE OE
+0155          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH ACUTE
+0157          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH CEDILLA
+0159          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH CARON
+015B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH ACUTE
+015D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CEDILLA
+0161          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CARON
+0163          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CEDILLA
+0165          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CARON
+0167          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH STROKE
+0169          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE
+016B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH MACRON
+016D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH BREVE
+016F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH RING ABOVE
+0171          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH OGONEK
+0175          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH ACUTE
+017C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180    ; Changes_When_Uppercased # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH TOPBAR
+0185          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE SIX
+0188          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH HOOK
+018C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH TOPBAR
+0192          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER F WITH HOOK
+0195          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HV
+0199..019A    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR
+019E          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN
+01A3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OI
+01A5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH HOOK
+01A8          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE TWO
+01AD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH HOOK
+01B0          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN
+01B4          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH HOOK
+01B6          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH STROKE
+01B9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EZH REVERSED
+01BD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE FIVE
+01BF          ; Changes_When_Uppercased # L&       LATIN LETTER WYNN
+01C5..01C6    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON..LATIN SMALL LETTER DZ WITH CARON
+01C8..01C9    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER L WITH SMALL LETTER J..LATIN SMALL LETTER LJ
+01CB..01CC    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER N WITH SMALL LETTER J..LATIN SMALL LETTER NJ
+01CE          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CARON
+01D0          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH CARON
+01D2          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CARON
+01D4          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH CARON
+01D6          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AE WITH MACRON
+01E5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH STROKE
+01E7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CARON
+01E9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH CARON
+01EB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH OGONEK
+01ED          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F0    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F2..01F3    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z..LATIN SMALL LETTER DZ
+01F5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH ACUTE
+01F9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH GRAVE
+01FB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AE WITH ACUTE
+01FF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH INVERTED BREVE
+0205          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH INVERTED BREVE
+0209          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH INVERTED BREVE
+020D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH INVERTED BREVE
+0211          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH INVERTED BREVE
+0215          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH INVERTED BREVE
+0219          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH COMMA BELOW
+021B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH COMMA BELOW
+021D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER YOGH
+021F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CARON
+0223          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OU
+0225          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH HOOK
+0227          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT ABOVE
+0229          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CEDILLA
+022B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT ABOVE
+0231          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH MACRON
+023C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH STROKE
+023F..0240    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GLOTTAL STOP
+0247          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH STROKE
+0249          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER J WITH STROKE
+024B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH HOOK TAIL
+024D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH STROKE
+024F..0254    ; Changes_When_Uppercased # L&   [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER SCHWA
+025B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OPEN E
+0260          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH HOOK
+0263          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GAMMA
+0268..0269    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER IOTA
+026B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH MIDDLE TILDE
+026F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED M
+0271..0272    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER BARRED O
+027D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH TAIL
+0280          ; Changes_When_Uppercased # L&       LATIN LETTER SMALL CAPITAL R
+0283          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ESH
+0288..028C    ; Changes_When_Uppercased # L&   [5] LATIN SMALL LETTER T WITH RETROFLEX HOOK..LATIN SMALL LETTER TURNED V
+0292          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EZH
+0345          ; Changes_When_Uppercased # Mn       COMBINING GREEK YPOGEGRAMMENI
+0371          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER HETA
+0373          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER ARCHAIC SAMPI
+0377          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D    ; Changes_When_Uppercased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE    ; Changes_When_Uppercased # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1    ; Changes_When_Uppercased # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7    ; Changes_When_Uppercased # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER ARCHAIC KOPPA
+03DB          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER STIGMA
+03DD          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER DIGAMMA
+03DF          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER KOPPA
+03E1          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SAMPI
+03E3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SHEI
+03E5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER FEI
+03E7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KHEI
+03E9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER HORI
+03EB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER GANGIA
+03ED          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SHIMA
+03EF..03F2    ; Changes_When_Uppercased # L&   [4] COPTIC SMALL LETTER DEI..GREEK LUNATE SIGMA SYMBOL
+03F5          ; Changes_When_Uppercased # L&       GREEK LUNATE EPSILON SYMBOL
+03F8          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SHO
+03FB          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SAN
+0430..045F    ; Changes_When_Uppercased # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OMEGA
+0463          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YAT
+0465          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED E
+0467          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER LITTLE YUS
+0469          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BIG YUS
+046D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KSI
+0471          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PSI
+0473          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER FITA
+0475          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IZHITSA
+0477          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER UK
+047B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ROUND OMEGA
+047D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OT
+0481          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOPPA
+048B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ER WITH TICK
+0491          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE
+0495          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH STROKE
+04A1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BASHKIR KA
+04A3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE EN GHE
+04A7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER STRAIGHT U
+04B1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE TE TSE
+04B7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHHA
+04BD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH HOOK
+04C6          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH TAIL
+04C8          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH HOOK
+04CA          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH TAIL
+04CC          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF    ; Changes_When_Uppercased # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER A WITH BREVE
+04D3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE A IE
+04D7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IE WITH BREVE
+04D9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SCHWA
+04DB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER I WITH MACRON
+04E5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BARRED O
+04EB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH MACRON
+04F1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH HOOK
+04FF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH STROKE
+0501          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DE
+0503          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DJE
+0505          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI ZJE
+0507          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DZJE
+0509          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI LJE
+050B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI NJE
+050D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI SJE
+050F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI TJE
+0511          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED ZE
+0513          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH HOOK
+0515          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER LHA
+0517          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER RHA
+0519          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YAE
+051B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER QA
+051D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER WE
+051F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ALEUT KA
+0521          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER
+0561..0587    ; Changes_When_Uppercased # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+1D79          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR G
+1D7D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH STROKE
+1E01          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH RING BELOW
+1E03          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH DOT ABOVE
+1E05          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH DOT BELOW
+1E07          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH LINE BELOW
+1E09          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH DOT BELOW
+1E0F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH LINE BELOW
+1E11          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CEDILLA
+1E13          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER F WITH DOT ABOVE
+1E21          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH MACRON
+1E23          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DOT ABOVE
+1E25          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DOT BELOW
+1E27          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DIAERESIS
+1E29          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CEDILLA
+1E2B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH ACUTE
+1E33          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DOT BELOW
+1E35          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH LINE BELOW
+1E37          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOT BELOW
+1E39          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH LINE BELOW
+1E3D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH ACUTE
+1E41          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH DOT ABOVE
+1E43          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH DOT BELOW
+1E45          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH DOT ABOVE
+1E47          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH DOT BELOW
+1E49          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH LINE BELOW
+1E4B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH ACUTE
+1E57          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH DOT ABOVE
+1E59          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT BELOW
+1E5D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH LINE BELOW
+1E61          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT ABOVE
+1E63          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT BELOW
+1E65          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH DOT BELOW
+1E6F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH LINE BELOW
+1E71          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE BELOW
+1E77          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH TILDE
+1E7F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH DOT BELOW
+1E81          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH GRAVE
+1E83          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH ACUTE
+1E85          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DIAERESIS
+1E87          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DOT ABOVE
+1E89          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DOT BELOW
+1E8B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER X WITH DIAERESIS
+1E8F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9B    ; Changes_When_Uppercased # L&   [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT BELOW
+1EA3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOT BELOW
+1EBB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH TILDE
+1EBF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DOT BELOW
+1ECD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT BELOW
+1ECF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOT BELOW
+1EE7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH GRAVE
+1EF5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH TILDE
+1EFB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07    ; Changes_When_Uppercased # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15    ; Changes_When_Uppercased # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45    ; Changes_When_Uppercased # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D    ; Changes_When_Uppercased # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Changes_When_Uppercased # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; Changes_When_Uppercased # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Changes_When_Uppercased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FCC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; Changes_When_Uppercased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4    ; Changes_When_Uppercased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FFC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+214E          ; Changes_When_Uppercased # L&       TURNED SMALL F
+2170..217F    ; Changes_When_Uppercased # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER REVERSED C
+24D0..24E9    ; Changes_When_Uppercased # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5E    ; Changes_When_Uppercased # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C61          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DESCENDER
+2C6A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DESCENDER
+2C6C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DESCENDER
+2C73          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH HOOK
+2C76          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HALF H
+2C81          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER ALFA
+2C83          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER VIDA
+2C85          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER GAMMA
+2C87          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DALDA
+2C89          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER EIE
+2C8B          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SOU
+2C8D          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER ZATA
+2C8F          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER HATE
+2C91          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER THETHE
+2C93          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER IAUDA
+2C95          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KAPA
+2C97          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER LAULA
+2C99          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER MI
+2C9B          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER NI
+2C9D          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KSI
+2C9F          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER O
+2CA1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER PI
+2CA3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER RO
+2CA5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SIMA
+2CA7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER TAU
+2CA9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER UA
+2CAB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER FI
+2CAD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KHI
+2CAF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER PSI
+2CB1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OOU
+2CB3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P NI
+2CBD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SAMPI
+2CC3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CROSSED SHEI
+2CC5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P HORI
+2CCD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HA
+2CD1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER L-SHAPED HA
+2CD3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEC          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Changes_When_Uppercased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+A641          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZEMLYA
+A643          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZELO
+A645          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED DZE
+A647          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTA
+A649          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DJERV
+A64B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BROAD OMEGA
+A64F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER NEUTRAL YER
+A651          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED YAT
+A655          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED YU
+A657          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED A
+A659          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BLENDED YUS
+A65D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YN
+A663          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT DE
+A665          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT EL
+A667          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT EM
+A669          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER MONOCULAR O
+A66B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BINOCULAR O
+A66D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DWE
+A683          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZWE
+A685          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHWE
+A687          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CCHE
+A689          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZZE
+A68B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TWE
+A68F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TSWE
+A691          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TSSE
+A693          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TCHE
+A695          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HWE
+A697          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHWE
+A723          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HENG
+A729          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TZ
+A72B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TRESILLO
+A72D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CUATRILLO
+A72F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CUATRILLO WITH COMMA
+A733          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AA
+A735          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AO
+A737          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AU
+A739          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AV
+A73B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AY
+A73F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER REVERSED C WITH DOT
+A741          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH STROKE
+A743          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER BROKEN L
+A749          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH HIGH STROKE
+A74B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH LOOP
+A74F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OO
+A751          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH FLOURISH
+A755          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R ROTUNDA
+A75D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER RUM ROTUNDA
+A75F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VY
+A763          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VISIGOTHIC Z
+A765          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER THORN WITH STROKE
+A767          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VEND
+A76B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ET
+A76D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER IS
+A76F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CON
+A77A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR D
+A77C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR F
+A77F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED INSULAR G
+A781          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED L
+A783          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR R
+A785          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR S
+A787          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR T
+A78C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER SALTILLO
+FB00..FB06    ; Changes_When_Uppercased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Changes_When_Uppercased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A    ; Changes_When_Uppercased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F  ; Changes_When_Uppercased # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 1112
+
+# ================================================
+
+# Derived Property:   Changes_When_Titlecased (CWT)
+#  Characters whose normalized forms are not stable under a toTitlecase mapping.
+#  For more information, see D126 in Section 3.13, "Default Case Algorithms".
+#  Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X)
+
+0061..007A    ; Changes_When_Titlecased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5          ; Changes_When_Titlecased # L&       MICRO SIGN
+00DF..00F6    ; Changes_When_Titlecased # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF    ; Changes_When_Titlecased # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH MACRON
+0103          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE
+0105          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH OGONEK
+0107          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH ACUTE
+0109          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH DOT ABOVE
+010D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CARON
+010F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CARON
+0111          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH STROKE
+0113          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON
+0115          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH BREVE
+0117          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOT ABOVE
+0119          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH OGONEK
+011B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CARON
+011D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH BREVE
+0121          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH DOT ABOVE
+0123          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CEDILLA
+0125          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH STROKE
+0129          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH TILDE
+012B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH MACRON
+012D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH BREVE
+012F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH OGONEK
+0131          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DOTLESS I
+0133          ; Changes_When_Titlecased # L&       LATIN SMALL LIGATURE IJ
+0135          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH CEDILLA
+013A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH ACUTE
+013C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CEDILLA
+013E          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CARON
+0140          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH MIDDLE DOT
+0142          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH STROKE
+0144          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH ACUTE
+0146          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH CEDILLA
+0148..0149    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ENG
+014D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON
+014F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH BREVE
+0151          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153          ; Changes_When_Titlecased # L&       LATIN SMALL LIGATURE OE
+0155          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH ACUTE
+0157          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH CEDILLA
+0159          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH CARON
+015B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH ACUTE
+015D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CEDILLA
+0161          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CARON
+0163          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CEDILLA
+0165          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CARON
+0167          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH STROKE
+0169          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE
+016B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH MACRON
+016D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH BREVE
+016F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH RING ABOVE
+0171          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH OGONEK
+0175          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH ACUTE
+017C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180    ; Changes_When_Titlecased # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH TOPBAR
+0185          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE SIX
+0188          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH HOOK
+018C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH TOPBAR
+0192          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER F WITH HOOK
+0195          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HV
+0199..019A    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR
+019E          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN
+01A3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OI
+01A5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH HOOK
+01A8          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE TWO
+01AD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH HOOK
+01B0          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN
+01B4          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH HOOK
+01B6          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH STROKE
+01B9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EZH REVERSED
+01BD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE FIVE
+01BF          ; Changes_When_Titlecased # L&       LATIN LETTER WYNN
+01C4          ; Changes_When_Titlecased # L&       LATIN CAPITAL LETTER DZ WITH CARON
+01C6..01C7    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER DZ WITH CARON..LATIN CAPITAL LETTER LJ
+01C9..01CA    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER LJ..LATIN CAPITAL LETTER NJ
+01CC          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER NJ
+01CE          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CARON
+01D0          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH CARON
+01D2          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CARON
+01D4          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH CARON
+01D6          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AE WITH MACRON
+01E5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH STROKE
+01E7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CARON
+01E9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH CARON
+01EB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH OGONEK
+01ED          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F1    ; Changes_When_Titlecased # L&   [3] LATIN SMALL LETTER EZH WITH CARON..LATIN CAPITAL LETTER DZ
+01F3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DZ
+01F5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH ACUTE
+01F9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH GRAVE
+01FB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AE WITH ACUTE
+01FF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH INVERTED BREVE
+0205          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH INVERTED BREVE
+0209          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH INVERTED BREVE
+020D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH INVERTED BREVE
+0211          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH INVERTED BREVE
+0215          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH INVERTED BREVE
+0219          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH COMMA BELOW
+021B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH COMMA BELOW
+021D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER YOGH
+021F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CARON
+0223          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OU
+0225          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH HOOK
+0227          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT ABOVE
+0229          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CEDILLA
+022B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT ABOVE
+0231          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH MACRON
+023C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH STROKE
+023F..0240    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GLOTTAL STOP
+0247          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH STROKE
+0249          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER J WITH STROKE
+024B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH HOOK TAIL
+024D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH STROKE
+024F..0254    ; Changes_When_Titlecased # L&   [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER SCHWA
+025B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OPEN E
+0260          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH HOOK
+0263          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GAMMA
+0268..0269    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER IOTA
+026B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH MIDDLE TILDE
+026F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED M
+0271..0272    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER BARRED O
+027D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH TAIL
+0280          ; Changes_When_Titlecased # L&       LATIN LETTER SMALL CAPITAL R
+0283          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ESH
+0288..028C    ; Changes_When_Titlecased # L&   [5] LATIN SMALL LETTER T WITH RETROFLEX HOOK..LATIN SMALL LETTER TURNED V
+0292          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EZH
+0345          ; Changes_When_Titlecased # Mn       COMBINING GREEK YPOGEGRAMMENI
+0371          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER HETA
+0373          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER ARCHAIC SAMPI
+0377          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D    ; Changes_When_Titlecased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE    ; Changes_When_Titlecased # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1    ; Changes_When_Titlecased # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7    ; Changes_When_Titlecased # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER ARCHAIC KOPPA
+03DB          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER STIGMA
+03DD          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER DIGAMMA
+03DF          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER KOPPA
+03E1          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SAMPI
+03E3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SHEI
+03E5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER FEI
+03E7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KHEI
+03E9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER HORI
+03EB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER GANGIA
+03ED          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SHIMA
+03EF..03F2    ; Changes_When_Titlecased # L&   [4] COPTIC SMALL LETTER DEI..GREEK LUNATE SIGMA SYMBOL
+03F5          ; Changes_When_Titlecased # L&       GREEK LUNATE EPSILON SYMBOL
+03F8          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SHO
+03FB          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SAN
+0430..045F    ; Changes_When_Titlecased # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OMEGA
+0463          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YAT
+0465          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED E
+0467          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER LITTLE YUS
+0469          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BIG YUS
+046D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KSI
+0471          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PSI
+0473          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER FITA
+0475          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IZHITSA
+0477          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER UK
+047B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ROUND OMEGA
+047D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OT
+0481          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOPPA
+048B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ER WITH TICK
+0491          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE
+0495          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH STROKE
+04A1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BASHKIR KA
+04A3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE EN GHE
+04A7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER STRAIGHT U
+04B1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE TE TSE
+04B7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHHA
+04BD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH HOOK
+04C6          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH TAIL
+04C8          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH HOOK
+04CA          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH TAIL
+04CC          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF    ; Changes_When_Titlecased # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER A WITH BREVE
+04D3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE A IE
+04D7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IE WITH BREVE
+04D9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SCHWA
+04DB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER I WITH MACRON
+04E5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BARRED O
+04EB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH MACRON
+04F1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH HOOK
+04FF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH STROKE
+0501          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DE
+0503          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DJE
+0505          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI ZJE
+0507          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DZJE
+0509          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI LJE
+050B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI NJE
+050D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI SJE
+050F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI TJE
+0511          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED ZE
+0513          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH HOOK
+0515          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER LHA
+0517          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER RHA
+0519          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YAE
+051B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER QA
+051D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER WE
+051F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ALEUT KA
+0521          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER
+0561..0587    ; Changes_When_Titlecased # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+1D79          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR G
+1D7D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH STROKE
+1E01          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH RING BELOW
+1E03          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH DOT ABOVE
+1E05          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH DOT BELOW
+1E07          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH LINE BELOW
+1E09          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH DOT BELOW
+1E0F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH LINE BELOW
+1E11          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CEDILLA
+1E13          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER F WITH DOT ABOVE
+1E21          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH MACRON
+1E23          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DOT ABOVE
+1E25          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DOT BELOW
+1E27          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DIAERESIS
+1E29          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CEDILLA
+1E2B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH ACUTE
+1E33          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DOT BELOW
+1E35          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH LINE BELOW
+1E37          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOT BELOW
+1E39          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH LINE BELOW
+1E3D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH ACUTE
+1E41          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH DOT ABOVE
+1E43          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH DOT BELOW
+1E45          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH DOT ABOVE
+1E47          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH DOT BELOW
+1E49          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH LINE BELOW
+1E4B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH ACUTE
+1E57          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH DOT ABOVE
+1E59          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT BELOW
+1E5D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH LINE BELOW
+1E61          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT ABOVE
+1E63          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT BELOW
+1E65          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH DOT BELOW
+1E6F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH LINE BELOW
+1E71          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE BELOW
+1E77          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH TILDE
+1E7F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH DOT BELOW
+1E81          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH GRAVE
+1E83          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH ACUTE
+1E85          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DIAERESIS
+1E87          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DOT ABOVE
+1E89          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DOT BELOW
+1E8B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER X WITH DIAERESIS
+1E8F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9B    ; Changes_When_Titlecased # L&   [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT BELOW
+1EA3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOT BELOW
+1EBB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH TILDE
+1EBF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DOT BELOW
+1ECD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT BELOW
+1ECF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOT BELOW
+1EE7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH GRAVE
+1EF5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH TILDE
+1EFB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07    ; Changes_When_Titlecased # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15    ; Changes_When_Titlecased # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45    ; Changes_When_Titlecased # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D    ; Changes_When_Titlecased # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1F87    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F90..1F97    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA0..1FA7    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FB0..1FB4    ; Changes_When_Titlecased # L&   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBE          ; Changes_When_Titlecased # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Changes_When_Titlecased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FD0..1FD3    ; Changes_When_Titlecased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4    ; Changes_When_Titlecased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+214E          ; Changes_When_Titlecased # L&       TURNED SMALL F
+2170..217F    ; Changes_When_Titlecased # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER REVERSED C
+24D0..24E9    ; Changes_When_Titlecased # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5E    ; Changes_When_Titlecased # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C61          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DESCENDER
+2C6A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DESCENDER
+2C6C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DESCENDER
+2C73          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH HOOK
+2C76          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HALF H
+2C81          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER ALFA
+2C83          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER VIDA
+2C85          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER GAMMA
+2C87          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DALDA
+2C89          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER EIE
+2C8B          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SOU
+2C8D          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER ZATA
+2C8F          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER HATE
+2C91          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER THETHE
+2C93          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER IAUDA
+2C95          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KAPA
+2C97          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER LAULA
+2C99          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER MI
+2C9B          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER NI
+2C9D          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KSI
+2C9F          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER O
+2CA1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER PI
+2CA3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER RO
+2CA5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SIMA
+2CA7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER TAU
+2CA9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER UA
+2CAB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER FI
+2CAD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KHI
+2CAF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER PSI
+2CB1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OOU
+2CB3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P NI
+2CBD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SAMPI
+2CC3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CROSSED SHEI
+2CC5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P HORI
+2CCD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HA
+2CD1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER L-SHAPED HA
+2CD3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEC          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Changes_When_Titlecased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+A641          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZEMLYA
+A643          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZELO
+A645          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED DZE
+A647          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTA
+A649          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DJERV
+A64B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BROAD OMEGA
+A64F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER NEUTRAL YER
+A651          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED YAT
+A655          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED YU
+A657          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED A
+A659          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BLENDED YUS
+A65D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YN
+A663          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT DE
+A665          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT EL
+A667          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT EM
+A669          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER MONOCULAR O
+A66B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BINOCULAR O
+A66D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DWE
+A683          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZWE
+A685          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHWE
+A687          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CCHE
+A689          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZZE
+A68B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TWE
+A68F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TSWE
+A691          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TSSE
+A693          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TCHE
+A695          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HWE
+A697          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHWE
+A723          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HENG
+A729          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TZ
+A72B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TRESILLO
+A72D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CUATRILLO
+A72F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CUATRILLO WITH COMMA
+A733          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AA
+A735          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AO
+A737          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AU
+A739          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AV
+A73B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AY
+A73F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER REVERSED C WITH DOT
+A741          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH STROKE
+A743          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER BROKEN L
+A749          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH HIGH STROKE
+A74B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH LOOP
+A74F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OO
+A751          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH FLOURISH
+A755          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R ROTUNDA
+A75D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER RUM ROTUNDA
+A75F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VY
+A763          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VISIGOTHIC Z
+A765          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER THORN WITH STROKE
+A767          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VEND
+A76B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ET
+A76D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER IS
+A76F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CON
+A77A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR D
+A77C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR F
+A77F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED INSULAR G
+A781          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED L
+A783          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR R
+A785          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR S
+A787          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR T
+A78C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER SALTILLO
+FB00..FB06    ; Changes_When_Titlecased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Changes_When_Titlecased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A    ; Changes_When_Titlecased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F  ; Changes_When_Titlecased # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 1085
+
+# ================================================
+
+# Derived Property:   Changes_When_Casefolded (CWCF)
+#  Characters whose normalized forms are not stable under case folding.
+#  For more information, see D127 in Section 3.13, "Default Case Algorithms".
+#  Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X)
+
+0041..005A    ; Changes_When_Casefolded # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00B5          ; Changes_When_Casefolded # L&       MICRO SIGN
+00C0..00D6    ; Changes_When_Casefolded # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DF    ; Changes_When_Casefolded # L&   [8] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER SHARP S
+0100          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH MACRON
+0102          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE
+0104          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH OGONEK
+0106          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH ACUTE
+0108          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CARON
+010E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CARON
+0110          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH STROKE
+0112          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON
+0114          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH BREVE
+0116          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH OGONEK
+011A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CARON
+011C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH BREVE
+0120          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CEDILLA
+0124          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH STROKE
+0128          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH TILDE
+012A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH MACRON
+012C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH BREVE
+012E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH OGONEK
+0130          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132          ; Changes_When_Casefolded # L&       LATIN CAPITAL LIGATURE IJ
+0134          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH CEDILLA
+0139          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH ACUTE
+013B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CEDILLA
+013D          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CARON
+013F          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH STROKE
+0143          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH ACUTE
+0145          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CEDILLA
+0147          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CARON
+0149..014A    ; Changes_When_Casefolded # L&   [2] LATIN SMALL LETTER N PRECEDED BY APOSTROPHE..LATIN CAPITAL LETTER ENG
+014C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON
+014E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH BREVE
+0150          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152          ; Changes_When_Casefolded # L&       LATIN CAPITAL LIGATURE OE
+0154          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH ACUTE
+0156          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH CEDILLA
+0158          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH CARON
+015A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH ACUTE
+015C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CEDILLA
+0160          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CARON
+0162          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CEDILLA
+0164          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CARON
+0166          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH STROKE
+0168          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE
+016A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH MACRON
+016C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH BREVE
+016E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH RING ABOVE
+0170          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH OGONEK
+0174          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH CARON
+017F          ; Changes_When_Casefolded # L&       LATIN SMALL LETTER LONG S
+0181..0182    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TONE SIX
+0186..0187    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OI
+01A4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7    ; Changes_When_Casefolded # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER ESH
+01AC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TONE FIVE
+01C4..01C5    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7..01C8    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA..01CB    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CARON
+01CF          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH CARON
+01D1          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CARON
+01D3          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH CARON
+01D5          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AE WITH MACRON
+01E4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH STROKE
+01E6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CARON
+01E8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH CARON
+01EA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH OGONEK
+01EC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F2    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AE WITH ACUTE
+01FE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER YOGH
+021E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CARON
+0220          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OU
+0224          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH HOOK
+0226          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CEDILLA
+022A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER J WITH STROKE
+024A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH STROKE
+024E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH STROKE
+0345          ; Changes_When_Casefolded # Mn       COMBINING GREEK YPOGEGRAMMENI
+0370          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER HETA
+0372          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+0386          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Changes_When_Casefolded # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1    ; Changes_When_Casefolded # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB    ; Changes_When_Casefolded # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03C2          ; Changes_When_Casefolded # L&       GREEK SMALL LETTER FINAL SIGMA
+03CF..03D1    ; Changes_When_Casefolded # L&   [3] GREEK CAPITAL KAI SYMBOL..GREEK THETA SYMBOL
+03D5..03D6    ; Changes_When_Casefolded # L&   [2] GREEK PHI SYMBOL..GREEK PI SYMBOL
+03D8          ; Changes_When_Casefolded # L&       GREEK LETTER ARCHAIC KOPPA
+03DA          ; Changes_When_Casefolded # L&       GREEK LETTER STIGMA
+03DC          ; Changes_When_Casefolded # L&       GREEK LETTER DIGAMMA
+03DE          ; Changes_When_Casefolded # L&       GREEK LETTER KOPPA
+03E0          ; Changes_When_Casefolded # L&       GREEK LETTER SAMPI
+03E2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SHEI
+03E4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER FEI
+03E6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KHEI
+03E8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER HORI
+03EA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER GANGIA
+03EC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SHIMA
+03EE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DEI
+03F0..03F1    ; Changes_When_Casefolded # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER SHO
+03F9..03FA    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F    ; Changes_When_Casefolded # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OMEGA
+0462          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YAT
+0464          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED E
+0466          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER LITTLE YUS
+0468          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BIG YUS
+046C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KSI
+0470          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PSI
+0472          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER FITA
+0474          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IZHITSA
+0476          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER UK
+047A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OT
+0480          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOPPA
+048A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ER WITH TICK
+0490          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE EN GHE
+04A6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE TE TSE
+04B6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHHA
+04BC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1    ; Changes_When_Casefolded # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE A IE
+04D6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SCHWA
+04DA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BARRED O
+04EA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DE
+0502          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DJE
+0504          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI ZJE
+0506          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DZJE
+0508          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI LJE
+050A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI NJE
+050C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI SJE
+050E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI TJE
+0510          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED ZE
+0512          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER LHA
+0516          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER RHA
+0518          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YAE
+051A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER QA
+051C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER WE
+051E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ALEUT KA
+0520          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0531..0556    ; Changes_When_Casefolded # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0587          ; Changes_When_Casefolded # L&       ARMENIAN SMALL LIGATURE ECH YIWN
+10A0..10C5    ; Changes_When_Casefolded # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+1E00          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH RING BELOW
+1E02          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CEDILLA
+1E12          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH MACRON
+1E22          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH ACUTE
+1E32          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH ACUTE
+1E40          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH ACUTE
+1E56          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH TILDE
+1E7E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH GRAVE
+1E82          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH ACUTE
+1E84          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9A..1E9B    ; Changes_When_Casefolded # L&   [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SHARP S
+1EA0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH TILDE
+1EBE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH TILDE
+1EFA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D    ; Changes_When_Casefolded # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D    ; Changes_When_Casefolded # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80..1FAF    ; Changes_When_Casefolded # L&  [48] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2..1FB4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB7..1FBC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC2..1FC4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC7..1FCC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD8..1FDB    ; Changes_When_Casefolded # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC    ; Changes_When_Casefolded # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF7..1FFC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126          ; Changes_When_Casefolded # L&       OHM SIGN
+212A..212B    ; Changes_When_Casefolded # L&   [2] KELVIN SIGN..ANGSTROM SIGN
+2132          ; Changes_When_Casefolded # L&       TURNED CAPITAL F
+2160..216F    ; Changes_When_Casefolded # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183          ; Changes_When_Casefolded # L&       ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF    ; Changes_When_Casefolded # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2E    ; Changes_When_Casefolded # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DESCENDER
+2C69          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH HOOK
+2C75          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER HALF H
+2C7E..2C80    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER VIDA
+2C84          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER GAMMA
+2C86          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DALDA
+2C88          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER EIE
+2C8A          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SOU
+2C8C          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER ZATA
+2C8E          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER HATE
+2C90          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER THETHE
+2C92          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER IAUDA
+2C94          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KAPA
+2C96          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER LAULA
+2C98          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER MI
+2C9A          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER NI
+2C9C          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KSI
+2C9E          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER O
+2CA0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER PI
+2CA2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER RO
+2CA4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SIMA
+2CA6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER TAU
+2CA8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER UA
+2CAA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER FI
+2CAC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KHI
+2CAE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER PSI
+2CB0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OOU
+2CB2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SAMPI
+2CC2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+A640          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZEMLYA
+A642          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZELO
+A644          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED DZE
+A646          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTA
+A648          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DJERV
+A64A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED YU
+A656          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED A
+A658          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YN
+A662          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT DE
+A664          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT EL
+A666          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT EM
+A668          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DWE
+A682          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZWE
+A684          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHWE
+A686          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CCHE
+A688          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZZE
+A68A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TWE
+A68E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TSWE
+A690          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TSSE
+A692          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TCHE
+A694          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HWE
+A696          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHWE
+A722          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER HENG
+A728          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TZ
+A72A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TRESILLO
+A72C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CUATRILLO
+A72E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AA
+A734          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AO
+A736          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AU
+A738          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AV
+A73A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AY
+A73E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH STROKE
+A742          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER BROKEN L
+A748          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH LOOP
+A74E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OO
+A750          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH FLOURISH
+A754          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R ROTUNDA
+A75C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER RUM ROTUNDA
+A75E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VY
+A762          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VISIGOTHIC Z
+A764          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER THORN WITH STROKE
+A766          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VEND
+A76A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER ET
+A76C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER IS
+A76E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CON
+A779          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR D
+A77B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR F
+A77D..A77E    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TURNED L
+A782          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR R
+A784          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR S
+A786          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR T
+A78B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SALTILLO
+FB00..FB06    ; Changes_When_Casefolded # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Changes_When_Casefolded # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A    ; Changes_When_Casefolded # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427  ; Changes_When_Casefolded # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+
+# Total code points: 1093
+
+# ================================================
+
+# Derived Property:   Changes_When_Casemapped (CWCM)
+#  Characters whose normalized forms are not stable under case mapping.
+#  For more information, see D128 in Section 3.13, "Default Case Algorithms".
+#  Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X)
+
+0041..005A    ; Changes_When_Casemapped # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; Changes_When_Casemapped # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5          ; Changes_When_Casemapped # L&       MICRO SIGN
+00C0..00D6    ; Changes_When_Casemapped # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Changes_When_Casemapped # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..0137    ; Changes_When_Casemapped # L&  [64] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER K WITH CEDILLA
+0139..018C    ; Changes_When_Casemapped # L&  [84] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER D WITH TOPBAR
+018E..019A    ; Changes_When_Casemapped # L&  [13] LATIN CAPITAL LETTER REVERSED E..LATIN SMALL LETTER L WITH BAR
+019C..01A9    ; Changes_When_Casemapped # L&  [14] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER ESH
+01AC..01B9    ; Changes_When_Casemapped # L&  [14] LATIN CAPITAL LETTER T WITH HOOK..LATIN SMALL LETTER EZH REVERSED
+01BC..01BD    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE
+01BF          ; Changes_When_Casemapped # L&       LATIN LETTER WYNN
+01C4..0220    ; Changes_When_Casemapped # L&  [93] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222..0233    ; Changes_When_Casemapped # L&  [18] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Y WITH MACRON
+023A..0254    ; Changes_When_Casemapped # L&  [27] LATIN CAPITAL LETTER A WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER SCHWA
+025B          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER OPEN E
+0260          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER G WITH HOOK
+0263          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER GAMMA
+0268..0269    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER IOTA
+026B          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER L WITH MIDDLE TILDE
+026F          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER TURNED M
+0271..0272    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER BARRED O
+027D          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER R WITH TAIL
+0280          ; Changes_When_Casemapped # L&       LATIN LETTER SMALL CAPITAL R
+0283          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER ESH
+0288..028C    ; Changes_When_Casemapped # L&   [5] LATIN SMALL LETTER T WITH RETROFLEX HOOK..LATIN SMALL LETTER TURNED V
+0292          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER EZH
+0345          ; Changes_When_Casemapped # Mn       COMBINING GREEK YPOGEGRAMMENI
+0370..0373    ; Changes_When_Casemapped # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0376..0377    ; Changes_When_Casemapped # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D    ; Changes_When_Casemapped # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Changes_When_Casemapped # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Changes_When_Casemapped # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03D1    ; Changes_When_Casemapped # L&  [47] GREEK CAPITAL LETTER SIGMA..GREEK THETA SYMBOL
+03D5..03F2    ; Changes_When_Casemapped # L&  [30] GREEK PHI SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5    ; Changes_When_Casemapped # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7..03FB    ; Changes_When_Casemapped # L&   [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN
+03FD..0481    ; Changes_When_Casemapped # L& [133] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC SMALL LETTER KOPPA
+048A..0525    ; Changes_When_Casemapped # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; Changes_When_Casemapped # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0561..0587    ; Changes_When_Casemapped # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+10A0..10C5    ; Changes_When_Casemapped # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+1D79          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER INSULAR G
+1D7D          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER P WITH STROKE
+1E00..1E9B    ; Changes_When_Casemapped # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E          ; Changes_When_Casemapped # L&       LATIN CAPITAL LETTER SHARP S
+1EA0..1F15    ; Changes_When_Casemapped # L& [118] LATIN CAPITAL LETTER A WITH DOT BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Changes_When_Casemapped # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Changes_When_Casemapped # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Changes_When_Casemapped # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Changes_When_Casemapped # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; Changes_When_Casemapped # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Changes_When_Casemapped # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; Changes_When_Casemapped # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; Changes_When_Casemapped # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; Changes_When_Casemapped # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; Changes_When_Casemapped # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; Changes_When_Casemapped # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Changes_When_Casemapped # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126          ; Changes_When_Casemapped # L&       OHM SIGN
+212A..212B    ; Changes_When_Casemapped # L&   [2] KELVIN SIGN..ANGSTROM SIGN
+2132          ; Changes_When_Casemapped # L&       TURNED CAPITAL F
+214E          ; Changes_When_Casemapped # L&       TURNED SMALL F
+2160..217F    ; Changes_When_Casemapped # Nl  [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2183..2184    ; Changes_When_Casemapped # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+24B6..24E9    ; Changes_When_Casemapped # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C2E    ; Changes_When_Casemapped # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Changes_When_Casemapped # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C70    ; Changes_When_Casemapped # L&  [17] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN CAPITAL LETTER TURNED ALPHA
+2C72..2C73    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER W WITH HOOK..LATIN SMALL LETTER W WITH HOOK
+2C75..2C76    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER HALF H..LATIN SMALL LETTER HALF H
+2C7E..2CE3    ; Changes_When_Casemapped # L& [102] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEB..2CEE    ; Changes_When_Casemapped # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; Changes_When_Casemapped # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+A640..A65F    ; Changes_When_Casemapped # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; Changes_When_Casemapped # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A680..A697    ; Changes_When_Casemapped # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A722..A72F    ; Changes_When_Casemapped # L&  [14] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CUATRILLO WITH COMMA
+A732..A76F    ; Changes_When_Casemapped # L&  [62] LATIN CAPITAL LETTER AA..LATIN SMALL LETTER CON
+A779..A787    ; Changes_When_Casemapped # L&  [15] LATIN CAPITAL LETTER INSULAR D..LATIN SMALL LETTER INSULAR T
+A78B..A78C    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+FB00..FB06    ; Changes_When_Casemapped # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Changes_When_Casemapped # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A    ; Changes_When_Casemapped # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; Changes_When_Casemapped # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10400..1044F  ; Changes_When_Casemapped # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 2110
+
+# ================================================
+
+# Derived Property: ID_Start
+#  Characters that can start an identifier.
+#  Generated from:
+#      Lu + Ll + Lt + Lm + Lo + Nl
+#    + Other_ID_Start
+#    - Pattern_Syntax
+#    - Pattern_White_Space
+#  NOTE: See UAX #31 for more information
+
+0041..005A    ; ID_Start # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; ID_Start # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; ID_Start # L&       FEMININE ORDINAL INDICATOR
+00B5          ; ID_Start # L&       MICRO SIGN
+00BA          ; ID_Start # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; ID_Start # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; ID_Start # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; ID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; ID_Start # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; ID_Start # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; ID_Start # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; ID_Start # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; ID_Start # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; ID_Start # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; ID_Start # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; ID_Start # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; ID_Start # Lm       MODIFIER LETTER VOICING
+02EE          ; ID_Start # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0370..0373    ; ID_Start # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; ID_Start # Lm       GREEK NUMERAL SIGN
+0376..0377    ; ID_Start # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; ID_Start # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; ID_Start # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; ID_Start # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; ID_Start # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; ID_Start # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; ID_Start # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; ID_Start # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; ID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..0525    ; ID_Start # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; ID_Start # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; ID_Start # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; ID_Start # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+05D0..05EA    ; ID_Start # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; ID_Start # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0621..063F    ; ID_Start # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; ID_Start # Lm       ARABIC TATWEEL
+0641..064A    ; ID_Start # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+066E..066F    ; ID_Start # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3    ; ID_Start # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; ID_Start # Lo       ARABIC LETTER AE
+06E5..06E6    ; ID_Start # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF    ; ID_Start # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC    ; ID_Start # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; ID_Start # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; ID_Start # Lo       SYRIAC LETTER ALAPH
+0712..072F    ; ID_Start # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5    ; ID_Start # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1          ; ID_Start # Lo       THAANA LETTER NAA
+07CA..07EA    ; ID_Start # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5    ; ID_Start # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; ID_Start # Lm       NKO LAJANYALAN
+0800..0815    ; ID_Start # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0828          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER I
+0904..0939    ; ID_Start # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D          ; ID_Start # Lo       DEVANAGARI SIGN AVAGRAHA
+0950          ; ID_Start # Lo       DEVANAGARI OM
+0958..0961    ; ID_Start # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0971          ; ID_Start # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; ID_Start # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; ID_Start # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0985..098C    ; ID_Start # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; ID_Start # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; ID_Start # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; ID_Start # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; ID_Start # Lo       BENGALI LETTER LA
+09B6..09B9    ; ID_Start # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD          ; ID_Start # Lo       BENGALI SIGN AVAGRAHA
+09CE          ; ID_Start # Lo       BENGALI LETTER KHANDA TA
+09DC..09DD    ; ID_Start # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; ID_Start # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09F0..09F1    ; ID_Start # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A05..0A0A    ; ID_Start # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; ID_Start # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; ID_Start # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; ID_Start # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; ID_Start # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; ID_Start # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; ID_Start # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A59..0A5C    ; ID_Start # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; ID_Start # Lo       GURMUKHI LETTER FA
+0A72..0A74    ; ID_Start # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A85..0A8D    ; ID_Start # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; ID_Start # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; ID_Start # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; ID_Start # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; ID_Start # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; ID_Start # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD          ; ID_Start # Lo       GUJARATI SIGN AVAGRAHA
+0AD0          ; ID_Start # Lo       GUJARATI OM
+0AE0..0AE1    ; ID_Start # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0B05..0B0C    ; ID_Start # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; ID_Start # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; ID_Start # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; ID_Start # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; ID_Start # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; ID_Start # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D          ; ID_Start # Lo       ORIYA SIGN AVAGRAHA
+0B5C..0B5D    ; ID_Start # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; ID_Start # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B71          ; ID_Start # Lo       ORIYA LETTER WA
+0B83          ; ID_Start # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; ID_Start # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; ID_Start # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; ID_Start # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; ID_Start # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; ID_Start # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; ID_Start # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; ID_Start # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; ID_Start # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; ID_Start # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BD0          ; ID_Start # Lo       TAMIL OM
+0C05..0C0C    ; ID_Start # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; ID_Start # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; ID_Start # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; ID_Start # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; ID_Start # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; ID_Start # Lo       TELUGU SIGN AVAGRAHA
+0C58..0C59    ; ID_Start # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; ID_Start # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C85..0C8C    ; ID_Start # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; ID_Start # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; ID_Start # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; ID_Start # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; ID_Start # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD          ; ID_Start # Lo       KANNADA SIGN AVAGRAHA
+0CDE          ; ID_Start # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; ID_Start # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0D05..0D0C    ; ID_Start # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; ID_Start # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; ID_Start # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; ID_Start # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; ID_Start # Lo       MALAYALAM SIGN AVAGRAHA
+0D60..0D61    ; ID_Start # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D7A..0D7F    ; ID_Start # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D85..0D96    ; ID_Start # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; ID_Start # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; ID_Start # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; ID_Start # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; ID_Start # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0E01..0E30    ; ID_Start # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32..0E33    ; ID_Start # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E40..0E45    ; ID_Start # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; ID_Start # Lm       THAI CHARACTER MAIYAMOK
+0E81..0E82    ; ID_Start # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; ID_Start # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; ID_Start # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; ID_Start # Lo       LAO LETTER SO TAM
+0E8D          ; ID_Start # Lo       LAO LETTER NYO
+0E94..0E97    ; ID_Start # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; ID_Start # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; ID_Start # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; ID_Start # Lo       LAO LETTER LO LOOT
+0EA7          ; ID_Start # Lo       LAO LETTER WO
+0EAA..0EAB    ; ID_Start # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; ID_Start # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB2..0EB3    ; ID_Start # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EBD          ; ID_Start # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; ID_Start # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; ID_Start # Lm       LAO KO LA
+0EDC..0EDD    ; ID_Start # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; ID_Start # Lo       TIBETAN SYLLABLE OM
+0F40..0F47    ; ID_Start # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; ID_Start # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F88..0F8B    ; ID_Start # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+1000..102A    ; ID_Start # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+103F          ; ID_Start # Lo       MYANMAR LETTER GREAT SA
+1050..1055    ; ID_Start # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+105A..105D    ; ID_Start # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061          ; ID_Start # Lo       MYANMAR LETTER SGAW KAREN SHA
+1065..1066    ; ID_Start # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+106E..1070    ; ID_Start # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081    ; ID_Start # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+108E          ; ID_Start # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+10A0..10C5    ; ID_Start # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; ID_Start # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; ID_Start # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; ID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; ID_Start # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; ID_Start # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; ID_Start # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; ID_Start # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; ID_Start # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; ID_Start # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; ID_Start # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1380..138F    ; ID_Start # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F4    ; ID_Start # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C    ; ID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F    ; ID_Start # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A    ; ID_Start # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; ID_Start # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; ID_Start # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; ID_Start # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; ID_Start # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1720..1731    ; ID_Start # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1740..1751    ; ID_Start # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C    ; ID_Start # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; ID_Start # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3    ; ID_Start # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17D7          ; ID_Start # Lm       KHMER SIGN LEK TOO
+17DC          ; ID_Start # Lo       KHMER SIGN AVAKRAHASANYA
+1820..1842    ; ID_Start # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; ID_Start # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; ID_Start # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; ID_Start # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA          ; ID_Start # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; ID_Start # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; ID_Start # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1950..196D    ; ID_Start # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; ID_Start # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; ID_Start # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19C1..19C7    ; ID_Start # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+1A00..1A16    ; ID_Start # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A20..1A54    ; ID_Start # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1AA7          ; ID_Start # Lm       TAI THAM SIGN MAI YAMOK
+1B05..1B33    ; ID_Start # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B45..1B4B    ; ID_Start # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B83..1BA0    ; ID_Start # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BAE..1BAF    ; ID_Start # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1C00..1C23    ; ID_Start # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C4D..1C4F    ; ID_Start # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77    ; ID_Start # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; ID_Start # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CE9..1CEC    ; ID_Start # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1    ; ID_Start # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1D00..1D2B    ; ID_Start # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; ID_Start # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; ID_Start # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; ID_Start # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; ID_Start # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; ID_Start # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15    ; ID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; ID_Start # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; ID_Start # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; ID_Start # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; ID_Start # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; ID_Start # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; ID_Start # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; ID_Start # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; ID_Start # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; ID_Start # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; ID_Start # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; ID_Start # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; ID_Start # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; ID_Start # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; ID_Start # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; ID_Start # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071          ; ID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; ID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; ID_Start # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2102          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; ID_Start # L&       EULER CONSTANT
+210A..2113    ; ID_Start # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL N
+2118          ; ID_Start # So       SCRIPT CAPITAL P
+2119..211D    ; ID_Start # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; ID_Start # L&       OHM SIGN
+2128          ; ID_Start # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; ID_Start # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E          ; ID_Start # So       ESTIMATED SYMBOL
+212F..2134    ; ID_Start # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; ID_Start # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; ID_Start # L&       INFORMATION SOURCE
+213C..213F    ; ID_Start # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; ID_Start # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; ID_Start # L&       TURNED SMALL F
+2160..2182    ; ID_Start # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; ID_Start # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; ID_Start # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C2E    ; ID_Start # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; ID_Start # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; ID_Start # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; ID_Start # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; ID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; ID_Start # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; ID_Start # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; ID_Start # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; ID_Start # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; ID_Start # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005          ; ID_Start # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; ID_Start # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; ID_Start # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; ID_Start # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035    ; ID_Start # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A    ; ID_Start # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; ID_Start # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; ID_Start # Lo       MASU MARK
+3041..3096    ; ID_Start # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309B..309C    ; ID_Start # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; ID_Start # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; ID_Start # Lo       HIRAGANA DIGRAPH YORI
+30A1..30FA    ; ID_Start # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; ID_Start # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; ID_Start # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; ID_Start # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; ID_Start # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31B7    ; ID_Start # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF    ; ID_Start # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DB5    ; ID_Start # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; ID_Start # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; ID_Start # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; ID_Start # Lm       YI SYLLABLE WU
+A016..A48C    ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7    ; ID_Start # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; ID_Start # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B    ; ID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; ID_Start # Lm       VAI SYLLABLE LENGTHENER
+A610..A61F    ; ID_Start # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B    ; ID_Start # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; ID_Start # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; ID_Start # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; ID_Start # Lo       CYRILLIC LETTER MULTIOCULAR O
+A67F          ; ID_Start # Lm       CYRILLIC PAYEROK
+A680..A697    ; ID_Start # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; ID_Start # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; ID_Start # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F    ; ID_Start # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F    ; ID_Start # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; ID_Start # Lm       MODIFIER LETTER US
+A771..A787    ; ID_Start # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; ID_Start # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78C    ; ID_Start # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; ID_Start # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805    ; ID_Start # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A    ; ID_Start # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822    ; ID_Start # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A840..A873    ; ID_Start # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A882..A8B3    ; ID_Start # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8F2..A8F7    ; ID_Start # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; ID_Start # Lo       DEVANAGARI HEADSTROKE
+A90A..A925    ; ID_Start # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A930..A946    ; ID_Start # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A960..A97C    ; ID_Start # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A984..A9B2    ; ID_Start # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9CF          ; ID_Start # Lm       JAVANESE PANGRANGKEP
+AA00..AA28    ; ID_Start # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA40..AA42    ; ID_Start # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B    ; ID_Start # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA60..AA6F    ; ID_Start # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; ID_Start # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; ID_Start # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A          ; ID_Start # Lo       MYANMAR LETTER AITON RA
+AA80..AAAF    ; ID_Start # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB1          ; ID_Start # Lo       TAI VIET VOWEL AA
+AAB5..AAB6    ; ID_Start # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD    ; ID_Start # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0          ; ID_Start # Lo       TAI VIET TONE MAI NUENG
+AAC2          ; ID_Start # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; ID_Start # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; ID_Start # Lm       TAI VIET SYMBOL SAM
+ABC0..ABE2    ; ID_Start # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+AC00..D7A3    ; ID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; ID_Start # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; ID_Start # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; ID_Start # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; ID_Start # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; ID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; ID_Start # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; ID_Start # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; ID_Start # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28    ; ID_Start # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36    ; ID_Start # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; ID_Start # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; ID_Start # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; ID_Start # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; ID_Start # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; ID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; ID_Start # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; ID_Start # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; ID_Start # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; ID_Start # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE70..FE74    ; ID_Start # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; ID_Start # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A    ; ID_Start # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; ID_Start # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F    ; ID_Start # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; ID_Start # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; ID_Start # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F    ; ID_Start # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE    ; ID_Start # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; ID_Start # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B  ; ID_Start # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; ID_Start # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; ID_Start # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; ID_Start # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; ID_Start # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; ID_Start # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; ID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174  ; ID_Start # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C  ; ID_Start # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; ID_Start # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; ID_Start # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10330..10340  ; ID_Start # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; ID_Start # Nl       GOTHIC LETTER NINETY
+10342..10349  ; ID_Start # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; ID_Start # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; ID_Start # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; ID_Start # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; ID_Start # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; ID_Start # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; ID_Start # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; ID_Start # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+10800..10805  ; ID_Start # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; ID_Start # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; ID_Start # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; ID_Start # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; ID_Start # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; ID_Start # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10900..10915  ; ID_Start # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; ID_Start # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+10A00         ; ID_Start # Lo       KHAROSHTHI LETTER A
+10A10..10A13  ; ID_Start # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; ID_Start # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; ID_Start # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A60..10A7C  ; ID_Start # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10B00..10B35  ; ID_Start # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; ID_Start # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; ID_Start # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10C00..10C48  ; ID_Start # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+11083..110AF  ; ID_Start # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+12000..1236E  ; ID_Start # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; ID_Start # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+13000..1342E  ; ID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D400..1D454  ; ID_Start # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; ID_Start # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; ID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; ID_Start # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; ID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; ID_Start # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; ID_Start # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; ID_Start # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; ID_Start # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; ID_Start # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; ID_Start # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; ID_Start # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; ID_Start # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; ID_Start # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; ID_Start # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; ID_Start # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; ID_Start # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; ID_Start # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; ID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; ID_Start # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; ID_Start # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; ID_Start # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; ID_Start # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; ID_Start # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; ID_Start # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; ID_Start # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; ID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; ID_Start # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; ID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; ID_Start # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+20000..2A6D6  ; ID_Start # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; ID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 99764
+
+# ================================================
+
+# Derived Property: ID_Continue
+#  Characters that can continue an identifier.
+#  Generated from:
+#      ID_Start
+#    + Mn + Mc + Nd + Pc
+#    + Other_ID_Continue
+#    - Pattern_Syntax
+#    - Pattern_White_Space
+#  NOTE: See UAX #31 for more information
+
+0030..0039    ; ID_Continue # Nd  [10] DIGIT ZERO..DIGIT NINE
+0041..005A    ; ID_Continue # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F          ; ID_Continue # Pc       LOW LINE
+0061..007A    ; ID_Continue # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; ID_Continue # L&       FEMININE ORDINAL INDICATOR
+00B5          ; ID_Continue # L&       MICRO SIGN
+00B7          ; ID_Continue # Po       MIDDLE DOT
+00BA          ; ID_Continue # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; ID_Continue # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; ID_Continue # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; ID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; ID_Continue # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; ID_Continue # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; ID_Continue # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; ID_Continue # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; ID_Continue # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; ID_Continue # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; ID_Continue # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; ID_Continue # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; ID_Continue # Lm       MODIFIER LETTER VOICING
+02EE          ; ID_Continue # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0300..036F    ; ID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0370..0373    ; ID_Continue # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; ID_Continue # Lm       GREEK NUMERAL SIGN
+0376..0377    ; ID_Continue # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; ID_Continue # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; ID_Continue # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; ID_Continue # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387          ; ID_Continue # Po       GREEK ANO TELEIA
+0388..038A    ; ID_Continue # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; ID_Continue # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; ID_Continue # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; ID_Continue # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; ID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0483..0487    ; ID_Continue # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+048A..0525    ; ID_Continue # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; ID_Continue # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; ID_Continue # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; ID_Continue # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0591..05BD    ; ID_Continue # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF          ; ID_Continue # Mn       HEBREW POINT RAFE
+05C1..05C2    ; ID_Continue # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; ID_Continue # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; ID_Continue # Mn       HEBREW POINT QAMATS QATAN
+05D0..05EA    ; ID_Continue # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; ID_Continue # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A    ; ID_Continue # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0621..063F    ; ID_Continue # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; ID_Continue # Lm       ARABIC TATWEEL
+0641..064A    ; ID_Continue # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065E    ; ID_Continue # Mn  [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS
+0660..0669    ; ID_Continue # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066E..066F    ; ID_Continue # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670          ; ID_Continue # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3    ; ID_Continue # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; ID_Continue # Lo       ARABIC LETTER AE
+06D6..06DC    ; ID_Continue # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4    ; ID_Continue # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; ID_Continue # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; ID_Continue # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED    ; ID_Continue # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF    ; ID_Continue # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; ID_Continue # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC    ; ID_Continue # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; ID_Continue # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; ID_Continue # Lo       SYRIAC LETTER ALAPH
+0711          ; ID_Continue # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F    ; ID_Continue # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A    ; ID_Continue # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..07A5    ; ID_Continue # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0    ; ID_Continue # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07B1          ; ID_Continue # Lo       THAANA LETTER NAA
+07C0..07C9    ; ID_Continue # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA    ; ID_Continue # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3    ; ID_Continue # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5    ; ID_Continue # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; ID_Continue # Lm       NKO LAJANYALAN
+0800..0815    ; ID_Continue # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819    ; ID_Continue # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; ID_Continue # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; ID_Continue # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER I
+0829..082D    ; ID_Continue # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0900..0902    ; ID_Continue # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; ID_Continue # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; ID_Continue # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093C          ; ID_Continue # Mn       DEVANAGARI SIGN NUKTA
+093D          ; ID_Continue # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; ID_Continue # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; ID_Continue # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; ID_Continue # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D          ; ID_Continue # Mn       DEVANAGARI SIGN VIRAMA
+094E          ; ID_Continue # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950          ; ID_Continue # Lo       DEVANAGARI OM
+0951..0955    ; ID_Continue # Mn   [5] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN CANDRA LONG E
+0958..0961    ; ID_Continue # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963    ; ID_Continue # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F    ; ID_Continue # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971          ; ID_Continue # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; ID_Continue # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; ID_Continue # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0981          ; ID_Continue # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; ID_Continue # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; ID_Continue # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; ID_Continue # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; ID_Continue # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; ID_Continue # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; ID_Continue # Lo       BENGALI LETTER LA
+09B6..09B9    ; ID_Continue # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC          ; ID_Continue # Mn       BENGALI SIGN NUKTA
+09BD          ; ID_Continue # Lo       BENGALI SIGN AVAGRAHA
+09BE..09C0    ; ID_Continue # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; ID_Continue # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; ID_Continue # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; ID_Continue # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD          ; ID_Continue # Mn       BENGALI SIGN VIRAMA
+09CE          ; ID_Continue # Lo       BENGALI LETTER KHANDA TA
+09D7          ; ID_Continue # Mc       BENGALI AU LENGTH MARK
+09DC..09DD    ; ID_Continue # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; ID_Continue # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3    ; ID_Continue # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF    ; ID_Continue # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1    ; ID_Continue # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A01..0A02    ; ID_Continue # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; ID_Continue # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; ID_Continue # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; ID_Continue # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; ID_Continue # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; ID_Continue # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; ID_Continue # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; ID_Continue # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; ID_Continue # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C          ; ID_Continue # Mn       GURMUKHI SIGN NUKTA
+0A3E..0A40    ; ID_Continue # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; ID_Continue # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; ID_Continue # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; ID_Continue # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51          ; ID_Continue # Mn       GURMUKHI SIGN UDAAT
+0A59..0A5C    ; ID_Continue # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; ID_Continue # Lo       GURMUKHI LETTER FA
+0A66..0A6F    ; ID_Continue # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71    ; ID_Continue # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74    ; ID_Continue # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75          ; ID_Continue # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; ID_Continue # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83          ; ID_Continue # Mc       GUJARATI SIGN VISARGA
+0A85..0A8D    ; ID_Continue # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; ID_Continue # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; ID_Continue # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; ID_Continue # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; ID_Continue # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; ID_Continue # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC          ; ID_Continue # Mn       GUJARATI SIGN NUKTA
+0ABD          ; ID_Continue # Lo       GUJARATI SIGN AVAGRAHA
+0ABE..0AC0    ; ID_Continue # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5    ; ID_Continue # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; ID_Continue # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9          ; ID_Continue # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; ID_Continue # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD          ; ID_Continue # Mn       GUJARATI SIGN VIRAMA
+0AD0          ; ID_Continue # Lo       GUJARATI OM
+0AE0..0AE1    ; ID_Continue # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3    ; ID_Continue # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF    ; ID_Continue # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0B01          ; ID_Continue # Mn       ORIYA SIGN CANDRABINDU
+0B02..0B03    ; ID_Continue # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C    ; ID_Continue # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; ID_Continue # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; ID_Continue # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; ID_Continue # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; ID_Continue # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; ID_Continue # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C          ; ID_Continue # Mn       ORIYA SIGN NUKTA
+0B3D          ; ID_Continue # Lo       ORIYA SIGN AVAGRAHA
+0B3E          ; ID_Continue # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; ID_Continue # Mn       ORIYA VOWEL SIGN I
+0B40          ; ID_Continue # Mc       ORIYA VOWEL SIGN II
+0B41..0B44    ; ID_Continue # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48    ; ID_Continue # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; ID_Continue # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D          ; ID_Continue # Mn       ORIYA SIGN VIRAMA
+0B56          ; ID_Continue # Mn       ORIYA AI LENGTH MARK
+0B57          ; ID_Continue # Mc       ORIYA AU LENGTH MARK
+0B5C..0B5D    ; ID_Continue # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; ID_Continue # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63    ; ID_Continue # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F    ; ID_Continue # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71          ; ID_Continue # Lo       ORIYA LETTER WA
+0B82          ; ID_Continue # Mn       TAMIL SIGN ANUSVARA
+0B83          ; ID_Continue # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; ID_Continue # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; ID_Continue # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; ID_Continue # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; ID_Continue # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; ID_Continue # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; ID_Continue # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; ID_Continue # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; ID_Continue # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; ID_Continue # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF    ; ID_Continue # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0          ; ID_Continue # Mn       TAMIL VOWEL SIGN II
+0BC1..0BC2    ; ID_Continue # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; ID_Continue # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; ID_Continue # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD          ; ID_Continue # Mn       TAMIL SIGN VIRAMA
+0BD0          ; ID_Continue # Lo       TAMIL OM
+0BD7          ; ID_Continue # Mc       TAMIL AU LENGTH MARK
+0BE6..0BEF    ; ID_Continue # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0C01..0C03    ; ID_Continue # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C    ; ID_Continue # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; ID_Continue # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; ID_Continue # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; ID_Continue # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; ID_Continue # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; ID_Continue # Lo       TELUGU SIGN AVAGRAHA
+0C3E..0C40    ; ID_Continue # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44    ; ID_Continue # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; ID_Continue # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; ID_Continue # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; ID_Continue # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C59    ; ID_Continue # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; ID_Continue # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63    ; ID_Continue # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F    ; ID_Continue # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C82..0C83    ; ID_Continue # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; ID_Continue # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; ID_Continue # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; ID_Continue # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; ID_Continue # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; ID_Continue # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC          ; ID_Continue # Mn       KANNADA SIGN NUKTA
+0CBD          ; ID_Continue # Lo       KANNADA SIGN AVAGRAHA
+0CBE          ; ID_Continue # Mc       KANNADA VOWEL SIGN AA
+0CBF          ; ID_Continue # Mn       KANNADA VOWEL SIGN I
+0CC0..0CC4    ; ID_Continue # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6          ; ID_Continue # Mn       KANNADA VOWEL SIGN E
+0CC7..0CC8    ; ID_Continue # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; ID_Continue # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD    ; ID_Continue # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; ID_Continue # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE          ; ID_Continue # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; ID_Continue # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; ID_Continue # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF    ; ID_Continue # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0D02..0D03    ; ID_Continue # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; ID_Continue # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; ID_Continue # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; ID_Continue # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; ID_Continue # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; ID_Continue # Lo       MALAYALAM SIGN AVAGRAHA
+0D3E..0D40    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44    ; ID_Continue # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D          ; ID_Continue # Mn       MALAYALAM SIGN VIRAMA
+0D57          ; ID_Continue # Mc       MALAYALAM AU LENGTH MARK
+0D60..0D61    ; ID_Continue # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D62..0D63    ; ID_Continue # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F    ; ID_Continue # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F    ; ID_Continue # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; ID_Continue # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96    ; ID_Continue # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; ID_Continue # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; ID_Continue # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; ID_Continue # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; ID_Continue # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA          ; ID_Continue # Mn       SINHALA SIGN AL-LAKUNA
+0DCF..0DD1    ; ID_Continue # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4    ; ID_Continue # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; ID_Continue # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF    ; ID_Continue # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3    ; ID_Continue # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30    ; ID_Continue # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31          ; ID_Continue # Mn       THAI CHARACTER MAI HAN-AKAT
+0E32..0E33    ; ID_Continue # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A    ; ID_Continue # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45    ; ID_Continue # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; ID_Continue # Lm       THAI CHARACTER MAIYAMOK
+0E47..0E4E    ; ID_Continue # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E50..0E59    ; ID_Continue # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82    ; ID_Continue # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; ID_Continue # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; ID_Continue # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; ID_Continue # Lo       LAO LETTER SO TAM
+0E8D          ; ID_Continue # Lo       LAO LETTER NYO
+0E94..0E97    ; ID_Continue # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; ID_Continue # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; ID_Continue # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; ID_Continue # Lo       LAO LETTER LO LOOT
+0EA7          ; ID_Continue # Lo       LAO LETTER WO
+0EAA..0EAB    ; ID_Continue # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; ID_Continue # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB1          ; ID_Continue # Mn       LAO VOWEL SIGN MAI KAN
+0EB2..0EB3    ; ID_Continue # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9    ; ID_Continue # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; ID_Continue # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD          ; ID_Continue # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; ID_Continue # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; ID_Continue # Lm       LAO KO LA
+0EC8..0ECD    ; ID_Continue # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9    ; ID_Continue # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD    ; ID_Continue # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; ID_Continue # Lo       TIBETAN SYLLABLE OM
+0F18..0F19    ; ID_Continue # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F20..0F29    ; ID_Continue # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35          ; ID_Continue # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; ID_Continue # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39          ; ID_Continue # Mn       TIBETAN MARK TSA -PHRU
+0F3E..0F3F    ; ID_Continue # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47    ; ID_Continue # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; ID_Continue # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E    ; ID_Continue # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F          ; ID_Continue # Mc       TIBETAN SIGN RNAM BCAD
+0F80..0F84    ; ID_Continue # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87    ; ID_Continue # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8B    ; ID_Continue # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0F90..0F97    ; ID_Continue # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; ID_Continue # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; ID_Continue # Mn       TIBETAN SYMBOL PADMA GDAN
+1000..102A    ; ID_Continue # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030    ; ID_Continue # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031          ; ID_Continue # Mc       MYANMAR VOWEL SIGN E
+1032..1037    ; ID_Continue # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038          ; ID_Continue # Mc       MYANMAR SIGN VISARGA
+1039..103A    ; ID_Continue # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C    ; ID_Continue # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E    ; ID_Continue # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F          ; ID_Continue # Lo       MYANMAR LETTER GREAT SA
+1040..1049    ; ID_Continue # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1055    ; ID_Continue # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059    ; ID_Continue # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D    ; ID_Continue # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060    ; ID_Continue # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061          ; ID_Continue # Lo       MYANMAR LETTER SGAW KAREN SHA
+1062..1064    ; ID_Continue # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066    ; ID_Continue # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D    ; ID_Continue # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070    ; ID_Continue # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074    ; ID_Continue # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081    ; ID_Continue # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082          ; ID_Continue # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086    ; ID_Continue # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C    ; ID_Continue # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D          ; ID_Continue # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E          ; ID_Continue # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+108F          ; ID_Continue # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099    ; ID_Continue # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C    ; ID_Continue # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D          ; ID_Continue # Mn       MYANMAR VOWEL SIGN AITON AI
+10A0..10C5    ; ID_Continue # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; ID_Continue # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; ID_Continue # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; ID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; ID_Continue # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; ID_Continue # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; ID_Continue # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; ID_Continue # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; ID_Continue # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; ID_Continue # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; ID_Continue # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F          ; ID_Continue # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1369..1371    ; ID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+1380..138F    ; ID_Continue # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F4    ; ID_Continue # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C    ; ID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F    ; ID_Continue # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A    ; ID_Continue # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; ID_Continue # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; ID_Continue # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; ID_Continue # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; ID_Continue # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714    ; ID_Continue # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1720..1731    ; ID_Continue # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734    ; ID_Continue # Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1740..1751    ; ID_Continue # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753    ; ID_Continue # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C    ; ID_Continue # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; ID_Continue # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773    ; ID_Continue # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3    ; ID_Continue # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6          ; ID_Continue # Mc       KHMER VOWEL SIGN AA
+17B7..17BD    ; ID_Continue # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5    ; ID_Continue # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6          ; ID_Continue # Mn       KHMER SIGN NIKAHIT
+17C7..17C8    ; ID_Continue # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3    ; ID_Continue # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7          ; ID_Continue # Lm       KHMER SIGN LEK TOO
+17DC          ; ID_Continue # Lo       KHMER SIGN AVAKRAHASANYA
+17DD          ; ID_Continue # Mn       KHMER SIGN ATTHACAN
+17E0..17E9    ; ID_Continue # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+180B..180D    ; ID_Continue # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1810..1819    ; ID_Continue # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842    ; ID_Continue # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; ID_Continue # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; ID_Continue # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; ID_Continue # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9          ; ID_Continue # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+18AA          ; ID_Continue # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; ID_Continue # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; ID_Continue # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1920..1922    ; ID_Continue # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926    ; ID_Continue # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928    ; ID_Continue # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B    ; ID_Continue # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; ID_Continue # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932          ; ID_Continue # Mn       LIMBU SMALL LETTER ANUSVARA
+1933..1938    ; ID_Continue # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B    ; ID_Continue # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1946..194F    ; ID_Continue # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D    ; ID_Continue # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; ID_Continue # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; ID_Continue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C0    ; ID_Continue # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7    ; ID_Continue # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9    ; ID_Continue # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19DA    ; ID_Continue # Nd  [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
+1A00..1A16    ; ID_Continue # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18    ; ID_Continue # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B    ; ID_Continue # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A20..1A54    ; ID_Continue # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55          ; ID_Continue # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A56          ; ID_Continue # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A57          ; ID_Continue # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E    ; ID_Continue # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60          ; ID_Continue # Mn       TAI THAM SIGN SAKOT
+1A61          ; ID_Continue # Mc       TAI THAM VOWEL SIGN A
+1A62          ; ID_Continue # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64    ; ID_Continue # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C    ; ID_Continue # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72    ; ID_Continue # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C    ; ID_Continue # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; ID_Continue # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89    ; ID_Continue # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99    ; ID_Continue # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA7          ; ID_Continue # Lm       TAI THAM SIGN MAI YAMOK
+1B00..1B03    ; ID_Continue # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04          ; ID_Continue # Mc       BALINESE SIGN BISAH
+1B05..1B33    ; ID_Continue # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34          ; ID_Continue # Mn       BALINESE SIGN REREKAN
+1B35          ; ID_Continue # Mc       BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A    ; ID_Continue # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B          ; ID_Continue # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C          ; ID_Continue # Mn       BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41    ; ID_Continue # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42          ; ID_Continue # Mn       BALINESE VOWEL SIGN PEPET
+1B43..1B44    ; ID_Continue # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B    ; ID_Continue # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59    ; ID_Continue # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B6B..1B73    ; ID_Continue # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81    ; ID_Continue # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82          ; ID_Continue # Mc       SUNDANESE SIGN PANGWISAD
+1B83..1BA0    ; ID_Continue # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1          ; ID_Continue # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5    ; ID_Continue # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7    ; ID_Continue # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9    ; ID_Continue # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA          ; ID_Continue # Mc       SUNDANESE SIGN PAMAAEH
+1BAE..1BAF    ; ID_Continue # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9    ; ID_Continue # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1C00..1C23    ; ID_Continue # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B    ; ID_Continue # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33    ; ID_Continue # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35    ; ID_Continue # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37    ; ID_Continue # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C40..1C49    ; ID_Continue # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F    ; ID_Continue # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59    ; ID_Continue # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77    ; ID_Continue # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; ID_Continue # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2    ; ID_Continue # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0    ; ID_Continue # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1          ; ID_Continue # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8    ; ID_Continue # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC    ; ID_Continue # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED          ; ID_Continue # Mn       VEDIC SIGN TIRYAK
+1CEE..1CF1    ; ID_Continue # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2          ; ID_Continue # Mc       VEDIC SIGN ARDHAVISARGA
+1D00..1D2B    ; ID_Continue # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; ID_Continue # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; ID_Continue # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; ID_Continue # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; ID_Continue # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; ID_Continue # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DE6    ; ID_Continue # Mn  [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
+1DFD..1DFF    ; ID_Continue # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1F15    ; ID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; ID_Continue # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; ID_Continue # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; ID_Continue # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; ID_Continue # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; ID_Continue # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; ID_Continue # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; ID_Continue # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; ID_Continue # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; ID_Continue # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; ID_Continue # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; ID_Continue # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; ID_Continue # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; ID_Continue # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; ID_Continue # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; ID_Continue # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+203F..2040    ; ID_Continue # Pc   [2] UNDERTIE..CHARACTER TIE
+2054          ; ID_Continue # Pc       INVERTED UNDERTIE
+2071          ; ID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; ID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; ID_Continue # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+20D0..20DC    ; ID_Continue # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; ID_Continue # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20F0    ; ID_Continue # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2102          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; ID_Continue # L&       EULER CONSTANT
+210A..2113    ; ID_Continue # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL N
+2118          ; ID_Continue # So       SCRIPT CAPITAL P
+2119..211D    ; ID_Continue # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; ID_Continue # L&       OHM SIGN
+2128          ; ID_Continue # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; ID_Continue # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E          ; ID_Continue # So       ESTIMATED SYMBOL
+212F..2134    ; ID_Continue # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; ID_Continue # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; ID_Continue # L&       INFORMATION SOURCE
+213C..213F    ; ID_Continue # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; ID_Continue # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; ID_Continue # L&       TURNED SMALL F
+2160..2182    ; ID_Continue # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; ID_Continue # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; ID_Continue # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C2E    ; ID_Continue # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; ID_Continue # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; ID_Continue # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; ID_Continue # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; ID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; ID_Continue # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1    ; ID_Continue # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D00..2D25    ; ID_Continue # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; ID_Continue # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; ID_Continue # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; ID_Continue # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF    ; ID_Continue # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+3005          ; ID_Continue # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; ID_Continue # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; ID_Continue # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; ID_Continue # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302F    ; ID_Continue # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3031..3035    ; ID_Continue # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A    ; ID_Continue # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; ID_Continue # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; ID_Continue # Lo       MASU MARK
+3041..3096    ; ID_Continue # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+3099..309A    ; ID_Continue # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C    ; ID_Continue # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; ID_Continue # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; ID_Continue # Lo       HIRAGANA DIGRAPH YORI
+30A1..30FA    ; ID_Continue # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; ID_Continue # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; ID_Continue # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; ID_Continue # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; ID_Continue # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31B7    ; ID_Continue # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF    ; ID_Continue # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DB5    ; ID_Continue # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; ID_Continue # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; ID_Continue # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; ID_Continue # Lm       YI SYLLABLE WU
+A016..A48C    ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7    ; ID_Continue # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; ID_Continue # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B    ; ID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; ID_Continue # Lm       VAI SYLLABLE LENGTHENER
+A610..A61F    ; ID_Continue # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629    ; ID_Continue # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B    ; ID_Continue # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; ID_Continue # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; ID_Continue # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; ID_Continue # Lo       CYRILLIC LETTER MULTIOCULAR O
+A66F          ; ID_Continue # Mn       COMBINING CYRILLIC VZMET
+A67C..A67D    ; ID_Continue # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67F          ; ID_Continue # Lm       CYRILLIC PAYEROK
+A680..A697    ; ID_Continue # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; ID_Continue # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; ID_Continue # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1    ; ID_Continue # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A717..A71F    ; ID_Continue # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F    ; ID_Continue # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; ID_Continue # Lm       MODIFIER LETTER US
+A771..A787    ; ID_Continue # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; ID_Continue # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78C    ; ID_Continue # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; ID_Continue # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A802          ; ID_Continue # Mn       SYLOTI NAGRI SIGN DVISVARA
+A803..A805    ; ID_Continue # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806          ; ID_Continue # Mn       SYLOTI NAGRI SIGN HASANTA
+A807..A80A    ; ID_Continue # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B          ; ID_Continue # Mn       SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822    ; ID_Continue # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824    ; ID_Continue # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826    ; ID_Continue # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827          ; ID_Continue # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A840..A873    ; ID_Continue # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881    ; ID_Continue # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3    ; ID_Continue # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3    ; ID_Continue # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4          ; ID_Continue # Mn       SAURASHTRA SIGN VIRAMA
+A8D0..A8D9    ; ID_Continue # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1    ; ID_Continue # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7    ; ID_Continue # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; ID_Continue # Lo       DEVANAGARI HEADSTROKE
+A900..A909    ; ID_Continue # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925    ; ID_Continue # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D    ; ID_Continue # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A930..A946    ; ID_Continue # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951    ; ID_Continue # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953    ; ID_Continue # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A960..A97C    ; ID_Continue # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982    ; ID_Continue # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983          ; ID_Continue # Mc       JAVANESE SIGN WIGNYAN
+A984..A9B2    ; ID_Continue # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3          ; ID_Continue # Mn       JAVANESE SIGN CECAK TELU
+A9B4..A9B5    ; ID_Continue # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9    ; ID_Continue # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB    ; ID_Continue # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC          ; ID_Continue # Mn       JAVANESE VOWEL SIGN PEPET
+A9BD..A9C0    ; ID_Continue # Mc   [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
+A9CF          ; ID_Continue # Lm       JAVANESE PANGRANGKEP
+A9D0..A9D9    ; ID_Continue # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+AA00..AA28    ; ID_Continue # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E    ; ID_Continue # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30    ; ID_Continue # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32    ; ID_Continue # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34    ; ID_Continue # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36    ; ID_Continue # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42    ; ID_Continue # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43          ; ID_Continue # Mn       CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B    ; ID_Continue # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C          ; ID_Continue # Mn       CHAM CONSONANT SIGN FINAL M
+AA4D          ; ID_Continue # Mc       CHAM CONSONANT SIGN FINAL H
+AA50..AA59    ; ID_Continue # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA60..AA6F    ; ID_Continue # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; ID_Continue # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; ID_Continue # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A          ; ID_Continue # Lo       MYANMAR LETTER AITON RA
+AA7B          ; ID_Continue # Mc       MYANMAR SIGN PAO KAREN TONE
+AA80..AAAF    ; ID_Continue # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0          ; ID_Continue # Mn       TAI VIET MAI KANG
+AAB1          ; ID_Continue # Lo       TAI VIET VOWEL AA
+AAB2..AAB4    ; ID_Continue # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6    ; ID_Continue # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8    ; ID_Continue # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD    ; ID_Continue # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF    ; ID_Continue # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0          ; ID_Continue # Lo       TAI VIET TONE MAI NUENG
+AAC1          ; ID_Continue # Mn       TAI VIET TONE MAI THO
+AAC2          ; ID_Continue # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; ID_Continue # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; ID_Continue # Lm       TAI VIET SYMBOL SAM
+ABC0..ABE2    ; ID_Continue # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5          ; ID_Continue # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8          ; ID_Continue # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC          ; ID_Continue # Mc       MEETEI MAYEK LUM IYEK
+ABED          ; ID_Continue # Mn       MEETEI MAYEK APUN IYEK
+ABF0..ABF9    ; ID_Continue # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3    ; ID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; ID_Continue # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; ID_Continue # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; ID_Continue # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; ID_Continue # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; ID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; ID_Continue # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; ID_Continue # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; ID_Continue # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1E          ; ID_Continue # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28    ; ID_Continue # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36    ; ID_Continue # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; ID_Continue # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; ID_Continue # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; ID_Continue # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; ID_Continue # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; ID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; ID_Continue # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; ID_Continue # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; ID_Continue # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; ID_Continue # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE00..FE0F    ; ID_Continue # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE26    ; ID_Continue # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+FE33..FE34    ; ID_Continue # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE4D..FE4F    ; ID_Continue # Pc   [3] DASHED LOW LINE..WAVY LOW LINE
+FE70..FE74    ; ID_Continue # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; ID_Continue # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF10..FF19    ; ID_Continue # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF3A    ; ID_Continue # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3F          ; ID_Continue # Pc       FULLWIDTH LOW LINE
+FF41..FF5A    ; ID_Continue # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F    ; ID_Continue # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; ID_Continue # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; ID_Continue # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F    ; ID_Continue # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE    ; ID_Continue # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; ID_Continue # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B  ; ID_Continue # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; ID_Continue # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; ID_Continue # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; ID_Continue # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; ID_Continue # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; ID_Continue # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; ID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174  ; ID_Continue # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+101FD         ; ID_Continue # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C  ; ID_Continue # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; ID_Continue # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; ID_Continue # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10330..10340  ; ID_Continue # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; ID_Continue # Nl       GOTHIC LETTER NINETY
+10342..10349  ; ID_Continue # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; ID_Continue # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; ID_Continue # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; ID_Continue # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; ID_Continue # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; ID_Continue # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; ID_Continue # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; ID_Continue # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9  ; ID_Continue # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+10800..10805  ; ID_Continue # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; ID_Continue # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; ID_Continue # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; ID_Continue # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; ID_Continue # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; ID_Continue # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10900..10915  ; ID_Continue # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; ID_Continue # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+10A00         ; ID_Continue # Lo       KHAROSHTHI LETTER A
+10A01..10A03  ; ID_Continue # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; ID_Continue # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; ID_Continue # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13  ; ID_Continue # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; ID_Continue # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; ID_Continue # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A38..10A3A  ; ID_Continue # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; ID_Continue # Mn       KHAROSHTHI VIRAMA
+10A60..10A7C  ; ID_Continue # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10B00..10B35  ; ID_Continue # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; ID_Continue # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; ID_Continue # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10C00..10C48  ; ID_Continue # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+11080..11081  ; ID_Continue # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082         ; ID_Continue # Mc       KAITHI SIGN VISARGA
+11083..110AF  ; ID_Continue # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2  ; ID_Continue # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6  ; ID_Continue # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8  ; ID_Continue # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA  ; ID_Continue # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+12000..1236E  ; ID_Continue # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; ID_Continue # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+13000..1342E  ; ID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D165..1D166  ; ID_Continue # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169  ; ID_Continue # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172  ; ID_Continue # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182  ; ID_Continue # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; ID_Continue # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; ID_Continue # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244  ; ID_Continue # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D400..1D454  ; ID_Continue # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; ID_Continue # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; ID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; ID_Continue # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; ID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; ID_Continue # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; ID_Continue # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; ID_Continue # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; ID_Continue # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; ID_Continue # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; ID_Continue # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; ID_Continue # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; ID_Continue # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; ID_Continue # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; ID_Continue # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; ID_Continue # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; ID_Continue # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; ID_Continue # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; ID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; ID_Continue # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; ID_Continue # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; ID_Continue # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; ID_Continue # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; ID_Continue # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; ID_Continue # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; ID_Continue # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; ID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; ID_Continue # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; ID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; ID_Continue # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; ID_Continue # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+20000..2A6D6  ; ID_Continue # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; ID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0100..E01EF  ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 101634
+
+# ================================================
+
+# Derived Property: XID_Start
+#  ID_Start modified for closure under NFKx
+#  Modified as described in UAX #15
+#  NOTE: Does NOT remove the non-NFKx characters.
+#        Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))
+#  NOTE: See UAX #31 for more information
+
+0041..005A    ; XID_Start # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; XID_Start # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; XID_Start # L&       FEMININE ORDINAL INDICATOR
+00B5          ; XID_Start # L&       MICRO SIGN
+00BA          ; XID_Start # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; XID_Start # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; XID_Start # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; XID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; XID_Start # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; XID_Start # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; XID_Start # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; XID_Start # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; XID_Start # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; XID_Start # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; XID_Start # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; XID_Start # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; XID_Start # Lm       MODIFIER LETTER VOICING
+02EE          ; XID_Start # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0370..0373    ; XID_Start # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; XID_Start # Lm       GREEK NUMERAL SIGN
+0376..0377    ; XID_Start # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D    ; XID_Start # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; XID_Start # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; XID_Start # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; XID_Start # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; XID_Start # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; XID_Start # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; XID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..0525    ; XID_Start # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; XID_Start # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; XID_Start # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; XID_Start # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+05D0..05EA    ; XID_Start # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; XID_Start # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0621..063F    ; XID_Start # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; XID_Start # Lm       ARABIC TATWEEL
+0641..064A    ; XID_Start # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+066E..066F    ; XID_Start # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3    ; XID_Start # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; XID_Start # Lo       ARABIC LETTER AE
+06E5..06E6    ; XID_Start # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF    ; XID_Start # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC    ; XID_Start # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; XID_Start # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; XID_Start # Lo       SYRIAC LETTER ALAPH
+0712..072F    ; XID_Start # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5    ; XID_Start # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1          ; XID_Start # Lo       THAANA LETTER NAA
+07CA..07EA    ; XID_Start # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5    ; XID_Start # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; XID_Start # Lm       NKO LAJANYALAN
+0800..0815    ; XID_Start # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0828          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER I
+0904..0939    ; XID_Start # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D          ; XID_Start # Lo       DEVANAGARI SIGN AVAGRAHA
+0950          ; XID_Start # Lo       DEVANAGARI OM
+0958..0961    ; XID_Start # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0971          ; XID_Start # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; XID_Start # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; XID_Start # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0985..098C    ; XID_Start # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; XID_Start # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; XID_Start # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; XID_Start # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; XID_Start # Lo       BENGALI LETTER LA
+09B6..09B9    ; XID_Start # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD          ; XID_Start # Lo       BENGALI SIGN AVAGRAHA
+09CE          ; XID_Start # Lo       BENGALI LETTER KHANDA TA
+09DC..09DD    ; XID_Start # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; XID_Start # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09F0..09F1    ; XID_Start # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A05..0A0A    ; XID_Start # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; XID_Start # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; XID_Start # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; XID_Start # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; XID_Start # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; XID_Start # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; XID_Start # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A59..0A5C    ; XID_Start # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; XID_Start # Lo       GURMUKHI LETTER FA
+0A72..0A74    ; XID_Start # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A85..0A8D    ; XID_Start # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; XID_Start # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; XID_Start # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; XID_Start # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; XID_Start # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; XID_Start # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD          ; XID_Start # Lo       GUJARATI SIGN AVAGRAHA
+0AD0          ; XID_Start # Lo       GUJARATI OM
+0AE0..0AE1    ; XID_Start # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0B05..0B0C    ; XID_Start # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; XID_Start # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; XID_Start # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; XID_Start # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; XID_Start # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; XID_Start # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D          ; XID_Start # Lo       ORIYA SIGN AVAGRAHA
+0B5C..0B5D    ; XID_Start # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; XID_Start # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B71          ; XID_Start # Lo       ORIYA LETTER WA
+0B83          ; XID_Start # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; XID_Start # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; XID_Start # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; XID_Start # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; XID_Start # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; XID_Start # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; XID_Start # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; XID_Start # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; XID_Start # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; XID_Start # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BD0          ; XID_Start # Lo       TAMIL OM
+0C05..0C0C    ; XID_Start # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; XID_Start # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; XID_Start # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; XID_Start # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; XID_Start # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; XID_Start # Lo       TELUGU SIGN AVAGRAHA
+0C58..0C59    ; XID_Start # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; XID_Start # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C85..0C8C    ; XID_Start # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; XID_Start # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; XID_Start # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; XID_Start # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; XID_Start # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD          ; XID_Start # Lo       KANNADA SIGN AVAGRAHA
+0CDE          ; XID_Start # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; XID_Start # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0D05..0D0C    ; XID_Start # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; XID_Start # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; XID_Start # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; XID_Start # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; XID_Start # Lo       MALAYALAM SIGN AVAGRAHA
+0D60..0D61    ; XID_Start # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D7A..0D7F    ; XID_Start # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D85..0D96    ; XID_Start # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; XID_Start # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; XID_Start # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; XID_Start # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; XID_Start # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0E01..0E30    ; XID_Start # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32          ; XID_Start # Lo       THAI CHARACTER SARA AA
+0E40..0E45    ; XID_Start # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; XID_Start # Lm       THAI CHARACTER MAIYAMOK
+0E81..0E82    ; XID_Start # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; XID_Start # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; XID_Start # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; XID_Start # Lo       LAO LETTER SO TAM
+0E8D          ; XID_Start # Lo       LAO LETTER NYO
+0E94..0E97    ; XID_Start # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; XID_Start # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; XID_Start # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; XID_Start # Lo       LAO LETTER LO LOOT
+0EA7          ; XID_Start # Lo       LAO LETTER WO
+0EAA..0EAB    ; XID_Start # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; XID_Start # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB2          ; XID_Start # Lo       LAO VOWEL SIGN AA
+0EBD          ; XID_Start # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; XID_Start # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; XID_Start # Lm       LAO KO LA
+0EDC..0EDD    ; XID_Start # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; XID_Start # Lo       TIBETAN SYLLABLE OM
+0F40..0F47    ; XID_Start # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; XID_Start # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F88..0F8B    ; XID_Start # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+1000..102A    ; XID_Start # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+103F          ; XID_Start # Lo       MYANMAR LETTER GREAT SA
+1050..1055    ; XID_Start # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+105A..105D    ; XID_Start # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061          ; XID_Start # Lo       MYANMAR LETTER SGAW KAREN SHA
+1065..1066    ; XID_Start # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+106E..1070    ; XID_Start # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081    ; XID_Start # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+108E          ; XID_Start # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+10A0..10C5    ; XID_Start # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; XID_Start # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; XID_Start # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; XID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; XID_Start # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; XID_Start # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; XID_Start # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; XID_Start # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; XID_Start # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; XID_Start # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; XID_Start # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1380..138F    ; XID_Start # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F4    ; XID_Start # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C    ; XID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F    ; XID_Start # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A    ; XID_Start # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; XID_Start # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; XID_Start # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; XID_Start # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; XID_Start # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1720..1731    ; XID_Start # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1740..1751    ; XID_Start # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C    ; XID_Start # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; XID_Start # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3    ; XID_Start # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17D7          ; XID_Start # Lm       KHMER SIGN LEK TOO
+17DC          ; XID_Start # Lo       KHMER SIGN AVAKRAHASANYA
+1820..1842    ; XID_Start # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; XID_Start # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; XID_Start # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; XID_Start # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA          ; XID_Start # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; XID_Start # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; XID_Start # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1950..196D    ; XID_Start # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; XID_Start # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; XID_Start # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19C1..19C7    ; XID_Start # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+1A00..1A16    ; XID_Start # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A20..1A54    ; XID_Start # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1AA7          ; XID_Start # Lm       TAI THAM SIGN MAI YAMOK
+1B05..1B33    ; XID_Start # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B45..1B4B    ; XID_Start # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B83..1BA0    ; XID_Start # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BAE..1BAF    ; XID_Start # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1C00..1C23    ; XID_Start # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C4D..1C4F    ; XID_Start # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77    ; XID_Start # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; XID_Start # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CE9..1CEC    ; XID_Start # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1    ; XID_Start # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1D00..1D2B    ; XID_Start # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; XID_Start # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; XID_Start # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; XID_Start # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; XID_Start # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; XID_Start # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15    ; XID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; XID_Start # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; XID_Start # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; XID_Start # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; XID_Start # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; XID_Start # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; XID_Start # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; XID_Start # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; XID_Start # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; XID_Start # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; XID_Start # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; XID_Start # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; XID_Start # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; XID_Start # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; XID_Start # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; XID_Start # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071          ; XID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; XID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; XID_Start # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2102          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; XID_Start # L&       EULER CONSTANT
+210A..2113    ; XID_Start # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL N
+2118          ; XID_Start # So       SCRIPT CAPITAL P
+2119..211D    ; XID_Start # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; XID_Start # L&       OHM SIGN
+2128          ; XID_Start # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; XID_Start # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E          ; XID_Start # So       ESTIMATED SYMBOL
+212F..2134    ; XID_Start # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; XID_Start # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; XID_Start # L&       INFORMATION SOURCE
+213C..213F    ; XID_Start # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; XID_Start # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; XID_Start # L&       TURNED SMALL F
+2160..2182    ; XID_Start # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; XID_Start # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; XID_Start # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C2E    ; XID_Start # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; XID_Start # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; XID_Start # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; XID_Start # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; XID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; XID_Start # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2D00..2D25    ; XID_Start # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; XID_Start # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; XID_Start # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; XID_Start # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005          ; XID_Start # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; XID_Start # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; XID_Start # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; XID_Start # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035    ; XID_Start # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A    ; XID_Start # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; XID_Start # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; XID_Start # Lo       MASU MARK
+3041..3096    ; XID_Start # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E    ; XID_Start # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; XID_Start # Lo       HIRAGANA DIGRAPH YORI
+30A1..30FA    ; XID_Start # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; XID_Start # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; XID_Start # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; XID_Start # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; XID_Start # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31B7    ; XID_Start # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF    ; XID_Start # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DB5    ; XID_Start # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; XID_Start # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; XID_Start # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; XID_Start # Lm       YI SYLLABLE WU
+A016..A48C    ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7    ; XID_Start # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; XID_Start # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B    ; XID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; XID_Start # Lm       VAI SYLLABLE LENGTHENER
+A610..A61F    ; XID_Start # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B    ; XID_Start # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; XID_Start # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; XID_Start # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; XID_Start # Lo       CYRILLIC LETTER MULTIOCULAR O
+A67F          ; XID_Start # Lm       CYRILLIC PAYEROK
+A680..A697    ; XID_Start # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; XID_Start # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; XID_Start # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F    ; XID_Start # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F    ; XID_Start # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; XID_Start # Lm       MODIFIER LETTER US
+A771..A787    ; XID_Start # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; XID_Start # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78C    ; XID_Start # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; XID_Start # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805    ; XID_Start # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A    ; XID_Start # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822    ; XID_Start # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A840..A873    ; XID_Start # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A882..A8B3    ; XID_Start # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8F2..A8F7    ; XID_Start # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; XID_Start # Lo       DEVANAGARI HEADSTROKE
+A90A..A925    ; XID_Start # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A930..A946    ; XID_Start # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A960..A97C    ; XID_Start # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A984..A9B2    ; XID_Start # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9CF          ; XID_Start # Lm       JAVANESE PANGRANGKEP
+AA00..AA28    ; XID_Start # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA40..AA42    ; XID_Start # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B    ; XID_Start # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA60..AA6F    ; XID_Start # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; XID_Start # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; XID_Start # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A          ; XID_Start # Lo       MYANMAR LETTER AITON RA
+AA80..AAAF    ; XID_Start # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB1          ; XID_Start # Lo       TAI VIET VOWEL AA
+AAB5..AAB6    ; XID_Start # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD    ; XID_Start # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0          ; XID_Start # Lo       TAI VIET TONE MAI NUENG
+AAC2          ; XID_Start # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; XID_Start # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; XID_Start # Lm       TAI VIET SYMBOL SAM
+ABC0..ABE2    ; XID_Start # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+AC00..D7A3    ; XID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; XID_Start # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; XID_Start # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; XID_Start # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; XID_Start # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; XID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; XID_Start # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; XID_Start # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; XID_Start # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28    ; XID_Start # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36    ; XID_Start # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; XID_Start # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; XID_Start # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; XID_Start # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; XID_Start # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; XID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FC5D    ; XID_Start # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64..FD3D    ; XID_Start # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; XID_Start # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; XID_Start # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDF9    ; XID_Start # Lo  [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM
+FE71          ; XID_Start # Lo       ARABIC TATWEEL WITH FATHATAN ABOVE
+FE73          ; XID_Start # Lo       ARABIC TAIL FRAGMENT
+FE77          ; XID_Start # Lo       ARABIC FATHA MEDIAL FORM
+FE79          ; XID_Start # Lo       ARABIC DAMMA MEDIAL FORM
+FE7B          ; XID_Start # Lo       ARABIC KASRA MEDIAL FORM
+FE7D          ; XID_Start # Lo       ARABIC SHADDA MEDIAL FORM
+FE7F..FEFC    ; XID_Start # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A    ; XID_Start # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; XID_Start # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F    ; XID_Start # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; XID_Start # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; XID_Start # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FFA0..FFBE    ; XID_Start # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; XID_Start # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B  ; XID_Start # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; XID_Start # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; XID_Start # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; XID_Start # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; XID_Start # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; XID_Start # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; XID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174  ; XID_Start # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C  ; XID_Start # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; XID_Start # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; XID_Start # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10330..10340  ; XID_Start # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; XID_Start # Nl       GOTHIC LETTER NINETY
+10342..10349  ; XID_Start # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; XID_Start # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; XID_Start # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; XID_Start # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; XID_Start # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; XID_Start # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; XID_Start # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; XID_Start # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+10800..10805  ; XID_Start # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; XID_Start # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; XID_Start # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; XID_Start # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; XID_Start # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; XID_Start # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10900..10915  ; XID_Start # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; XID_Start # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+10A00         ; XID_Start # Lo       KHAROSHTHI LETTER A
+10A10..10A13  ; XID_Start # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; XID_Start # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; XID_Start # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A60..10A7C  ; XID_Start # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10B00..10B35  ; XID_Start # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; XID_Start # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; XID_Start # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10C00..10C48  ; XID_Start # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+11083..110AF  ; XID_Start # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+12000..1236E  ; XID_Start # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; XID_Start # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+13000..1342E  ; XID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D400..1D454  ; XID_Start # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; XID_Start # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; XID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; XID_Start # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; XID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; XID_Start # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; XID_Start # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; XID_Start # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; XID_Start # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; XID_Start # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; XID_Start # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; XID_Start # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; XID_Start # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; XID_Start # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; XID_Start # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; XID_Start # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; XID_Start # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; XID_Start # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; XID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; XID_Start # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; XID_Start # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; XID_Start # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; XID_Start # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; XID_Start # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; XID_Start # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; XID_Start # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; XID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; XID_Start # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; XID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; XID_Start # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+20000..2A6D6  ; XID_Start # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; XID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 99741
+
+# ================================================
+
+# Derived Property: XID_Continue
+#  Mod_ID_Continue modified for closure under NFKx
+#  Modified as described in UAX #15
+#  NOTE: Cf characters should be filtered out.
+#  NOTE: Does NOT remove the non-NFKx characters.
+#        Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))
+#  NOTE: See UAX #31 for more information
+
+0030..0039    ; XID_Continue # Nd  [10] DIGIT ZERO..DIGIT NINE
+0041..005A    ; XID_Continue # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F          ; XID_Continue # Pc       LOW LINE
+0061..007A    ; XID_Continue # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; XID_Continue # L&       FEMININE ORDINAL INDICATOR
+00B5          ; XID_Continue # L&       MICRO SIGN
+00B7          ; XID_Continue # Po       MIDDLE DOT
+00BA          ; XID_Continue # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; XID_Continue # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; XID_Continue # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; XID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; XID_Continue # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; XID_Continue # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; XID_Continue # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; XID_Continue # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; XID_Continue # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; XID_Continue # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; XID_Continue # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; XID_Continue # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; XID_Continue # Lm       MODIFIER LETTER VOICING
+02EE          ; XID_Continue # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0300..036F    ; XID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0370..0373    ; XID_Continue # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; XID_Continue # Lm       GREEK NUMERAL SIGN
+0376..0377    ; XID_Continue # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D    ; XID_Continue # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; XID_Continue # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387          ; XID_Continue # Po       GREEK ANO TELEIA
+0388..038A    ; XID_Continue # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; XID_Continue # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; XID_Continue # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; XID_Continue # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; XID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0483..0487    ; XID_Continue # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+048A..0525    ; XID_Continue # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; XID_Continue # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; XID_Continue # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; XID_Continue # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0591..05BD    ; XID_Continue # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF          ; XID_Continue # Mn       HEBREW POINT RAFE
+05C1..05C2    ; XID_Continue # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; XID_Continue # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; XID_Continue # Mn       HEBREW POINT QAMATS QATAN
+05D0..05EA    ; XID_Continue # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; XID_Continue # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A    ; XID_Continue # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0621..063F    ; XID_Continue # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; XID_Continue # Lm       ARABIC TATWEEL
+0641..064A    ; XID_Continue # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065E    ; XID_Continue # Mn  [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS
+0660..0669    ; XID_Continue # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066E..066F    ; XID_Continue # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670          ; XID_Continue # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3    ; XID_Continue # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; XID_Continue # Lo       ARABIC LETTER AE
+06D6..06DC    ; XID_Continue # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4    ; XID_Continue # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; XID_Continue # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; XID_Continue # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED    ; XID_Continue # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF    ; XID_Continue # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; XID_Continue # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC    ; XID_Continue # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; XID_Continue # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; XID_Continue # Lo       SYRIAC LETTER ALAPH
+0711          ; XID_Continue # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F    ; XID_Continue # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A    ; XID_Continue # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..07A5    ; XID_Continue # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0    ; XID_Continue # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07B1          ; XID_Continue # Lo       THAANA LETTER NAA
+07C0..07C9    ; XID_Continue # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA    ; XID_Continue # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3    ; XID_Continue # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5    ; XID_Continue # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; XID_Continue # Lm       NKO LAJANYALAN
+0800..0815    ; XID_Continue # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819    ; XID_Continue # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; XID_Continue # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; XID_Continue # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER I
+0829..082D    ; XID_Continue # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0900..0902    ; XID_Continue # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; XID_Continue # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; XID_Continue # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093C          ; XID_Continue # Mn       DEVANAGARI SIGN NUKTA
+093D          ; XID_Continue # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; XID_Continue # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; XID_Continue # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; XID_Continue # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D          ; XID_Continue # Mn       DEVANAGARI SIGN VIRAMA
+094E          ; XID_Continue # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950          ; XID_Continue # Lo       DEVANAGARI OM
+0951..0955    ; XID_Continue # Mn   [5] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN CANDRA LONG E
+0958..0961    ; XID_Continue # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963    ; XID_Continue # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F    ; XID_Continue # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971          ; XID_Continue # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; XID_Continue # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; XID_Continue # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0981          ; XID_Continue # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; XID_Continue # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; XID_Continue # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; XID_Continue # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; XID_Continue # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; XID_Continue # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; XID_Continue # Lo       BENGALI LETTER LA
+09B6..09B9    ; XID_Continue # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC          ; XID_Continue # Mn       BENGALI SIGN NUKTA
+09BD          ; XID_Continue # Lo       BENGALI SIGN AVAGRAHA
+09BE..09C0    ; XID_Continue # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; XID_Continue # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; XID_Continue # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; XID_Continue # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD          ; XID_Continue # Mn       BENGALI SIGN VIRAMA
+09CE          ; XID_Continue # Lo       BENGALI LETTER KHANDA TA
+09D7          ; XID_Continue # Mc       BENGALI AU LENGTH MARK
+09DC..09DD    ; XID_Continue # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; XID_Continue # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3    ; XID_Continue # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF    ; XID_Continue # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1    ; XID_Continue # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A01..0A02    ; XID_Continue # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; XID_Continue # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; XID_Continue # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; XID_Continue # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; XID_Continue # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; XID_Continue # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; XID_Continue # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; XID_Continue # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; XID_Continue # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C          ; XID_Continue # Mn       GURMUKHI SIGN NUKTA
+0A3E..0A40    ; XID_Continue # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; XID_Continue # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; XID_Continue # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; XID_Continue # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51          ; XID_Continue # Mn       GURMUKHI SIGN UDAAT
+0A59..0A5C    ; XID_Continue # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; XID_Continue # Lo       GURMUKHI LETTER FA
+0A66..0A6F    ; XID_Continue # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71    ; XID_Continue # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74    ; XID_Continue # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75          ; XID_Continue # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; XID_Continue # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83          ; XID_Continue # Mc       GUJARATI SIGN VISARGA
+0A85..0A8D    ; XID_Continue # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; XID_Continue # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; XID_Continue # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; XID_Continue # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; XID_Continue # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; XID_Continue # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC          ; XID_Continue # Mn       GUJARATI SIGN NUKTA
+0ABD          ; XID_Continue # Lo       GUJARATI SIGN AVAGRAHA
+0ABE..0AC0    ; XID_Continue # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5    ; XID_Continue # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; XID_Continue # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9          ; XID_Continue # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; XID_Continue # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD          ; XID_Continue # Mn       GUJARATI SIGN VIRAMA
+0AD0          ; XID_Continue # Lo       GUJARATI OM
+0AE0..0AE1    ; XID_Continue # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3    ; XID_Continue # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF    ; XID_Continue # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0B01          ; XID_Continue # Mn       ORIYA SIGN CANDRABINDU
+0B02..0B03    ; XID_Continue # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C    ; XID_Continue # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; XID_Continue # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; XID_Continue # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; XID_Continue # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; XID_Continue # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; XID_Continue # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C          ; XID_Continue # Mn       ORIYA SIGN NUKTA
+0B3D          ; XID_Continue # Lo       ORIYA SIGN AVAGRAHA
+0B3E          ; XID_Continue # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; XID_Continue # Mn       ORIYA VOWEL SIGN I
+0B40          ; XID_Continue # Mc       ORIYA VOWEL SIGN II
+0B41..0B44    ; XID_Continue # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48    ; XID_Continue # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; XID_Continue # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D          ; XID_Continue # Mn       ORIYA SIGN VIRAMA
+0B56          ; XID_Continue # Mn       ORIYA AI LENGTH MARK
+0B57          ; XID_Continue # Mc       ORIYA AU LENGTH MARK
+0B5C..0B5D    ; XID_Continue # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; XID_Continue # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63    ; XID_Continue # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F    ; XID_Continue # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71          ; XID_Continue # Lo       ORIYA LETTER WA
+0B82          ; XID_Continue # Mn       TAMIL SIGN ANUSVARA
+0B83          ; XID_Continue # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; XID_Continue # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; XID_Continue # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; XID_Continue # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; XID_Continue # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; XID_Continue # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; XID_Continue # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; XID_Continue # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; XID_Continue # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; XID_Continue # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF    ; XID_Continue # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0          ; XID_Continue # Mn       TAMIL VOWEL SIGN II
+0BC1..0BC2    ; XID_Continue # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; XID_Continue # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; XID_Continue # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD          ; XID_Continue # Mn       TAMIL SIGN VIRAMA
+0BD0          ; XID_Continue # Lo       TAMIL OM
+0BD7          ; XID_Continue # Mc       TAMIL AU LENGTH MARK
+0BE6..0BEF    ; XID_Continue # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0C01..0C03    ; XID_Continue # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C    ; XID_Continue # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; XID_Continue # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; XID_Continue # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; XID_Continue # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; XID_Continue # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; XID_Continue # Lo       TELUGU SIGN AVAGRAHA
+0C3E..0C40    ; XID_Continue # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44    ; XID_Continue # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; XID_Continue # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; XID_Continue # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; XID_Continue # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C59    ; XID_Continue # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; XID_Continue # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63    ; XID_Continue # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F    ; XID_Continue # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C82..0C83    ; XID_Continue # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; XID_Continue # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; XID_Continue # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; XID_Continue # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; XID_Continue # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; XID_Continue # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC          ; XID_Continue # Mn       KANNADA SIGN NUKTA
+0CBD          ; XID_Continue # Lo       KANNADA SIGN AVAGRAHA
+0CBE          ; XID_Continue # Mc       KANNADA VOWEL SIGN AA
+0CBF          ; XID_Continue # Mn       KANNADA VOWEL SIGN I
+0CC0..0CC4    ; XID_Continue # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6          ; XID_Continue # Mn       KANNADA VOWEL SIGN E
+0CC7..0CC8    ; XID_Continue # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; XID_Continue # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD    ; XID_Continue # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; XID_Continue # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE          ; XID_Continue # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; XID_Continue # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; XID_Continue # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF    ; XID_Continue # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0D02..0D03    ; XID_Continue # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; XID_Continue # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; XID_Continue # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; XID_Continue # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; XID_Continue # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; XID_Continue # Lo       MALAYALAM SIGN AVAGRAHA
+0D3E..0D40    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44    ; XID_Continue # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D          ; XID_Continue # Mn       MALAYALAM SIGN VIRAMA
+0D57          ; XID_Continue # Mc       MALAYALAM AU LENGTH MARK
+0D60..0D61    ; XID_Continue # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D62..0D63    ; XID_Continue # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F    ; XID_Continue # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F    ; XID_Continue # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; XID_Continue # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96    ; XID_Continue # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; XID_Continue # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; XID_Continue # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; XID_Continue # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; XID_Continue # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA          ; XID_Continue # Mn       SINHALA SIGN AL-LAKUNA
+0DCF..0DD1    ; XID_Continue # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4    ; XID_Continue # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; XID_Continue # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF    ; XID_Continue # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3    ; XID_Continue # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30    ; XID_Continue # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31          ; XID_Continue # Mn       THAI CHARACTER MAI HAN-AKAT
+0E32..0E33    ; XID_Continue # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A    ; XID_Continue # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45    ; XID_Continue # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; XID_Continue # Lm       THAI CHARACTER MAIYAMOK
+0E47..0E4E    ; XID_Continue # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E50..0E59    ; XID_Continue # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82    ; XID_Continue # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; XID_Continue # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; XID_Continue # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; XID_Continue # Lo       LAO LETTER SO TAM
+0E8D          ; XID_Continue # Lo       LAO LETTER NYO
+0E94..0E97    ; XID_Continue # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; XID_Continue # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; XID_Continue # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; XID_Continue # Lo       LAO LETTER LO LOOT
+0EA7          ; XID_Continue # Lo       LAO LETTER WO
+0EAA..0EAB    ; XID_Continue # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; XID_Continue # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB1          ; XID_Continue # Mn       LAO VOWEL SIGN MAI KAN
+0EB2..0EB3    ; XID_Continue # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9    ; XID_Continue # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; XID_Continue # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD          ; XID_Continue # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; XID_Continue # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; XID_Continue # Lm       LAO KO LA
+0EC8..0ECD    ; XID_Continue # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9    ; XID_Continue # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD    ; XID_Continue # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; XID_Continue # Lo       TIBETAN SYLLABLE OM
+0F18..0F19    ; XID_Continue # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F20..0F29    ; XID_Continue # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35          ; XID_Continue # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; XID_Continue # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39          ; XID_Continue # Mn       TIBETAN MARK TSA -PHRU
+0F3E..0F3F    ; XID_Continue # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47    ; XID_Continue # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; XID_Continue # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E    ; XID_Continue # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F          ; XID_Continue # Mc       TIBETAN SIGN RNAM BCAD
+0F80..0F84    ; XID_Continue # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87    ; XID_Continue # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8B    ; XID_Continue # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0F90..0F97    ; XID_Continue # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; XID_Continue # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; XID_Continue # Mn       TIBETAN SYMBOL PADMA GDAN
+1000..102A    ; XID_Continue # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030    ; XID_Continue # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031          ; XID_Continue # Mc       MYANMAR VOWEL SIGN E
+1032..1037    ; XID_Continue # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038          ; XID_Continue # Mc       MYANMAR SIGN VISARGA
+1039..103A    ; XID_Continue # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C    ; XID_Continue # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E    ; XID_Continue # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F          ; XID_Continue # Lo       MYANMAR LETTER GREAT SA
+1040..1049    ; XID_Continue # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1055    ; XID_Continue # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059    ; XID_Continue # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D    ; XID_Continue # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060    ; XID_Continue # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061          ; XID_Continue # Lo       MYANMAR LETTER SGAW KAREN SHA
+1062..1064    ; XID_Continue # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066    ; XID_Continue # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D    ; XID_Continue # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070    ; XID_Continue # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074    ; XID_Continue # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081    ; XID_Continue # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082          ; XID_Continue # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086    ; XID_Continue # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C    ; XID_Continue # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D          ; XID_Continue # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E          ; XID_Continue # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+108F          ; XID_Continue # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099    ; XID_Continue # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C    ; XID_Continue # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D          ; XID_Continue # Mn       MYANMAR VOWEL SIGN AITON AI
+10A0..10C5    ; XID_Continue # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; XID_Continue # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; XID_Continue # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; XID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; XID_Continue # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; XID_Continue # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; XID_Continue # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; XID_Continue # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; XID_Continue # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; XID_Continue # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; XID_Continue # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F          ; XID_Continue # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1369..1371    ; XID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+1380..138F    ; XID_Continue # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F4    ; XID_Continue # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C    ; XID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F    ; XID_Continue # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A    ; XID_Continue # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; XID_Continue # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; XID_Continue # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; XID_Continue # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; XID_Continue # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714    ; XID_Continue # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1720..1731    ; XID_Continue # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734    ; XID_Continue # Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1740..1751    ; XID_Continue # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753    ; XID_Continue # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C    ; XID_Continue # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; XID_Continue # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773    ; XID_Continue # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3    ; XID_Continue # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6          ; XID_Continue # Mc       KHMER VOWEL SIGN AA
+17B7..17BD    ; XID_Continue # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5    ; XID_Continue # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6          ; XID_Continue # Mn       KHMER SIGN NIKAHIT
+17C7..17C8    ; XID_Continue # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3    ; XID_Continue # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7          ; XID_Continue # Lm       KHMER SIGN LEK TOO
+17DC          ; XID_Continue # Lo       KHMER SIGN AVAKRAHASANYA
+17DD          ; XID_Continue # Mn       KHMER SIGN ATTHACAN
+17E0..17E9    ; XID_Continue # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+180B..180D    ; XID_Continue # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1810..1819    ; XID_Continue # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842    ; XID_Continue # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; XID_Continue # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; XID_Continue # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; XID_Continue # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9          ; XID_Continue # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+18AA          ; XID_Continue # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; XID_Continue # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; XID_Continue # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1920..1922    ; XID_Continue # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926    ; XID_Continue # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928    ; XID_Continue # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B    ; XID_Continue # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; XID_Continue # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932          ; XID_Continue # Mn       LIMBU SMALL LETTER ANUSVARA
+1933..1938    ; XID_Continue # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B    ; XID_Continue # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1946..194F    ; XID_Continue # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D    ; XID_Continue # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; XID_Continue # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; XID_Continue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C0    ; XID_Continue # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7    ; XID_Continue # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9    ; XID_Continue # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19DA    ; XID_Continue # Nd  [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
+1A00..1A16    ; XID_Continue # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18    ; XID_Continue # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B    ; XID_Continue # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A20..1A54    ; XID_Continue # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55          ; XID_Continue # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A56          ; XID_Continue # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A57          ; XID_Continue # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E    ; XID_Continue # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60          ; XID_Continue # Mn       TAI THAM SIGN SAKOT
+1A61          ; XID_Continue # Mc       TAI THAM VOWEL SIGN A
+1A62          ; XID_Continue # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64    ; XID_Continue # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C    ; XID_Continue # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72    ; XID_Continue # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C    ; XID_Continue # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; XID_Continue # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89    ; XID_Continue # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99    ; XID_Continue # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA7          ; XID_Continue # Lm       TAI THAM SIGN MAI YAMOK
+1B00..1B03    ; XID_Continue # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04          ; XID_Continue # Mc       BALINESE SIGN BISAH
+1B05..1B33    ; XID_Continue # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34          ; XID_Continue # Mn       BALINESE SIGN REREKAN
+1B35          ; XID_Continue # Mc       BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A    ; XID_Continue # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B          ; XID_Continue # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C          ; XID_Continue # Mn       BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41    ; XID_Continue # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42          ; XID_Continue # Mn       BALINESE VOWEL SIGN PEPET
+1B43..1B44    ; XID_Continue # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B    ; XID_Continue # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59    ; XID_Continue # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B6B..1B73    ; XID_Continue # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81    ; XID_Continue # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82          ; XID_Continue # Mc       SUNDANESE SIGN PANGWISAD
+1B83..1BA0    ; XID_Continue # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1          ; XID_Continue # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5    ; XID_Continue # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7    ; XID_Continue # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9    ; XID_Continue # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA          ; XID_Continue # Mc       SUNDANESE SIGN PAMAAEH
+1BAE..1BAF    ; XID_Continue # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9    ; XID_Continue # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1C00..1C23    ; XID_Continue # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B    ; XID_Continue # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33    ; XID_Continue # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35    ; XID_Continue # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37    ; XID_Continue # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C40..1C49    ; XID_Continue # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F    ; XID_Continue # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59    ; XID_Continue # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77    ; XID_Continue # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; XID_Continue # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2    ; XID_Continue # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0    ; XID_Continue # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1          ; XID_Continue # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8    ; XID_Continue # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC    ; XID_Continue # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED          ; XID_Continue # Mn       VEDIC SIGN TIRYAK
+1CEE..1CF1    ; XID_Continue # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2          ; XID_Continue # Mc       VEDIC SIGN ARDHAVISARGA
+1D00..1D2B    ; XID_Continue # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; XID_Continue # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; XID_Continue # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; XID_Continue # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; XID_Continue # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; XID_Continue # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DE6    ; XID_Continue # Mn  [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
+1DFD..1DFF    ; XID_Continue # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1F15    ; XID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; XID_Continue # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; XID_Continue # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; XID_Continue # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; XID_Continue # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; XID_Continue # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; XID_Continue # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; XID_Continue # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE          ; XID_Continue # L&       GREEK PROSGEGRAMMENI
+1FC2..1FC4    ; XID_Continue # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; XID_Continue # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3    ; XID_Continue # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; XID_Continue # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC    ; XID_Continue # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; XID_Continue # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; XID_Continue # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+203F..2040    ; XID_Continue # Pc   [2] UNDERTIE..CHARACTER TIE
+2054          ; XID_Continue # Pc       INVERTED UNDERTIE
+2071          ; XID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; XID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; XID_Continue # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+20D0..20DC    ; XID_Continue # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; XID_Continue # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20F0    ; XID_Continue # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2102          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; XID_Continue # L&       EULER CONSTANT
+210A..2113    ; XID_Continue # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL N
+2118          ; XID_Continue # So       SCRIPT CAPITAL P
+2119..211D    ; XID_Continue # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL Z
+2126          ; XID_Continue # L&       OHM SIGN
+2128          ; XID_Continue # L&       BLACK-LETTER CAPITAL Z
+212A..212D    ; XID_Continue # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E          ; XID_Continue # So       ESTIMATED SYMBOL
+212F..2134    ; XID_Continue # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; XID_Continue # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; XID_Continue # L&       INFORMATION SOURCE
+213C..213F    ; XID_Continue # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; XID_Continue # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E          ; XID_Continue # L&       TURNED SMALL F
+2160..2182    ; XID_Continue # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; XID_Continue # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; XID_Continue # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C2E    ; XID_Continue # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; XID_Continue # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; XID_Continue # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; XID_Continue # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; XID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE    ; XID_Continue # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1    ; XID_Continue # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D00..2D25    ; XID_Continue # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; XID_Continue # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; XID_Continue # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; XID_Continue # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF    ; XID_Continue # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+3005          ; XID_Continue # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; XID_Continue # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; XID_Continue # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; XID_Continue # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302F    ; XID_Continue # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3031..3035    ; XID_Continue # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A    ; XID_Continue # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; XID_Continue # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; XID_Continue # Lo       MASU MARK
+3041..3096    ; XID_Continue # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+3099..309A    ; XID_Continue # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; XID_Continue # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; XID_Continue # Lo       HIRAGANA DIGRAPH YORI
+30A1..30FA    ; XID_Continue # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; XID_Continue # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; XID_Continue # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; XID_Continue # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; XID_Continue # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31B7    ; XID_Continue # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF    ; XID_Continue # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DB5    ; XID_Continue # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; XID_Continue # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; XID_Continue # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; XID_Continue # Lm       YI SYLLABLE WU
+A016..A48C    ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7    ; XID_Continue # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; XID_Continue # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B    ; XID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; XID_Continue # Lm       VAI SYLLABLE LENGTHENER
+A610..A61F    ; XID_Continue # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629    ; XID_Continue # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B    ; XID_Continue # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; XID_Continue # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; XID_Continue # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; XID_Continue # Lo       CYRILLIC LETTER MULTIOCULAR O
+A66F          ; XID_Continue # Mn       COMBINING CYRILLIC VZMET
+A67C..A67D    ; XID_Continue # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67F          ; XID_Continue # Lm       CYRILLIC PAYEROK
+A680..A697    ; XID_Continue # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; XID_Continue # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; XID_Continue # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1    ; XID_Continue # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A717..A71F    ; XID_Continue # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F    ; XID_Continue # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; XID_Continue # Lm       MODIFIER LETTER US
+A771..A787    ; XID_Continue # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; XID_Continue # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78C    ; XID_Continue # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; XID_Continue # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A802          ; XID_Continue # Mn       SYLOTI NAGRI SIGN DVISVARA
+A803..A805    ; XID_Continue # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806          ; XID_Continue # Mn       SYLOTI NAGRI SIGN HASANTA
+A807..A80A    ; XID_Continue # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B          ; XID_Continue # Mn       SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822    ; XID_Continue # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824    ; XID_Continue # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826    ; XID_Continue # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827          ; XID_Continue # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A840..A873    ; XID_Continue # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881    ; XID_Continue # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3    ; XID_Continue # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3    ; XID_Continue # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4          ; XID_Continue # Mn       SAURASHTRA SIGN VIRAMA
+A8D0..A8D9    ; XID_Continue # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1    ; XID_Continue # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7    ; XID_Continue # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; XID_Continue # Lo       DEVANAGARI HEADSTROKE
+A900..A909    ; XID_Continue # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925    ; XID_Continue # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D    ; XID_Continue # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A930..A946    ; XID_Continue # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951    ; XID_Continue # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953    ; XID_Continue # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A960..A97C    ; XID_Continue # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982    ; XID_Continue # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983          ; XID_Continue # Mc       JAVANESE SIGN WIGNYAN
+A984..A9B2    ; XID_Continue # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3          ; XID_Continue # Mn       JAVANESE SIGN CECAK TELU
+A9B4..A9B5    ; XID_Continue # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9    ; XID_Continue # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB    ; XID_Continue # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC          ; XID_Continue # Mn       JAVANESE VOWEL SIGN PEPET
+A9BD..A9C0    ; XID_Continue # Mc   [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
+A9CF          ; XID_Continue # Lm       JAVANESE PANGRANGKEP
+A9D0..A9D9    ; XID_Continue # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+AA00..AA28    ; XID_Continue # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E    ; XID_Continue # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30    ; XID_Continue # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32    ; XID_Continue # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34    ; XID_Continue # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36    ; XID_Continue # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42    ; XID_Continue # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43          ; XID_Continue # Mn       CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B    ; XID_Continue # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C          ; XID_Continue # Mn       CHAM CONSONANT SIGN FINAL M
+AA4D          ; XID_Continue # Mc       CHAM CONSONANT SIGN FINAL H
+AA50..AA59    ; XID_Continue # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA60..AA6F    ; XID_Continue # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; XID_Continue # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; XID_Continue # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A          ; XID_Continue # Lo       MYANMAR LETTER AITON RA
+AA7B          ; XID_Continue # Mc       MYANMAR SIGN PAO KAREN TONE
+AA80..AAAF    ; XID_Continue # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0          ; XID_Continue # Mn       TAI VIET MAI KANG
+AAB1          ; XID_Continue # Lo       TAI VIET VOWEL AA
+AAB2..AAB4    ; XID_Continue # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6    ; XID_Continue # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8    ; XID_Continue # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD    ; XID_Continue # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF    ; XID_Continue # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0          ; XID_Continue # Lo       TAI VIET TONE MAI NUENG
+AAC1          ; XID_Continue # Mn       TAI VIET TONE MAI THO
+AAC2          ; XID_Continue # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; XID_Continue # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; XID_Continue # Lm       TAI VIET SYMBOL SAM
+ABC0..ABE2    ; XID_Continue # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5          ; XID_Continue # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8          ; XID_Continue # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC          ; XID_Continue # Mc       MEETEI MAYEK LUM IYEK
+ABED          ; XID_Continue # Mn       MEETEI MAYEK APUN IYEK
+ABF0..ABF9    ; XID_Continue # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3    ; XID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; XID_Continue # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; XID_Continue # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; XID_Continue # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; XID_Continue # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; XID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; XID_Continue # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; XID_Continue # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; XID_Continue # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1E          ; XID_Continue # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28    ; XID_Continue # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36    ; XID_Continue # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; XID_Continue # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; XID_Continue # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; XID_Continue # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; XID_Continue # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; XID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FC5D    ; XID_Continue # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64..FD3D    ; XID_Continue # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; XID_Continue # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; XID_Continue # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDF9    ; XID_Continue # Lo  [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM
+FE00..FE0F    ; XID_Continue # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE26    ; XID_Continue # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+FE33..FE34    ; XID_Continue # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE4D..FE4F    ; XID_Continue # Pc   [3] DASHED LOW LINE..WAVY LOW LINE
+FE71          ; XID_Continue # Lo       ARABIC TATWEEL WITH FATHATAN ABOVE
+FE73          ; XID_Continue # Lo       ARABIC TAIL FRAGMENT
+FE77          ; XID_Continue # Lo       ARABIC FATHA MEDIAL FORM
+FE79          ; XID_Continue # Lo       ARABIC DAMMA MEDIAL FORM
+FE7B          ; XID_Continue # Lo       ARABIC KASRA MEDIAL FORM
+FE7D          ; XID_Continue # Lo       ARABIC SHADDA MEDIAL FORM
+FE7F..FEFC    ; XID_Continue # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF10..FF19    ; XID_Continue # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF3A    ; XID_Continue # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3F          ; XID_Continue # Pc       FULLWIDTH LOW LINE
+FF41..FF5A    ; XID_Continue # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F    ; XID_Continue # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; XID_Continue # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; XID_Continue # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F    ; XID_Continue # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE    ; XID_Continue # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; XID_Continue # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B  ; XID_Continue # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; XID_Continue # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; XID_Continue # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; XID_Continue # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; XID_Continue # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; XID_Continue # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; XID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174  ; XID_Continue # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+101FD         ; XID_Continue # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C  ; XID_Continue # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; XID_Continue # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; XID_Continue # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10330..10340  ; XID_Continue # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; XID_Continue # Nl       GOTHIC LETTER NINETY
+10342..10349  ; XID_Continue # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; XID_Continue # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; XID_Continue # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; XID_Continue # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; XID_Continue # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; XID_Continue # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; XID_Continue # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; XID_Continue # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9  ; XID_Continue # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+10800..10805  ; XID_Continue # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; XID_Continue # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; XID_Continue # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; XID_Continue # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; XID_Continue # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; XID_Continue # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10900..10915  ; XID_Continue # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; XID_Continue # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+10A00         ; XID_Continue # Lo       KHAROSHTHI LETTER A
+10A01..10A03  ; XID_Continue # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; XID_Continue # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; XID_Continue # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13  ; XID_Continue # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; XID_Continue # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; XID_Continue # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A38..10A3A  ; XID_Continue # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; XID_Continue # Mn       KHAROSHTHI VIRAMA
+10A60..10A7C  ; XID_Continue # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10B00..10B35  ; XID_Continue # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; XID_Continue # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; XID_Continue # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10C00..10C48  ; XID_Continue # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+11080..11081  ; XID_Continue # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082         ; XID_Continue # Mc       KAITHI SIGN VISARGA
+11083..110AF  ; XID_Continue # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2  ; XID_Continue # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6  ; XID_Continue # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8  ; XID_Continue # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA  ; XID_Continue # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+12000..1236E  ; XID_Continue # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; XID_Continue # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+13000..1342E  ; XID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D165..1D166  ; XID_Continue # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169  ; XID_Continue # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172  ; XID_Continue # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182  ; XID_Continue # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; XID_Continue # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; XID_Continue # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244  ; XID_Continue # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D400..1D454  ; XID_Continue # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; XID_Continue # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; XID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; XID_Continue # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; XID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; XID_Continue # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; XID_Continue # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; XID_Continue # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; XID_Continue # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; XID_Continue # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; XID_Continue # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; XID_Continue # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; XID_Continue # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; XID_Continue # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; XID_Continue # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; XID_Continue # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; XID_Continue # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; XID_Continue # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; XID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; XID_Continue # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; XID_Continue # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; XID_Continue # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; XID_Continue # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; XID_Continue # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; XID_Continue # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; XID_Continue # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; XID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; XID_Continue # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; XID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; XID_Continue # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; XID_Continue # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+20000..2A6D6  ; XID_Continue # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; XID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0100..E01EF  ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 101615
+
+# ================================================
+
+# Derived Property: Default_Ignorable_Code_Point
+#  Generated from
+#    Other_Default_Ignorable_Code_Point
+#  + Cf (Format characters)
+#  + Variation_Selector
+#  - White_Space
+#  - FFF9..FFFB (Annotation Characters)
+#  - 0600..0603, 06DD, 070F (exceptional Cf characters that should be visible)
+
+00AD          ; Default_Ignorable_Code_Point # Cf       SOFT HYPHEN
+034F          ; Default_Ignorable_Code_Point # Mn       COMBINING GRAPHEME JOINER
+115F..1160    ; Default_Ignorable_Code_Point # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+17B4..17B5    ; Default_Ignorable_Code_Point # Cf   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+180B..180D    ; Default_Ignorable_Code_Point # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+200B..200F    ; Default_Ignorable_Code_Point # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+202A..202E    ; Default_Ignorable_Code_Point # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2064    ; Default_Ignorable_Code_Point # Cf   [5] WORD JOINER..INVISIBLE PLUS
+2065..2069    ; Default_Ignorable_Code_Point # Cn   [5] <reserved-2065>..<reserved-2069>
+206A..206F    ; Default_Ignorable_Code_Point # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+3164          ; Default_Ignorable_Code_Point # Lo       HANGUL FILLER
+FE00..FE0F    ; Default_Ignorable_Code_Point # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FEFF          ; Default_Ignorable_Code_Point # Cf       ZERO WIDTH NO-BREAK SPACE
+FFA0          ; Default_Ignorable_Code_Point # Lo       HALFWIDTH HANGUL FILLER
+FFF0..FFF8    ; Default_Ignorable_Code_Point # Cn   [9] <reserved-FFF0>..<reserved-FFF8>
+1D173..1D17A  ; Default_Ignorable_Code_Point # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+E0000         ; Default_Ignorable_Code_Point # Cn       <reserved-E0000>
+E0001         ; Default_Ignorable_Code_Point # Cf       LANGUAGE TAG
+E0002..E001F  ; Default_Ignorable_Code_Point # Cn  [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F  ; Default_Ignorable_Code_Point # Cf  [96] TAG SPACE..CANCEL TAG
+E0080..E00FF  ; Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E0100..E01EF  ; Default_Ignorable_Code_Point # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+E01F0..E0FFF  ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 4167
+
+# ================================================
+
+# Derived Property: Grapheme_Extend
+#  Generated from: Me + Mn + Other_Grapheme_Extend
+#  Note: depending on an application's interpretation of Co (private use),
+#  they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.
+
+0300..036F    ; Grapheme_Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0483..0487    ; Grapheme_Extend # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489    ; Grapheme_Extend # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0591..05BD    ; Grapheme_Extend # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF          ; Grapheme_Extend # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Grapheme_Extend # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; Grapheme_Extend # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; Grapheme_Extend # Mn       HEBREW POINT QAMATS QATAN
+0610..061A    ; Grapheme_Extend # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+064B..065E    ; Grapheme_Extend # Mn  [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS
+0670          ; Grapheme_Extend # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC    ; Grapheme_Extend # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DE          ; Grapheme_Extend # Me       ARABIC START OF RUB EL HIZB
+06DF..06E4    ; Grapheme_Extend # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8    ; Grapheme_Extend # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED    ; Grapheme_Extend # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+0711          ; Grapheme_Extend # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A    ; Grapheme_Extend # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0    ; Grapheme_Extend # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3    ; Grapheme_Extend # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+0816..0819    ; Grapheme_Extend # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081B..0823    ; Grapheme_Extend # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0825..0827    ; Grapheme_Extend # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0829..082D    ; Grapheme_Extend # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0900..0902    ; Grapheme_Extend # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+093C          ; Grapheme_Extend # Mn       DEVANAGARI SIGN NUKTA
+0941..0948    ; Grapheme_Extend # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D          ; Grapheme_Extend # Mn       DEVANAGARI SIGN VIRAMA
+0951..0955    ; Grapheme_Extend # Mn   [5] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN CANDRA LONG E
+0962..0963    ; Grapheme_Extend # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981          ; Grapheme_Extend # Mn       BENGALI SIGN CANDRABINDU
+09BC          ; Grapheme_Extend # Mn       BENGALI SIGN NUKTA
+09BE          ; Grapheme_Extend # Mc       BENGALI VOWEL SIGN AA
+09C1..09C4    ; Grapheme_Extend # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD          ; Grapheme_Extend # Mn       BENGALI SIGN VIRAMA
+09D7          ; Grapheme_Extend # Mc       BENGALI AU LENGTH MARK
+09E2..09E3    ; Grapheme_Extend # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02    ; Grapheme_Extend # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C          ; Grapheme_Extend # Mn       GURMUKHI SIGN NUKTA
+0A41..0A42    ; Grapheme_Extend # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Grapheme_Extend # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; Grapheme_Extend # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51          ; Grapheme_Extend # Mn       GURMUKHI SIGN UDAAT
+0A70..0A71    ; Grapheme_Extend # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75          ; Grapheme_Extend # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; Grapheme_Extend # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC          ; Grapheme_Extend # Mn       GUJARATI SIGN NUKTA
+0AC1..0AC5    ; Grapheme_Extend # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; Grapheme_Extend # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD          ; Grapheme_Extend # Mn       GUJARATI SIGN VIRAMA
+0AE2..0AE3    ; Grapheme_Extend # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01          ; Grapheme_Extend # Mn       ORIYA SIGN CANDRABINDU
+0B3C          ; Grapheme_Extend # Mn       ORIYA SIGN NUKTA
+0B3E          ; Grapheme_Extend # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; Grapheme_Extend # Mn       ORIYA VOWEL SIGN I
+0B41..0B44    ; Grapheme_Extend # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D          ; Grapheme_Extend # Mn       ORIYA SIGN VIRAMA
+0B56          ; Grapheme_Extend # Mn       ORIYA AI LENGTH MARK
+0B57          ; Grapheme_Extend # Mc       ORIYA AU LENGTH MARK
+0B62..0B63    ; Grapheme_Extend # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82          ; Grapheme_Extend # Mn       TAMIL SIGN ANUSVARA
+0BBE          ; Grapheme_Extend # Mc       TAMIL VOWEL SIGN AA
+0BC0          ; Grapheme_Extend # Mn       TAMIL VOWEL SIGN II
+0BCD          ; Grapheme_Extend # Mn       TAMIL SIGN VIRAMA
+0BD7          ; Grapheme_Extend # Mc       TAMIL AU LENGTH MARK
+0C3E..0C40    ; Grapheme_Extend # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48    ; Grapheme_Extend # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; Grapheme_Extend # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; Grapheme_Extend # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63    ; Grapheme_Extend # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0CBC          ; Grapheme_Extend # Mn       KANNADA SIGN NUKTA
+0CBF          ; Grapheme_Extend # Mn       KANNADA VOWEL SIGN I
+0CC2          ; Grapheme_Extend # Mc       KANNADA VOWEL SIGN UU
+0CC6          ; Grapheme_Extend # Mn       KANNADA VOWEL SIGN E
+0CCC..0CCD    ; Grapheme_Extend # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; Grapheme_Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE2..0CE3    ; Grapheme_Extend # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D3E          ; Grapheme_Extend # Mc       MALAYALAM VOWEL SIGN AA
+0D41..0D44    ; Grapheme_Extend # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D4D          ; Grapheme_Extend # Mn       MALAYALAM SIGN VIRAMA
+0D57          ; Grapheme_Extend # Mc       MALAYALAM AU LENGTH MARK
+0D62..0D63    ; Grapheme_Extend # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0DCA          ; Grapheme_Extend # Mn       SINHALA SIGN AL-LAKUNA
+0DCF          ; Grapheme_Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA
+0DD2..0DD4    ; Grapheme_Extend # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Grapheme_Extend # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DDF          ; Grapheme_Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA
+0E31          ; Grapheme_Extend # Mn       THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A    ; Grapheme_Extend # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E47..0E4E    ; Grapheme_Extend # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1          ; Grapheme_Extend # Mn       LAO VOWEL SIGN MAI KAN
+0EB4..0EB9    ; Grapheme_Extend # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; Grapheme_Extend # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EC8..0ECD    ; Grapheme_Extend # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19    ; Grapheme_Extend # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35          ; Grapheme_Extend # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; Grapheme_Extend # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39          ; Grapheme_Extend # Mn       TIBETAN MARK TSA -PHRU
+0F71..0F7E    ; Grapheme_Extend # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84    ; Grapheme_Extend # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87    ; Grapheme_Extend # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F90..0F97    ; Grapheme_Extend # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; Grapheme_Extend # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; Grapheme_Extend # Mn       TIBETAN SYMBOL PADMA GDAN
+102D..1030    ; Grapheme_Extend # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032..1037    ; Grapheme_Extend # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1039..103A    ; Grapheme_Extend # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103D..103E    ; Grapheme_Extend # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059    ; Grapheme_Extend # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060    ; Grapheme_Extend # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1071..1074    ; Grapheme_Extend # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082          ; Grapheme_Extend # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1085..1086    ; Grapheme_Extend # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108D          ; Grapheme_Extend # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+109D          ; Grapheme_Extend # Mn       MYANMAR VOWEL SIGN AITON AI
+135F          ; Grapheme_Extend # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1712..1714    ; Grapheme_Extend # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1734    ; Grapheme_Extend # Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1752..1753    ; Grapheme_Extend # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773    ; Grapheme_Extend # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B7..17BD    ; Grapheme_Extend # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6          ; Grapheme_Extend # Mn       KHMER SIGN NIKAHIT
+17C9..17D3    ; Grapheme_Extend # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD          ; Grapheme_Extend # Mn       KHMER SIGN ATTHACAN
+180B..180D    ; Grapheme_Extend # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+18A9          ; Grapheme_Extend # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922    ; Grapheme_Extend # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928    ; Grapheme_Extend # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932          ; Grapheme_Extend # Mn       LIMBU SMALL LETTER ANUSVARA
+1939..193B    ; Grapheme_Extend # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A17..1A18    ; Grapheme_Extend # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A56          ; Grapheme_Extend # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A58..1A5E    ; Grapheme_Extend # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60          ; Grapheme_Extend # Mn       TAI THAM SIGN SAKOT
+1A62          ; Grapheme_Extend # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A65..1A6C    ; Grapheme_Extend # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A73..1A7C    ; Grapheme_Extend # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; Grapheme_Extend # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1B00..1B03    ; Grapheme_Extend # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34          ; Grapheme_Extend # Mn       BALINESE SIGN REREKAN
+1B36..1B3A    ; Grapheme_Extend # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3C          ; Grapheme_Extend # Mn       BALINESE VOWEL SIGN LA LENGA
+1B42          ; Grapheme_Extend # Mn       BALINESE VOWEL SIGN PEPET
+1B6B..1B73    ; Grapheme_Extend # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81    ; Grapheme_Extend # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA2..1BA5    ; Grapheme_Extend # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA8..1BA9    ; Grapheme_Extend # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1C2C..1C33    ; Grapheme_Extend # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C36..1C37    ; Grapheme_Extend # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1CD0..1CD2    ; Grapheme_Extend # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0    ; Grapheme_Extend # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8    ; Grapheme_Extend # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED          ; Grapheme_Extend # Mn       VEDIC SIGN TIRYAK
+1DC0..1DE6    ; Grapheme_Extend # Mn  [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
+1DFD..1DFF    ; Grapheme_Extend # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C..200D    ; Grapheme_Extend # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+20D0..20DC    ; Grapheme_Extend # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0    ; Grapheme_Extend # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1          ; Grapheme_Extend # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4    ; Grapheme_Extend # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0    ; Grapheme_Extend # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2CEF..2CF1    ; Grapheme_Extend # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2DE0..2DFF    ; Grapheme_Extend # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+302A..302F    ; Grapheme_Extend # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A    ; Grapheme_Extend # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+A66F          ; Grapheme_Extend # Mn       COMBINING CYRILLIC VZMET
+A670..A672    ; Grapheme_Extend # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A67C..A67D    ; Grapheme_Extend # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A6F0..A6F1    ; Grapheme_Extend # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A802          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN DVISVARA
+A806          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN HASANTA
+A80B          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN ANUSVARA
+A825..A826    ; Grapheme_Extend # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A8C4          ; Grapheme_Extend # Mn       SAURASHTRA SIGN VIRAMA
+A8E0..A8F1    ; Grapheme_Extend # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A926..A92D    ; Grapheme_Extend # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A947..A951    ; Grapheme_Extend # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A980..A982    ; Grapheme_Extend # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3          ; Grapheme_Extend # Mn       JAVANESE SIGN CECAK TELU
+A9B6..A9B9    ; Grapheme_Extend # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BC          ; Grapheme_Extend # Mn       JAVANESE VOWEL SIGN PEPET
+AA29..AA2E    ; Grapheme_Extend # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA31..AA32    ; Grapheme_Extend # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA35..AA36    ; Grapheme_Extend # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43          ; Grapheme_Extend # Mn       CHAM CONSONANT SIGN FINAL NG
+AA4C          ; Grapheme_Extend # Mn       CHAM CONSONANT SIGN FINAL M
+AAB0          ; Grapheme_Extend # Mn       TAI VIET MAI KANG
+AAB2..AAB4    ; Grapheme_Extend # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8    ; Grapheme_Extend # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF    ; Grapheme_Extend # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1          ; Grapheme_Extend # Mn       TAI VIET TONE MAI THO
+ABE5          ; Grapheme_Extend # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE8          ; Grapheme_Extend # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABED          ; Grapheme_Extend # Mn       MEETEI MAYEK APUN IYEK
+FB1E          ; Grapheme_Extend # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F    ; Grapheme_Extend # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE26    ; Grapheme_Extend # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+FF9E..FF9F    ; Grapheme_Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+101FD         ; Grapheme_Extend # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10A01..10A03  ; Grapheme_Extend # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Grapheme_Extend # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; Grapheme_Extend # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A38..10A3A  ; Grapheme_Extend # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; Grapheme_Extend # Mn       KHAROSHTHI VIRAMA
+11080..11081  ; Grapheme_Extend # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+110B3..110B6  ; Grapheme_Extend # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B9..110BA  ; Grapheme_Extend # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+1D165         ; Grapheme_Extend # Mc       MUSICAL SYMBOL COMBINING STEM
+1D167..1D169  ; Grapheme_Extend # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16E..1D172  ; Grapheme_Extend # Mc   [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182  ; Grapheme_Extend # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; Grapheme_Extend # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; Grapheme_Extend # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244  ; Grapheme_Extend # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+E0100..E01EF  ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 1198
+
+# ================================================
+
+# Derived Property: Grapheme_Base
+#  Generated from: [0..10FFFF] - Cc - Cf - Cs - Co - Cn - Zl - Zp - Grapheme_Extend
+#  Note: depending on an application's interpretation of Co (private use),
+#  they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.
+
+0020          ; Grapheme_Base # Zs       SPACE
+0021..0023    ; Grapheme_Base # Po   [3] EXCLAMATION MARK..NUMBER SIGN
+0024          ; Grapheme_Base # Sc       DOLLAR SIGN
+0025..0027    ; Grapheme_Base # Po   [3] PERCENT SIGN..APOSTROPHE
+0028          ; Grapheme_Base # Ps       LEFT PARENTHESIS
+0029          ; Grapheme_Base # Pe       RIGHT PARENTHESIS
+002A          ; Grapheme_Base # Po       ASTERISK
+002B          ; Grapheme_Base # Sm       PLUS SIGN
+002C          ; Grapheme_Base # Po       COMMA
+002D          ; Grapheme_Base # Pd       HYPHEN-MINUS
+002E..002F    ; Grapheme_Base # Po   [2] FULL STOP..SOLIDUS
+0030..0039    ; Grapheme_Base # Nd  [10] DIGIT ZERO..DIGIT NINE
+003A..003B    ; Grapheme_Base # Po   [2] COLON..SEMICOLON
+003C..003E    ; Grapheme_Base # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040    ; Grapheme_Base # Po   [2] QUESTION MARK..COMMERCIAL AT
+0041..005A    ; Grapheme_Base # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005B          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET
+005C          ; Grapheme_Base # Po       REVERSE SOLIDUS
+005D          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET
+005E          ; Grapheme_Base # Sk       CIRCUMFLEX ACCENT
+005F          ; Grapheme_Base # Pc       LOW LINE
+0060          ; Grapheme_Base # Sk       GRAVE ACCENT
+0061..007A    ; Grapheme_Base # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+007B          ; Grapheme_Base # Ps       LEFT CURLY BRACKET
+007C          ; Grapheme_Base # Sm       VERTICAL LINE
+007D          ; Grapheme_Base # Pe       RIGHT CURLY BRACKET
+007E          ; Grapheme_Base # Sm       TILDE
+00A0          ; Grapheme_Base # Zs       NO-BREAK SPACE
+00A1          ; Grapheme_Base # Po       INVERTED EXCLAMATION MARK
+00A2..00A5    ; Grapheme_Base # Sc   [4] CENT SIGN..YEN SIGN
+00A6..00A7    ; Grapheme_Base # So   [2] BROKEN BAR..SECTION SIGN
+00A8          ; Grapheme_Base # Sk       DIAERESIS
+00A9          ; Grapheme_Base # So       COPYRIGHT SIGN
+00AA          ; Grapheme_Base # L&       FEMININE ORDINAL INDICATOR
+00AB          ; Grapheme_Base # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC          ; Grapheme_Base # Sm       NOT SIGN
+00AE          ; Grapheme_Base # So       REGISTERED SIGN
+00AF          ; Grapheme_Base # Sk       MACRON
+00B0          ; Grapheme_Base # So       DEGREE SIGN
+00B1          ; Grapheme_Base # Sm       PLUS-MINUS SIGN
+00B2..00B3    ; Grapheme_Base # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4          ; Grapheme_Base # Sk       ACUTE ACCENT
+00B5          ; Grapheme_Base # L&       MICRO SIGN
+00B6          ; Grapheme_Base # So       PILCROW SIGN
+00B7          ; Grapheme_Base # Po       MIDDLE DOT
+00B8          ; Grapheme_Base # Sk       CEDILLA
+00B9          ; Grapheme_Base # No       SUPERSCRIPT ONE
+00BA          ; Grapheme_Base # L&       MASCULINE ORDINAL INDICATOR
+00BB          ; Grapheme_Base # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE    ; Grapheme_Base # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF          ; Grapheme_Base # Po       INVERTED QUESTION MARK
+00C0..00D6    ; Grapheme_Base # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7          ; Grapheme_Base # Sm       MULTIPLICATION SIGN
+00D8..00F6    ; Grapheme_Base # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F7          ; Grapheme_Base # Sm       DIVISION SIGN
+00F8..01BA    ; Grapheme_Base # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; Grapheme_Base # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; Grapheme_Base # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; Grapheme_Base # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; Grapheme_Base # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; Grapheme_Base # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; Grapheme_Base # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; Grapheme_Base # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5    ; Grapheme_Base # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1    ; Grapheme_Base # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF    ; Grapheme_Base # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4    ; Grapheme_Base # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB    ; Grapheme_Base # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC          ; Grapheme_Base # Lm       MODIFIER LETTER VOICING
+02ED          ; Grapheme_Base # Sk       MODIFIER LETTER UNASPIRATED
+02EE          ; Grapheme_Base # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF    ; Grapheme_Base # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0370..0373    ; Grapheme_Base # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; Grapheme_Base # Lm       GREEK NUMERAL SIGN
+0375          ; Grapheme_Base # Sk       GREEK LOWER NUMERAL SIGN
+0376..0377    ; Grapheme_Base # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Grapheme_Base # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Grapheme_Base # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037E          ; Grapheme_Base # Po       GREEK QUESTION MARK
+0384..0385    ; Grapheme_Base # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386          ; Grapheme_Base # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387          ; Grapheme_Base # Po       GREEK ANO TELEIA
+0388..038A    ; Grapheme_Base # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Grapheme_Base # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Grapheme_Base # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; Grapheme_Base # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F6          ; Grapheme_Base # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..0481    ; Grapheme_Base # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0482          ; Grapheme_Base # So       CYRILLIC THOUSANDS SIGN
+048A..0525    ; Grapheme_Base # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0531..0556    ; Grapheme_Base # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Grapheme_Base # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F    ; Grapheme_Base # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0561..0587    ; Grapheme_Base # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0589          ; Grapheme_Base # Po       ARMENIAN FULL STOP
+058A          ; Grapheme_Base # Pd       ARMENIAN HYPHEN
+05BE          ; Grapheme_Base # Pd       HEBREW PUNCTUATION MAQAF
+05C0          ; Grapheme_Base # Po       HEBREW PUNCTUATION PASEQ
+05C3          ; Grapheme_Base # Po       HEBREW PUNCTUATION SOF PASUQ
+05C6          ; Grapheme_Base # Po       HEBREW PUNCTUATION NUN HAFUKHA
+05D0..05EA    ; Grapheme_Base # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; Grapheme_Base # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4    ; Grapheme_Base # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+0606..0608    ; Grapheme_Base # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A    ; Grapheme_Base # Po   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B          ; Grapheme_Base # Sc       AFGHANI SIGN
+060C..060D    ; Grapheme_Base # Po   [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+060E..060F    ; Grapheme_Base # So   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+061B          ; Grapheme_Base # Po       ARABIC SEMICOLON
+061E..061F    ; Grapheme_Base # Po   [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+0621..063F    ; Grapheme_Base # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; Grapheme_Base # Lm       ARABIC TATWEEL
+0641..064A    ; Grapheme_Base # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0660..0669    ; Grapheme_Base # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066A..066D    ; Grapheme_Base # Po   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F    ; Grapheme_Base # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3    ; Grapheme_Base # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4          ; Grapheme_Base # Po       ARABIC FULL STOP
+06D5          ; Grapheme_Base # Lo       ARABIC LETTER AE
+06E5..06E6    ; Grapheme_Base # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E9          ; Grapheme_Base # So       ARABIC PLACE OF SAJDAH
+06EE..06EF    ; Grapheme_Base # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; Grapheme_Base # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC    ; Grapheme_Base # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE    ; Grapheme_Base # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF          ; Grapheme_Base # Lo       ARABIC LETTER HEH WITH INVERTED V
+0700..070D    ; Grapheme_Base # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+0710          ; Grapheme_Base # Lo       SYRIAC LETTER ALAPH
+0712..072F    ; Grapheme_Base # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5    ; Grapheme_Base # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1          ; Grapheme_Base # Lo       THAANA LETTER NAA
+07C0..07C9    ; Grapheme_Base # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA    ; Grapheme_Base # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5    ; Grapheme_Base # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6          ; Grapheme_Base # So       NKO SYMBOL OO DENNEN
+07F7..07F9    ; Grapheme_Base # Po   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+07FA          ; Grapheme_Base # Lm       NKO LAJANYALAN
+0800..0815    ; Grapheme_Base # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0828          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER I
+0830..083E    ; Grapheme_Base # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+0903          ; Grapheme_Base # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; Grapheme_Base # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D          ; Grapheme_Base # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; Grapheme_Base # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0949..094C    ; Grapheme_Base # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E          ; Grapheme_Base # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950          ; Grapheme_Base # Lo       DEVANAGARI OM
+0958..0961    ; Grapheme_Base # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0964..0965    ; Grapheme_Base # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0966..096F    ; Grapheme_Base # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970          ; Grapheme_Base # Po       DEVANAGARI ABBREVIATION SIGN
+0971          ; Grapheme_Base # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; Grapheme_Base # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; Grapheme_Base # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0982..0983    ; Grapheme_Base # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; Grapheme_Base # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Grapheme_Base # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Grapheme_Base # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Grapheme_Base # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Grapheme_Base # Lo       BENGALI LETTER LA
+09B6..09B9    ; Grapheme_Base # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD          ; Grapheme_Base # Lo       BENGALI SIGN AVAGRAHA
+09BF..09C0    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II
+09C7..09C8    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CE          ; Grapheme_Base # Lo       BENGALI LETTER KHANDA TA
+09DC..09DD    ; Grapheme_Base # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; Grapheme_Base # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E6..09EF    ; Grapheme_Base # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1    ; Grapheme_Base # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3    ; Grapheme_Base # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9    ; Grapheme_Base # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA          ; Grapheme_Base # So       BENGALI ISSHAR
+09FB          ; Grapheme_Base # Sc       BENGALI GANDA MARK
+0A03          ; Grapheme_Base # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Grapheme_Base # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Grapheme_Base # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Grapheme_Base # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40    ; Grapheme_Base # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A59..0A5C    ; Grapheme_Base # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; Grapheme_Base # Lo       GURMUKHI LETTER FA
+0A66..0A6F    ; Grapheme_Base # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A72..0A74    ; Grapheme_Base # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A83          ; Grapheme_Base # Mc       GUJARATI SIGN VISARGA
+0A85..0A8D    ; Grapheme_Base # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; Grapheme_Base # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; Grapheme_Base # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; Grapheme_Base # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; Grapheme_Base # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; Grapheme_Base # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD          ; Grapheme_Base # Lo       GUJARATI SIGN AVAGRAHA
+0ABE..0AC0    ; Grapheme_Base # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC9          ; Grapheme_Base # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; Grapheme_Base # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AD0          ; Grapheme_Base # Lo       GUJARATI OM
+0AE0..0AE1    ; Grapheme_Base # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE6..0AEF    ; Grapheme_Base # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF1          ; Grapheme_Base # Sc       GUJARATI RUPEE SIGN
+0B02..0B03    ; Grapheme_Base # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C    ; Grapheme_Base # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; Grapheme_Base # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; Grapheme_Base # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; Grapheme_Base # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; Grapheme_Base # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; Grapheme_Base # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D          ; Grapheme_Base # Lo       ORIYA SIGN AVAGRAHA
+0B40          ; Grapheme_Base # Mc       ORIYA VOWEL SIGN II
+0B47..0B48    ; Grapheme_Base # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; Grapheme_Base # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D    ; Grapheme_Base # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; Grapheme_Base # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F    ; Grapheme_Base # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70          ; Grapheme_Base # So       ORIYA ISSHAR
+0B71          ; Grapheme_Base # Lo       ORIYA LETTER WA
+0B83          ; Grapheme_Base # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; Grapheme_Base # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; Grapheme_Base # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; Grapheme_Base # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; Grapheme_Base # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; Grapheme_Base # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; Grapheme_Base # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; Grapheme_Base # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; Grapheme_Base # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; Grapheme_Base # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBF          ; Grapheme_Base # Mc       TAMIL VOWEL SIGN I
+0BC1..0BC2    ; Grapheme_Base # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Grapheme_Base # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; Grapheme_Base # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD0          ; Grapheme_Base # Lo       TAMIL OM
+0BE6..0BEF    ; Grapheme_Base # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2    ; Grapheme_Base # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8    ; Grapheme_Base # So   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9          ; Grapheme_Base # Sc       TAMIL RUPEE SIGN
+0BFA          ; Grapheme_Base # So       TAMIL NUMBER SIGN
+0C01..0C03    ; Grapheme_Base # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C    ; Grapheme_Base # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; Grapheme_Base # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; Grapheme_Base # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; Grapheme_Base # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; Grapheme_Base # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; Grapheme_Base # Lo       TELUGU SIGN AVAGRAHA
+0C41..0C44    ; Grapheme_Base # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C58..0C59    ; Grapheme_Base # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; Grapheme_Base # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F    ; Grapheme_Base # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C78..0C7E    ; Grapheme_Base # No   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F          ; Grapheme_Base # So       TELUGU SIGN TUUMU
+0C82..0C83    ; Grapheme_Base # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; Grapheme_Base # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; Grapheme_Base # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; Grapheme_Base # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; Grapheme_Base # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; Grapheme_Base # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD          ; Grapheme_Base # Lo       KANNADA SIGN AVAGRAHA
+0CBE          ; Grapheme_Base # Mc       KANNADA VOWEL SIGN AA
+0CC0..0CC1    ; Grapheme_Base # Mc   [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U
+0CC3..0CC4    ; Grapheme_Base # Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR
+0CC7..0CC8    ; Grapheme_Base # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; Grapheme_Base # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CDE          ; Grapheme_Base # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; Grapheme_Base # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE6..0CEF    ; Grapheme_Base # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2    ; Grapheme_Base # So   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D02..0D03    ; Grapheme_Base # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; Grapheme_Base # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; Grapheme_Base # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; Grapheme_Base # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; Grapheme_Base # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; Grapheme_Base # Lo       MALAYALAM SIGN AVAGRAHA
+0D3F..0D40    ; Grapheme_Base # Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II
+0D46..0D48    ; Grapheme_Base # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; Grapheme_Base # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D60..0D61    ; Grapheme_Base # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F    ; Grapheme_Base # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D75    ; Grapheme_Base # No   [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
+0D79          ; Grapheme_Base # So       MALAYALAM DATE MARK
+0D7A..0D7F    ; Grapheme_Base # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; Grapheme_Base # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96    ; Grapheme_Base # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; Grapheme_Base # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; Grapheme_Base # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; Grapheme_Base # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; Grapheme_Base # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DD0..0DD1    ; Grapheme_Base # Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD8..0DDE    ; Grapheme_Base # Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DF2..0DF3    ; Grapheme_Base # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4          ; Grapheme_Base # Po       SINHALA PUNCTUATION KUNDDALIYA
+0E01..0E30    ; Grapheme_Base # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32..0E33    ; Grapheme_Base # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E3F          ; Grapheme_Base # Sc       THAI CURRENCY SYMBOL BAHT
+0E40..0E45    ; Grapheme_Base # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; Grapheme_Base # Lm       THAI CHARACTER MAIYAMOK
+0E4F          ; Grapheme_Base # Po       THAI CHARACTER FONGMAN
+0E50..0E59    ; Grapheme_Base # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B    ; Grapheme_Base # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0E81..0E82    ; Grapheme_Base # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; Grapheme_Base # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; Grapheme_Base # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; Grapheme_Base # Lo       LAO LETTER SO TAM
+0E8D          ; Grapheme_Base # Lo       LAO LETTER NYO
+0E94..0E97    ; Grapheme_Base # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; Grapheme_Base # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; Grapheme_Base # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; Grapheme_Base # Lo       LAO LETTER LO LOOT
+0EA7          ; Grapheme_Base # Lo       LAO LETTER WO
+0EAA..0EAB    ; Grapheme_Base # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; Grapheme_Base # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB2..0EB3    ; Grapheme_Base # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EBD          ; Grapheme_Base # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; Grapheme_Base # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; Grapheme_Base # Lm       LAO KO LA
+0ED0..0ED9    ; Grapheme_Base # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD    ; Grapheme_Base # Lo   [2] LAO HO NO..LAO HO MO
+0F00          ; Grapheme_Base # Lo       TIBETAN SYLLABLE OM
+0F01..0F03    ; Grapheme_Base # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12    ; Grapheme_Base # Po  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13..0F17    ; Grapheme_Base # So   [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F1A..0F1F    ; Grapheme_Base # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29    ; Grapheme_Base # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33    ; Grapheme_Base # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34          ; Grapheme_Base # So       TIBETAN MARK BSDUS RTAGS
+0F36          ; Grapheme_Base # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F38          ; Grapheme_Base # So       TIBETAN MARK CHE MGO
+0F3A          ; Grapheme_Base # Ps       TIBETAN MARK GUG RTAGS GYON
+0F3B          ; Grapheme_Base # Pe       TIBETAN MARK GUG RTAGS GYAS
+0F3C          ; Grapheme_Base # Ps       TIBETAN MARK ANG KHANG GYON
+0F3D          ; Grapheme_Base # Pe       TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F    ; Grapheme_Base # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47    ; Grapheme_Base # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; Grapheme_Base # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F7F          ; Grapheme_Base # Mc       TIBETAN SIGN RNAM BCAD
+0F85          ; Grapheme_Base # Po       TIBETAN MARK PALUTA
+0F88..0F8B    ; Grapheme_Base # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0FBE..0FC5    ; Grapheme_Base # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC7..0FCC    ; Grapheme_Base # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF    ; Grapheme_Base # So   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD4    ; Grapheme_Base # Po   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5..0FD8    ; Grapheme_Base # So   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+1000..102A    ; Grapheme_Base # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+1031          ; Grapheme_Base # Mc       MYANMAR VOWEL SIGN E
+1038          ; Grapheme_Base # Mc       MYANMAR SIGN VISARGA
+103B..103C    ; Grapheme_Base # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103F          ; Grapheme_Base # Lo       MYANMAR LETTER GREAT SA
+1040..1049    ; Grapheme_Base # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F    ; Grapheme_Base # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055    ; Grapheme_Base # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+105A..105D    ; Grapheme_Base # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061          ; Grapheme_Base # Lo       MYANMAR LETTER SGAW KAREN SHA
+1062..1064    ; Grapheme_Base # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066    ; Grapheme_Base # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D    ; Grapheme_Base # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070    ; Grapheme_Base # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081    ; Grapheme_Base # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1083..1084    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1087..108C    ; Grapheme_Base # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108E          ; Grapheme_Base # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+108F          ; Grapheme_Base # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099    ; Grapheme_Base # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C    ; Grapheme_Base # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109E..109F    ; Grapheme_Base # So   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+10A0..10C5    ; Grapheme_Base # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; Grapheme_Base # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FB          ; Grapheme_Base # Po       GEORGIAN PARAGRAPH SEPARATOR
+10FC          ; Grapheme_Base # Lm       MODIFIER LETTER GEORGIAN NAR
+1100..1248    ; Grapheme_Base # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; Grapheme_Base # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; Grapheme_Base # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; Grapheme_Base # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; Grapheme_Base # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; Grapheme_Base # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; Grapheme_Base # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; Grapheme_Base # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1360          ; Grapheme_Base # So       ETHIOPIC SECTION MARK
+1361..1368    ; Grapheme_Base # Po   [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C    ; Grapheme_Base # No  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F    ; Grapheme_Base # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399    ; Grapheme_Base # So  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+13A0..13F4    ; Grapheme_Base # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1400          ; Grapheme_Base # Pd       CANADIAN SYLLABICS HYPHEN
+1401..166C    ; Grapheme_Base # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D..166E    ; Grapheme_Base # Po   [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+166F..167F    ; Grapheme_Base # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1680          ; Grapheme_Base # Zs       OGHAM SPACE MARK
+1681..169A    ; Grapheme_Base # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B          ; Grapheme_Base # Ps       OGHAM FEATHER MARK
+169C          ; Grapheme_Base # Pe       OGHAM REVERSED FEATHER MARK
+16A0..16EA    ; Grapheme_Base # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EB..16ED    ; Grapheme_Base # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+16EE..16F0    ; Grapheme_Base # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C    ; Grapheme_Base # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; Grapheme_Base # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1720..1731    ; Grapheme_Base # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1735..1736    ; Grapheme_Base # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1740..1751    ; Grapheme_Base # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C    ; Grapheme_Base # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; Grapheme_Base # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3    ; Grapheme_Base # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6          ; Grapheme_Base # Mc       KHMER VOWEL SIGN AA
+17BE..17C5    ; Grapheme_Base # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C7..17C8    ; Grapheme_Base # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17D4..17D6    ; Grapheme_Base # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7          ; Grapheme_Base # Lm       KHMER SIGN LEK TOO
+17D8..17DA    ; Grapheme_Base # Po   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB          ; Grapheme_Base # Sc       KHMER CURRENCY SYMBOL RIEL
+17DC          ; Grapheme_Base # Lo       KHMER SIGN AVAKRAHASANYA
+17E0..17E9    ; Grapheme_Base # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9    ; Grapheme_Base # No  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800..1805    ; Grapheme_Base # Po   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+1806          ; Grapheme_Base # Pd       MONGOLIAN TODO SOFT HYPHEN
+1807..180A    ; Grapheme_Base # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+180E          ; Grapheme_Base # Zs       MONGOLIAN VOWEL SEPARATOR
+1810..1819    ; Grapheme_Base # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842    ; Grapheme_Base # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; Grapheme_Base # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; Grapheme_Base # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; Grapheme_Base # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA          ; Grapheme_Base # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5    ; Grapheme_Base # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; Grapheme_Base # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1923..1926    ; Grapheme_Base # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1929..192B    ; Grapheme_Base # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; Grapheme_Base # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1933..1938    ; Grapheme_Base # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1940          ; Grapheme_Base # So       LIMBU SIGN LOO
+1944..1945    ; Grapheme_Base # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F    ; Grapheme_Base # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D    ; Grapheme_Base # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; Grapheme_Base # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB    ; Grapheme_Base # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C0    ; Grapheme_Base # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7    ; Grapheme_Base # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9    ; Grapheme_Base # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19DA    ; Grapheme_Base # Nd  [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
+19DE..19DF    ; Grapheme_Base # Po   [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+19E0..19FF    ; Grapheme_Base # So  [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+1A00..1A16    ; Grapheme_Base # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A19..1A1B    ; Grapheme_Base # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A1E..1A1F    ; Grapheme_Base # Po   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+1A20..1A54    ; Grapheme_Base # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55          ; Grapheme_Base # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A57          ; Grapheme_Base # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A61          ; Grapheme_Base # Mc       TAI THAM VOWEL SIGN A
+1A63..1A64    ; Grapheme_Base # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A6D..1A72    ; Grapheme_Base # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A80..1A89    ; Grapheme_Base # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99    ; Grapheme_Base # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6    ; Grapheme_Base # Po   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7          ; Grapheme_Base # Lm       TAI THAM SIGN MAI YAMOK
+1AA8..1AAD    ; Grapheme_Base # Po   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+1B04          ; Grapheme_Base # Mc       BALINESE SIGN BISAH
+1B05..1B33    ; Grapheme_Base # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B35          ; Grapheme_Base # Mc       BALINESE VOWEL SIGN TEDUNG
+1B3B          ; Grapheme_Base # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D..1B41    ; Grapheme_Base # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43..1B44    ; Grapheme_Base # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B    ; Grapheme_Base # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59    ; Grapheme_Base # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B60    ; Grapheme_Base # Po   [7] BALINESE PANTI..BALINESE PAMENENG
+1B61..1B6A    ; Grapheme_Base # So  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B74..1B7C    ; Grapheme_Base # So   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B82          ; Grapheme_Base # Mc       SUNDANESE SIGN PANGWISAD
+1B83..1BA0    ; Grapheme_Base # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1          ; Grapheme_Base # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA6..1BA7    ; Grapheme_Base # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BAA          ; Grapheme_Base # Mc       SUNDANESE SIGN PAMAAEH
+1BAE..1BAF    ; Grapheme_Base # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9    ; Grapheme_Base # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1C00..1C23    ; Grapheme_Base # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B    ; Grapheme_Base # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C34..1C35    ; Grapheme_Base # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C3B..1C3F    ; Grapheme_Base # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49    ; Grapheme_Base # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F    ; Grapheme_Base # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59    ; Grapheme_Base # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77    ; Grapheme_Base # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; Grapheme_Base # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F    ; Grapheme_Base # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1CD3          ; Grapheme_Base # Po       VEDIC SIGN NIHSHVASA
+1CE1          ; Grapheme_Base # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE9..1CEC    ; Grapheme_Base # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1    ; Grapheme_Base # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2          ; Grapheme_Base # Mc       VEDIC SIGN ARDHAVISARGA
+1D00..1D2B    ; Grapheme_Base # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61    ; Grapheme_Base # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D77    ; Grapheme_Base # L&  [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
+1D78          ; Grapheme_Base # Lm       MODIFIER LETTER CYRILLIC EN
+1D79..1D9A    ; Grapheme_Base # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF    ; Grapheme_Base # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15    ; Grapheme_Base # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Grapheme_Base # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Grapheme_Base # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Grapheme_Base # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Grapheme_Base # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; Grapheme_Base # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Grapheme_Base # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD          ; Grapheme_Base # Sk       GREEK KORONIS
+1FBE          ; Grapheme_Base # L&       GREEK PROSGEGRAMMENI
+1FBF..1FC1    ; Grapheme_Base # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4    ; Grapheme_Base # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF    ; Grapheme_Base # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3    ; Grapheme_Base # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; Grapheme_Base # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF    ; Grapheme_Base # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC    ; Grapheme_Base # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF    ; Grapheme_Base # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4    ; Grapheme_Base # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE    ; Grapheme_Base # Sk   [2] GREEK OXIA..GREEK DASIA
+2000..200A    ; Grapheme_Base # Zs  [11] EN QUAD..HAIR SPACE
+2010..2015    ; Grapheme_Base # Pd   [6] HYPHEN..HORIZONTAL BAR
+2016..2017    ; Grapheme_Base # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018          ; Grapheme_Base # Pi       LEFT SINGLE QUOTATION MARK
+2019          ; Grapheme_Base # Pf       RIGHT SINGLE QUOTATION MARK
+201A          ; Grapheme_Base # Ps       SINGLE LOW-9 QUOTATION MARK
+201B..201C    ; Grapheme_Base # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D          ; Grapheme_Base # Pf       RIGHT DOUBLE QUOTATION MARK
+201E          ; Grapheme_Base # Ps       DOUBLE LOW-9 QUOTATION MARK
+201F          ; Grapheme_Base # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027    ; Grapheme_Base # Po   [8] DAGGER..HYPHENATION POINT
+202F          ; Grapheme_Base # Zs       NARROW NO-BREAK SPACE
+2030..2038    ; Grapheme_Base # Po   [9] PER MILLE SIGN..CARET
+2039          ; Grapheme_Base # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A          ; Grapheme_Base # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E    ; Grapheme_Base # Po   [4] REFERENCE MARK..OVERLINE
+203F..2040    ; Grapheme_Base # Pc   [2] UNDERTIE..CHARACTER TIE
+2041..2043    ; Grapheme_Base # Po   [3] CARET INSERTION POINT..HYPHEN BULLET
+2044          ; Grapheme_Base # Sm       FRACTION SLASH
+2045          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH QUILL
+2046          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH QUILL
+2047..2051    ; Grapheme_Base # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052          ; Grapheme_Base # Sm       COMMERCIAL MINUS SIGN
+2053          ; Grapheme_Base # Po       SWUNG DASH
+2054          ; Grapheme_Base # Pc       INVERTED UNDERTIE
+2055..205E    ; Grapheme_Base # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F          ; Grapheme_Base # Zs       MEDIUM MATHEMATICAL SPACE
+2070          ; Grapheme_Base # No       SUPERSCRIPT ZERO
+2071          ; Grapheme_Base # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079    ; Grapheme_Base # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C    ; Grapheme_Base # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D          ; Grapheme_Base # Ps       SUPERSCRIPT LEFT PARENTHESIS
+207E          ; Grapheme_Base # Pe       SUPERSCRIPT RIGHT PARENTHESIS
+207F          ; Grapheme_Base # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2080..2089    ; Grapheme_Base # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C    ; Grapheme_Base # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D          ; Grapheme_Base # Ps       SUBSCRIPT LEFT PARENTHESIS
+208E          ; Grapheme_Base # Pe       SUBSCRIPT RIGHT PARENTHESIS
+2090..2094    ; Grapheme_Base # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+20A0..20B8    ; Grapheme_Base # Sc  [25] EURO-CURRENCY SIGN..TENGE SIGN
+2100..2101    ; Grapheme_Base # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL C
+2103..2106    ; Grapheme_Base # So   [4] DEGREE CELSIUS..CADA UNA
+2107          ; Grapheme_Base # L&       EULER CONSTANT
+2108..2109    ; Grapheme_Base # So   [2] SCRUPLE..DEGREE FAHRENHEIT
+210A..2113    ; Grapheme_Base # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2114          ; Grapheme_Base # So       L B BAR SYMBOL
+2115          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL N
+2116..2118    ; Grapheme_Base # So   [3] NUMERO SIGN..SCRIPT CAPITAL P
+2119..211D    ; Grapheme_Base # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2123    ; Grapheme_Base # So   [6] PRESCRIPTION TAKE..VERSICLE
+2124          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL Z
+2125          ; Grapheme_Base # So       OUNCE SIGN
+2126          ; Grapheme_Base # L&       OHM SIGN
+2127          ; Grapheme_Base # So       INVERTED OHM SIGN
+2128          ; Grapheme_Base # L&       BLACK-LETTER CAPITAL Z
+2129          ; Grapheme_Base # So       TURNED GREEK SMALL LETTER IOTA
+212A..212D    ; Grapheme_Base # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E          ; Grapheme_Base # So       ESTIMATED SYMBOL
+212F..2134    ; Grapheme_Base # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138    ; Grapheme_Base # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; Grapheme_Base # L&       INFORMATION SOURCE
+213A..213B    ; Grapheme_Base # So   [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F    ; Grapheme_Base # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144    ; Grapheme_Base # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149    ; Grapheme_Base # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A          ; Grapheme_Base # So       PROPERTY LINE
+214B          ; Grapheme_Base # Sm       TURNED AMPERSAND
+214C..214D    ; Grapheme_Base # So   [2] PER SIGN..AKTIESELSKAB
+214E          ; Grapheme_Base # L&       TURNED SMALL F
+214F          ; Grapheme_Base # So       SYMBOL FOR SAMARITAN SOURCE
+2150..215F    ; Grapheme_Base # No  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2160..2182    ; Grapheme_Base # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; Grapheme_Base # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; Grapheme_Base # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2189          ; Grapheme_Base # No       VULGAR FRACTION ZERO THIRDS
+2190..2194    ; Grapheme_Base # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199    ; Grapheme_Base # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B    ; Grapheme_Base # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F    ; Grapheme_Base # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0          ; Grapheme_Base # Sm       RIGHTWARDS TWO HEADED ARROW
+21A1..21A2    ; Grapheme_Base # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3          ; Grapheme_Base # Sm       RIGHTWARDS ARROW WITH TAIL
+21A4..21A5    ; Grapheme_Base # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6          ; Grapheme_Base # Sm       RIGHTWARDS ARROW FROM BAR
+21A7..21AD    ; Grapheme_Base # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE          ; Grapheme_Base # Sm       LEFT RIGHT ARROW WITH STROKE
+21AF..21CD    ; Grapheme_Base # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF    ; Grapheme_Base # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Grapheme_Base # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2          ; Grapheme_Base # Sm       RIGHTWARDS DOUBLE ARROW
+21D3          ; Grapheme_Base # So       DOWNWARDS DOUBLE ARROW
+21D4          ; Grapheme_Base # Sm       LEFT RIGHT DOUBLE ARROW
+21D5..21F3    ; Grapheme_Base # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF    ; Grapheme_Base # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307    ; Grapheme_Base # So   [8] DIAMETER SIGN..WAVY LINE
+2308..230B    ; Grapheme_Base # Sm   [4] LEFT CEILING..RIGHT FLOOR
+230C..231F    ; Grapheme_Base # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321    ; Grapheme_Base # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328    ; Grapheme_Base # So   [7] FROWN..KEYBOARD
+2329          ; Grapheme_Base # Ps       LEFT-POINTING ANGLE BRACKET
+232A          ; Grapheme_Base # Pe       RIGHT-POINTING ANGLE BRACKET
+232B..237B    ; Grapheme_Base # So  [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C          ; Grapheme_Base # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A    ; Grapheme_Base # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3    ; Grapheme_Base # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB    ; Grapheme_Base # So  [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1    ; Grapheme_Base # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..23E8    ; Grapheme_Base # So   [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
+2400..2426    ; Grapheme_Base # So  [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A    ; Grapheme_Base # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B    ; Grapheme_Base # No  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9    ; Grapheme_Base # So  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FF    ; Grapheme_Base # No  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6    ; Grapheme_Base # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7          ; Grapheme_Base # Sm       WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0    ; Grapheme_Base # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1          ; Grapheme_Base # Sm       WHITE LEFT-POINTING TRIANGLE
+25C2..25F7    ; Grapheme_Base # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF    ; Grapheme_Base # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E    ; Grapheme_Base # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F          ; Grapheme_Base # Sm       MUSIC SHARP SIGN
+2670..26CD    ; Grapheme_Base # So  [94] WEST SYRIAC CROSS..DISABLED CAR
+26CF..26E1    ; Grapheme_Base # So  [19] PICK..RESTRICTED LEFT ENTRY-2
+26E3          ; Grapheme_Base # So       HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E8..26FF    ; Grapheme_Base # So  [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2701..2704    ; Grapheme_Base # So   [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2706..2709    ; Grapheme_Base # So   [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270C..2727    ; Grapheme_Base # So  [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2729..274B    ; Grapheme_Base # So  [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D          ; Grapheme_Base # So       SHADOWED WHITE CIRCLE
+274F..2752    ; Grapheme_Base # So   [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2756..275E    ; Grapheme_Base # So   [9] BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761..2767    ; Grapheme_Base # So   [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768          ; Grapheme_Base # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT
+2769          ; Grapheme_Base # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A          ; Grapheme_Base # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B          ; Grapheme_Base # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C          ; Grapheme_Base # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D          ; Grapheme_Base # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E          ; Grapheme_Base # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F          ; Grapheme_Base # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770          ; Grapheme_Base # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771          ; Grapheme_Base # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772          ; Grapheme_Base # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773          ; Grapheme_Base # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774          ; Grapheme_Base # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775          ; Grapheme_Base # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793    ; Grapheme_Base # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794          ; Grapheme_Base # So       HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798..27AF    ; Grapheme_Base # So  [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1..27BE    ; Grapheme_Base # So  [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27C0..27C4    ; Grapheme_Base # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5          ; Grapheme_Base # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Grapheme_Base # Pe       RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Grapheme_Base # Sm   [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CC          ; Grapheme_Base # Sm       LONG DIVISION
+27D0..27E5    ; Grapheme_Base # Sm  [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6          ; Grapheme_Base # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Grapheme_Base # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Grapheme_Base # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Grapheme_Base # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Grapheme_Base # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Grapheme_Base # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF    ; Grapheme_Base # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982    ; Grapheme_Base # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983          ; Grapheme_Base # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Grapheme_Base # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Grapheme_Base # Ps       LEFT WHITE PARENTHESIS
+2986          ; Grapheme_Base # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Grapheme_Base # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Grapheme_Base # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Grapheme_Base # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Grapheme_Base # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Grapheme_Base # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Grapheme_Base # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Grapheme_Base # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Grapheme_Base # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Grapheme_Base # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Grapheme_Base # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Grapheme_Base # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Grapheme_Base # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7    ; Grapheme_Base # Sm  [63] DOTTED FENCE..BLACK HOURGLASS
+29D8          ; Grapheme_Base # Ps       LEFT WIGGLY FENCE
+29D9          ; Grapheme_Base # Pe       RIGHT WIGGLY FENCE
+29DA          ; Grapheme_Base # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Grapheme_Base # Pe       RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB    ; Grapheme_Base # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC          ; Grapheme_Base # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Grapheme_Base # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF    ; Grapheme_Base # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F    ; Grapheme_Base # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44    ; Grapheme_Base # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46    ; Grapheme_Base # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C    ; Grapheme_Base # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B50..2B59    ; Grapheme_Base # So  [10] WHITE MEDIUM STAR..HEAVY CIRCLED SALTIRE
+2C00..2C2E    ; Grapheme_Base # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Grapheme_Base # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C60..2C7C    ; Grapheme_Base # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; Grapheme_Base # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2CE4    ; Grapheme_Base # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CE5..2CEA    ; Grapheme_Base # So   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE    ; Grapheme_Base # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF9..2CFC    ; Grapheme_Base # Po   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD          ; Grapheme_Base # No       COPTIC FRACTION ONE HALF
+2CFE..2CFF    ; Grapheme_Base # Po   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+2D00..2D25    ; Grapheme_Base # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D30..2D65    ; Grapheme_Base # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; Grapheme_Base # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96    ; Grapheme_Base # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2E00..2E01    ; Grapheme_Base # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02          ; Grapheme_Base # Pi       LEFT SUBSTITUTION BRACKET
+2E03          ; Grapheme_Base # Pf       RIGHT SUBSTITUTION BRACKET
+2E04          ; Grapheme_Base # Pi       LEFT DOTTED SUBSTITUTION BRACKET
+2E05          ; Grapheme_Base # Pf       RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08    ; Grapheme_Base # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09          ; Grapheme_Base # Pi       LEFT TRANSPOSITION BRACKET
+2E0A          ; Grapheme_Base # Pf       RIGHT TRANSPOSITION BRACKET
+2E0B          ; Grapheme_Base # Po       RAISED SQUARE
+2E0C          ; Grapheme_Base # Pi       LEFT RAISED OMISSION BRACKET
+2E0D          ; Grapheme_Base # Pf       RIGHT RAISED OMISSION BRACKET
+2E0E..2E16    ; Grapheme_Base # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17          ; Grapheme_Base # Pd       DOUBLE OBLIQUE HYPHEN
+2E18..2E19    ; Grapheme_Base # Po   [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A          ; Grapheme_Base # Pd       HYPHEN WITH DIAERESIS
+2E1B          ; Grapheme_Base # Po       TILDE WITH RING ABOVE
+2E1C          ; Grapheme_Base # Pi       LEFT LOW PARAPHRASE BRACKET
+2E1D          ; Grapheme_Base # Pf       RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F    ; Grapheme_Base # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20          ; Grapheme_Base # Pi       LEFT VERTICAL BAR WITH QUILL
+2E21          ; Grapheme_Base # Pf       RIGHT VERTICAL BAR WITH QUILL
+2E22          ; Grapheme_Base # Ps       TOP LEFT HALF BRACKET
+2E23          ; Grapheme_Base # Pe       TOP RIGHT HALF BRACKET
+2E24          ; Grapheme_Base # Ps       BOTTOM LEFT HALF BRACKET
+2E25          ; Grapheme_Base # Pe       BOTTOM RIGHT HALF BRACKET
+2E26          ; Grapheme_Base # Ps       LEFT SIDEWAYS U BRACKET
+2E27          ; Grapheme_Base # Pe       RIGHT SIDEWAYS U BRACKET
+2E28          ; Grapheme_Base # Ps       LEFT DOUBLE PARENTHESIS
+2E29          ; Grapheme_Base # Pe       RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E    ; Grapheme_Base # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F          ; Grapheme_Base # Lm       VERTICAL TILDE
+2E30..2E31    ; Grapheme_Base # Po   [2] RING POINT..WORD SEPARATOR MIDDLE DOT
+2E80..2E99    ; Grapheme_Base # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3    ; Grapheme_Base # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5    ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+2FF0..2FFB    ; Grapheme_Base # So  [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000          ; Grapheme_Base # Zs       IDEOGRAPHIC SPACE
+3001..3003    ; Grapheme_Base # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004          ; Grapheme_Base # So       JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005          ; Grapheme_Base # Lm       IDEOGRAPHIC ITERATION MARK
+3006          ; Grapheme_Base # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; Grapheme_Base # Nl       IDEOGRAPHIC NUMBER ZERO
+3008          ; Grapheme_Base # Ps       LEFT ANGLE BRACKET
+3009          ; Grapheme_Base # Pe       RIGHT ANGLE BRACKET
+300A          ; Grapheme_Base # Ps       LEFT DOUBLE ANGLE BRACKET
+300B          ; Grapheme_Base # Pe       RIGHT DOUBLE ANGLE BRACKET
+300C          ; Grapheme_Base # Ps       LEFT CORNER BRACKET
+300D          ; Grapheme_Base # Pe       RIGHT CORNER BRACKET
+300E          ; Grapheme_Base # Ps       LEFT WHITE CORNER BRACKET
+300F          ; Grapheme_Base # Pe       RIGHT WHITE CORNER BRACKET
+3010          ; Grapheme_Base # Ps       LEFT BLACK LENTICULAR BRACKET
+3011          ; Grapheme_Base # Pe       RIGHT BLACK LENTICULAR BRACKET
+3012..3013    ; Grapheme_Base # So   [2] POSTAL MARK..GETA MARK
+3014          ; Grapheme_Base # Ps       LEFT TORTOISE SHELL BRACKET
+3015          ; Grapheme_Base # Pe       RIGHT TORTOISE SHELL BRACKET
+3016          ; Grapheme_Base # Ps       LEFT WHITE LENTICULAR BRACKET
+3017          ; Grapheme_Base # Pe       RIGHT WHITE LENTICULAR BRACKET
+3018          ; Grapheme_Base # Ps       LEFT WHITE TORTOISE SHELL BRACKET
+3019          ; Grapheme_Base # Pe       RIGHT WHITE TORTOISE SHELL BRACKET
+301A          ; Grapheme_Base # Ps       LEFT WHITE SQUARE BRACKET
+301B          ; Grapheme_Base # Pe       RIGHT WHITE SQUARE BRACKET
+301C          ; Grapheme_Base # Pd       WAVE DASH
+301D          ; Grapheme_Base # Ps       REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F    ; Grapheme_Base # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020          ; Grapheme_Base # So       POSTAL MARK FACE
+3021..3029    ; Grapheme_Base # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3030          ; Grapheme_Base # Pd       WAVY DASH
+3031..3035    ; Grapheme_Base # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037    ; Grapheme_Base # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038..303A    ; Grapheme_Base # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; Grapheme_Base # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+303C          ; Grapheme_Base # Lo       MASU MARK
+303D          ; Grapheme_Base # Po       PART ALTERNATION MARK
+303E..303F    ; Grapheme_Base # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+3041..3096    ; Grapheme_Base # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309B..309C    ; Grapheme_Base # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; Grapheme_Base # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; Grapheme_Base # Lo       HIRAGANA DIGRAPH YORI
+30A0          ; Grapheme_Base # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1..30FA    ; Grapheme_Base # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FB          ; Grapheme_Base # Po       KATAKANA MIDDLE DOT
+30FC..30FE    ; Grapheme_Base # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; Grapheme_Base # Lo       KATAKANA DIGRAPH KOTO
+3105..312D    ; Grapheme_Base # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3131..318E    ; Grapheme_Base # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3190..3191    ; Grapheme_Base # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195    ; Grapheme_Base # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F    ; Grapheme_Base # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31A0..31B7    ; Grapheme_Base # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31C0..31E3    ; Grapheme_Base # So  [36] CJK STROKE T..CJK STROKE Q
+31F0..31FF    ; Grapheme_Base # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3200..321E    ; Grapheme_Base # So  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229    ; Grapheme_Base # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3250    ; Grapheme_Base # So  [39] PARENTHESIZED IDEOGRAPH MOON..PARTNERSHIP SIGN
+3251..325F    ; Grapheme_Base # No  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327F    ; Grapheme_Base # So  [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+3280..3289    ; Grapheme_Base # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0    ; Grapheme_Base # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF    ; Grapheme_Base # No  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32FE    ; Grapheme_Base # So  [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO
+3300..33FF    ; Grapheme_Base # So [256] SQUARE APAATO..SQUARE GAL
+3400..4DB5    ; Grapheme_Base # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4DC0..4DFF    ; Grapheme_Base # So  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FCB    ; Grapheme_Base # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+A000..A014    ; Grapheme_Base # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; Grapheme_Base # Lm       YI SYLLABLE WU
+A016..A48C    ; Grapheme_Base # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6    ; Grapheme_Base # So  [55] YI RADICAL QOT..YI RADICAL KE
+A4D0..A4F7    ; Grapheme_Base # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; Grapheme_Base # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF    ; Grapheme_Base # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A500..A60B    ; Grapheme_Base # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; Grapheme_Base # Lm       VAI SYLLABLE LENGTHENER
+A60D..A60F    ; Grapheme_Base # Po   [3] VAI COMMA..VAI QUESTION MARK
+A610..A61F    ; Grapheme_Base # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629    ; Grapheme_Base # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B    ; Grapheme_Base # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A65F    ; Grapheme_Base # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; Grapheme_Base # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; Grapheme_Base # Lo       CYRILLIC LETTER MULTIOCULAR O
+A673          ; Grapheme_Base # Po       SLAVONIC ASTERISK
+A67E          ; Grapheme_Base # Po       CYRILLIC KAVYKA
+A67F          ; Grapheme_Base # Lm       CYRILLIC PAYEROK
+A680..A697    ; Grapheme_Base # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A6A0..A6E5    ; Grapheme_Base # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; Grapheme_Base # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F2..A6F7    ; Grapheme_Base # Po   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+A700..A716    ; Grapheme_Base # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F    ; Grapheme_Base # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721    ; Grapheme_Base # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A722..A76F    ; Grapheme_Base # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; Grapheme_Base # Lm       MODIFIER LETTER US
+A771..A787    ; Grapheme_Base # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788          ; Grapheme_Base # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A    ; Grapheme_Base # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A78B..A78C    ; Grapheme_Base # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A801    ; Grapheme_Base # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805    ; Grapheme_Base # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A    ; Grapheme_Base # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822    ; Grapheme_Base # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824    ; Grapheme_Base # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A827          ; Grapheme_Base # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B    ; Grapheme_Base # So   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A830..A835    ; Grapheme_Base # No   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837    ; Grapheme_Base # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838          ; Grapheme_Base # Sc       NORTH INDIC RUPEE MARK
+A839          ; Grapheme_Base # So       NORTH INDIC QUANTITY MARK
+A840..A873    ; Grapheme_Base # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A877    ; Grapheme_Base # Po   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+A880..A881    ; Grapheme_Base # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3    ; Grapheme_Base # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3    ; Grapheme_Base # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8CE..A8CF    ; Grapheme_Base # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9    ; Grapheme_Base # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8F2..A8F7    ; Grapheme_Base # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA    ; Grapheme_Base # Po   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB          ; Grapheme_Base # Lo       DEVANAGARI HEADSTROKE
+A900..A909    ; Grapheme_Base # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925    ; Grapheme_Base # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A92E..A92F    ; Grapheme_Base # Po   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+A930..A946    ; Grapheme_Base # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A952..A953    ; Grapheme_Base # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F          ; Grapheme_Base # Po       REJANG SECTION MARK
+A960..A97C    ; Grapheme_Base # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A983          ; Grapheme_Base # Mc       JAVANESE SIGN WIGNYAN
+A984..A9B2    ; Grapheme_Base # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B4..A9B5    ; Grapheme_Base # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9BA..A9BB    ; Grapheme_Base # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BD..A9C0    ; Grapheme_Base # Mc   [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
+A9C1..A9CD    ; Grapheme_Base # Po  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9CF          ; Grapheme_Base # Lm       JAVANESE PANGRANGKEP
+A9D0..A9D9    ; Grapheme_Base # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF    ; Grapheme_Base # Po   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+AA00..AA28    ; Grapheme_Base # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA2F..AA30    ; Grapheme_Base # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA33..AA34    ; Grapheme_Base # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA40..AA42    ; Grapheme_Base # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B    ; Grapheme_Base # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4D          ; Grapheme_Base # Mc       CHAM CONSONANT SIGN FINAL H
+AA50..AA59    ; Grapheme_Base # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C..AA5F    ; Grapheme_Base # Po   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+AA60..AA6F    ; Grapheme_Base # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; Grapheme_Base # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; Grapheme_Base # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79    ; Grapheme_Base # So   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A          ; Grapheme_Base # Lo       MYANMAR LETTER AITON RA
+AA7B          ; Grapheme_Base # Mc       MYANMAR SIGN PAO KAREN TONE
+AA80..AAAF    ; Grapheme_Base # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB1          ; Grapheme_Base # Lo       TAI VIET VOWEL AA
+AAB5..AAB6    ; Grapheme_Base # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD    ; Grapheme_Base # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0          ; Grapheme_Base # Lo       TAI VIET TONE MAI NUENG
+AAC2          ; Grapheme_Base # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; Grapheme_Base # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; Grapheme_Base # Lm       TAI VIET SYMBOL SAM
+AADE..AADF    ; Grapheme_Base # Po   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+ABC0..ABE2    ; Grapheme_Base # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE6..ABE7    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE9..ABEA    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB          ; Grapheme_Base # Po       MEETEI MAYEK CHEIKHEI
+ABEC          ; Grapheme_Base # Mc       MEETEI MAYEK LUM IYEK
+ABF0..ABF9    ; Grapheme_Base # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3    ; Grapheme_Base # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; Grapheme_Base # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; Grapheme_Base # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA2D    ; Grapheme_Base # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; Grapheme_Base # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; Grapheme_Base # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; Grapheme_Base # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Grapheme_Base # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; Grapheme_Base # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28    ; Grapheme_Base # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29          ; Grapheme_Base # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36    ; Grapheme_Base # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; Grapheme_Base # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; Grapheme_Base # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; Grapheme_Base # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; Grapheme_Base # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; Grapheme_Base # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; Grapheme_Base # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E          ; Grapheme_Base # Ps       ORNATE LEFT PARENTHESIS
+FD3F          ; Grapheme_Base # Pe       ORNATE RIGHT PARENTHESIS
+FD50..FD8F    ; Grapheme_Base # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; Grapheme_Base # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; Grapheme_Base # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC          ; Grapheme_Base # Sc       RIAL SIGN
+FDFD          ; Grapheme_Base # So       ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE10..FE16    ; Grapheme_Base # Po   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19          ; Grapheme_Base # Po       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30          ; Grapheme_Base # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32    ; Grapheme_Base # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34    ; Grapheme_Base # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46    ; Grapheme_Base # Po   [2] SESAME DOT..WHITE SESAME DOT
+FE47          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C    ; Grapheme_Base # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F    ; Grapheme_Base # Pc   [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52    ; Grapheme_Base # Po   [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57    ; Grapheme_Base # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58          ; Grapheme_Base # Pd       SMALL EM DASH
+FE59          ; Grapheme_Base # Ps       SMALL LEFT PARENTHESIS
+FE5A          ; Grapheme_Base # Pe       SMALL RIGHT PARENTHESIS
+FE5B          ; Grapheme_Base # Ps       SMALL LEFT CURLY BRACKET
+FE5C          ; Grapheme_Base # Pe       SMALL RIGHT CURLY BRACKET
+FE5D          ; Grapheme_Base # Ps       SMALL LEFT TORTOISE SHELL BRACKET
+FE5E          ; Grapheme_Base # Pe       SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61    ; Grapheme_Base # Po   [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62          ; Grapheme_Base # Sm       SMALL PLUS SIGN
+FE63          ; Grapheme_Base # Pd       SMALL HYPHEN-MINUS
+FE64..FE66    ; Grapheme_Base # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68          ; Grapheme_Base # Po       SMALL REVERSE SOLIDUS
+FE69          ; Grapheme_Base # Sc       SMALL DOLLAR SIGN
+FE6A..FE6B    ; Grapheme_Base # Po   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE74    ; Grapheme_Base # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; Grapheme_Base # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01..FF03    ; Grapheme_Base # Po   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04          ; Grapheme_Base # Sc       FULLWIDTH DOLLAR SIGN
+FF05..FF07    ; Grapheme_Base # Po   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08          ; Grapheme_Base # Ps       FULLWIDTH LEFT PARENTHESIS
+FF09          ; Grapheme_Base # Pe       FULLWIDTH RIGHT PARENTHESIS
+FF0A          ; Grapheme_Base # Po       FULLWIDTH ASTERISK
+FF0B          ; Grapheme_Base # Sm       FULLWIDTH PLUS SIGN
+FF0C          ; Grapheme_Base # Po       FULLWIDTH COMMA
+FF0D          ; Grapheme_Base # Pd       FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F    ; Grapheme_Base # Po   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19    ; Grapheme_Base # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B    ; Grapheme_Base # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E    ; Grapheme_Base # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20    ; Grapheme_Base # Po   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A    ; Grapheme_Base # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B          ; Grapheme_Base # Ps       FULLWIDTH LEFT SQUARE BRACKET
+FF3C          ; Grapheme_Base # Po       FULLWIDTH REVERSE SOLIDUS
+FF3D          ; Grapheme_Base # Pe       FULLWIDTH RIGHT SQUARE BRACKET
+FF3E          ; Grapheme_Base # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF3F          ; Grapheme_Base # Pc       FULLWIDTH LOW LINE
+FF40          ; Grapheme_Base # Sk       FULLWIDTH GRAVE ACCENT
+FF41..FF5A    ; Grapheme_Base # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B          ; Grapheme_Base # Ps       FULLWIDTH LEFT CURLY BRACKET
+FF5C          ; Grapheme_Base # Sm       FULLWIDTH VERTICAL LINE
+FF5D          ; Grapheme_Base # Pe       FULLWIDTH RIGHT CURLY BRACKET
+FF5E          ; Grapheme_Base # Sm       FULLWIDTH TILDE
+FF5F          ; Grapheme_Base # Ps       FULLWIDTH LEFT WHITE PARENTHESIS
+FF60          ; Grapheme_Base # Pe       FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61          ; Grapheme_Base # Po       HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62          ; Grapheme_Base # Ps       HALFWIDTH LEFT CORNER BRACKET
+FF63          ; Grapheme_Base # Pe       HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65    ; Grapheme_Base # Po   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F    ; Grapheme_Base # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70          ; Grapheme_Base # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D    ; Grapheme_Base # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FFA0..FFBE    ; Grapheme_Base # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; Grapheme_Base # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1    ; Grapheme_Base # Sc   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2          ; Grapheme_Base # Sm       FULLWIDTH NOT SIGN
+FFE3          ; Grapheme_Base # Sk       FULLWIDTH MACRON
+FFE4          ; Grapheme_Base # So       FULLWIDTH BROKEN BAR
+FFE5..FFE6    ; Grapheme_Base # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8          ; Grapheme_Base # So       HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC    ; Grapheme_Base # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE    ; Grapheme_Base # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFFC..FFFD    ; Grapheme_Base # So   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10000..1000B  ; Grapheme_Base # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; Grapheme_Base # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; Grapheme_Base # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; Grapheme_Base # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; Grapheme_Base # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; Grapheme_Base # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; Grapheme_Base # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10100..10101  ; Grapheme_Base # Po   [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
+10102         ; Grapheme_Base # So       AEGEAN CHECK MARK
+10107..10133  ; Grapheme_Base # No  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F  ; Grapheme_Base # So   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10140..10174  ; Grapheme_Base # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178  ; Grapheme_Base # No   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189  ; Grapheme_Base # So  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A         ; Grapheme_Base # No       GREEK ZERO SIGN
+10190..1019B  ; Grapheme_Base # So  [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+101D0..101FC  ; Grapheme_Base # So  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+10280..1029C  ; Grapheme_Base # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; Grapheme_Base # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; Grapheme_Base # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10320..10323  ; Grapheme_Base # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+10330..10340  ; Grapheme_Base # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; Grapheme_Base # Nl       GOTHIC LETTER NINETY
+10342..10349  ; Grapheme_Base # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; Grapheme_Base # Nl       GOTHIC LETTER NINE HUNDRED
+10380..1039D  ; Grapheme_Base # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F         ; Grapheme_Base # Po       UGARITIC WORD DIVIDER
+103A0..103C3  ; Grapheme_Base # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; Grapheme_Base # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0         ; Grapheme_Base # Po       OLD PERSIAN WORD DIVIDER
+103D1..103D5  ; Grapheme_Base # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F  ; Grapheme_Base # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D  ; Grapheme_Base # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9  ; Grapheme_Base # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+10800..10805  ; Grapheme_Base # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; Grapheme_Base # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; Grapheme_Base # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; Grapheme_Base # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; Grapheme_Base # Lo       CYPRIOT SYLLABLE ZA
+1083F..10855  ; Grapheme_Base # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10857         ; Grapheme_Base # Po       IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F  ; Grapheme_Base # No   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10900..10915  ; Grapheme_Base # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B  ; Grapheme_Base # No   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F         ; Grapheme_Base # Po       PHOENICIAN WORD SEPARATOR
+10920..10939  ; Grapheme_Base # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F         ; Grapheme_Base # Po       LYDIAN TRIANGULAR MARK
+10A00         ; Grapheme_Base # Lo       KHAROSHTHI LETTER A
+10A10..10A13  ; Grapheme_Base # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; Grapheme_Base # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; Grapheme_Base # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A40..10A47  ; Grapheme_Base # No   [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A50..10A58  ; Grapheme_Base # Po   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+10A60..10A7C  ; Grapheme_Base # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E  ; Grapheme_Base # No   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F         ; Grapheme_Base # Po       OLD SOUTH ARABIAN NUMERIC INDICATOR
+10B00..10B35  ; Grapheme_Base # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F  ; Grapheme_Base # Po   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B40..10B55  ; Grapheme_Base # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F  ; Grapheme_Base # No   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B60..10B72  ; Grapheme_Base # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F  ; Grapheme_Base # No   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10C00..10C48  ; Grapheme_Base # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10E60..10E7E  ; Grapheme_Base # No  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+11082         ; Grapheme_Base # Mc       KAITHI SIGN VISARGA
+11083..110AF  ; Grapheme_Base # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2  ; Grapheme_Base # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B7..110B8  ; Grapheme_Base # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110BB..110BC  ; Grapheme_Base # Po   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BE..110C1  ; Grapheme_Base # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+12000..1236E  ; Grapheme_Base # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; Grapheme_Base # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+12470..12473  ; Grapheme_Base # Po   [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+13000..1342E  ; Grapheme_Base # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+1D000..1D0F5  ; Grapheme_Base # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126  ; Grapheme_Base # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164  ; Grapheme_Base # So  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D166         ; Grapheme_Base # Mc       MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C  ; Grapheme_Base # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D         ; Grapheme_Base # Mc       MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D183..1D184  ; Grapheme_Base # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9  ; Grapheme_Base # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1DD  ; Grapheme_Base # So  [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D200..1D241  ; Grapheme_Base # So  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D245         ; Grapheme_Base # So       GREEK MUSICAL LEIMMA
+1D300..1D356  ; Grapheme_Base # So  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D371  ; Grapheme_Base # No  [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1D400..1D454  ; Grapheme_Base # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Grapheme_Base # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Grapheme_Base # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Grapheme_Base # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Grapheme_Base # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Grapheme_Base # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Grapheme_Base # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Grapheme_Base # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Grapheme_Base # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Grapheme_Base # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Grapheme_Base # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Grapheme_Base # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Grapheme_Base # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Grapheme_Base # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Grapheme_Base # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Grapheme_Base # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Grapheme_Base # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Grapheme_Base # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Grapheme_Base # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1         ; Grapheme_Base # Sm       MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB         ; Grapheme_Base # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA  ; Grapheme_Base # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB         ; Grapheme_Base # Sm       MATHEMATICAL ITALIC NABLA
+1D6FC..1D714  ; Grapheme_Base # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715         ; Grapheme_Base # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734  ; Grapheme_Base # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735         ; Grapheme_Base # Sm       MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F         ; Grapheme_Base # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E  ; Grapheme_Base # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788  ; Grapheme_Base # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8  ; Grapheme_Base # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2  ; Grapheme_Base # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB  ; Grapheme_Base # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Grapheme_Base # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1F000..1F02B  ; Grapheme_Base # So  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F030..1F093  ; Grapheme_Base # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F100..1F10A  ; Grapheme_Base # No  [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E  ; Grapheme_Base # So  [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F131         ; Grapheme_Base # So       SQUARED LATIN CAPITAL LETTER B
+1F13D         ; Grapheme_Base # So       SQUARED LATIN CAPITAL LETTER N
+1F13F         ; Grapheme_Base # So       SQUARED LATIN CAPITAL LETTER P
+1F142         ; Grapheme_Base # So       SQUARED LATIN CAPITAL LETTER S
+1F146         ; Grapheme_Base # So       SQUARED LATIN CAPITAL LETTER W
+1F14A..1F14E  ; Grapheme_Base # So   [5] SQUARED HV..SQUARED PPV
+1F157         ; Grapheme_Base # So       NEGATIVE CIRCLED LATIN CAPITAL LETTER H
+1F15F         ; Grapheme_Base # So       NEGATIVE CIRCLED LATIN CAPITAL LETTER P
+1F179         ; Grapheme_Base # So       NEGATIVE SQUARED LATIN CAPITAL LETTER J
+1F17B..1F17C  ; Grapheme_Base # So   [2] NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M
+1F17F         ; Grapheme_Base # So       NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F18A..1F18D  ; Grapheme_Base # So   [4] CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA
+1F190         ; Grapheme_Base # So       SQUARE DJ
+1F200         ; Grapheme_Base # So       SQUARE HIRAGANA HOKA
+1F210..1F231  ; Grapheme_Base # So  [34] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F240..1F248  ; Grapheme_Base # So   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+20000..2A6D6  ; Grapheme_Base # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; Grapheme_Base # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 105958
+
+# ================================================
+
+# Derived Property: Grapheme_Link (deprecated)
+#  Generated from: Canonical_Combining_Class=Virama
+#  Use Canonical_Combining_Class=Virama directly instead
+
+094D          ; Grapheme_Link # Mn       DEVANAGARI SIGN VIRAMA
+09CD          ; Grapheme_Link # Mn       BENGALI SIGN VIRAMA
+0A4D          ; Grapheme_Link # Mn       GURMUKHI SIGN VIRAMA
+0ACD          ; Grapheme_Link # Mn       GUJARATI SIGN VIRAMA
+0B4D          ; Grapheme_Link # Mn       ORIYA SIGN VIRAMA
+0BCD          ; Grapheme_Link # Mn       TAMIL SIGN VIRAMA
+0C4D          ; Grapheme_Link # Mn       TELUGU SIGN VIRAMA
+0CCD          ; Grapheme_Link # Mn       KANNADA SIGN VIRAMA
+0D4D          ; Grapheme_Link # Mn       MALAYALAM SIGN VIRAMA
+0DCA          ; Grapheme_Link # Mn       SINHALA SIGN AL-LAKUNA
+0E3A          ; Grapheme_Link # Mn       THAI CHARACTER PHINTHU
+0F84          ; Grapheme_Link # Mn       TIBETAN MARK HALANTA
+1039..103A    ; Grapheme_Link # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+1714          ; Grapheme_Link # Mn       TAGALOG SIGN VIRAMA
+1734          ; Grapheme_Link # Mn       HANUNOO SIGN PAMUDPOD
+17D2          ; Grapheme_Link # Mn       KHMER SIGN COENG
+1A60          ; Grapheme_Link # Mn       TAI THAM SIGN SAKOT
+1B44          ; Grapheme_Link # Mc       BALINESE ADEG ADEG
+1BAA          ; Grapheme_Link # Mc       SUNDANESE SIGN PAMAAEH
+A806          ; Grapheme_Link # Mn       SYLOTI NAGRI SIGN HASANTA
+A8C4          ; Grapheme_Link # Mn       SAURASHTRA SIGN VIRAMA
+A953          ; Grapheme_Link # Mc       REJANG VIRAMA
+A9C0          ; Grapheme_Link # Mc       JAVANESE PANGKON
+ABED          ; Grapheme_Link # Mn       MEETEI MAYEK APUN IYEK
+10A3F         ; Grapheme_Link # Mn       KHAROSHTHI VIRAMA
+110B9         ; Grapheme_Link # Mn       KAITHI SIGN VIRAMA
+
+# Total code points: 27
+
+# EOF
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/PropList.txt b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/PropList.txt
new file mode 100644 (file)
index 0000000..39cb741
--- /dev/null
@@ -0,0 +1,1303 @@
+# PropList-5.2.0.txt
+# Date: 2009-08-22, 04:58:40 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2009 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# It is ok to redistribute this file "solely for informational 
+# purposes in the creation of products supporting the Unicode Standard".
+# We don't nee to add a Boost License to this file: boostinspect:nolicense.
+
+# ================================================
+
+0009..000D    ; White_Space # Cc   [5] <control-0009>..<control-000D>
+0020          ; White_Space # Zs       SPACE
+0085          ; White_Space # Cc       <control-0085>
+00A0          ; White_Space # Zs       NO-BREAK SPACE
+1680          ; White_Space # Zs       OGHAM SPACE MARK
+180E          ; White_Space # Zs       MONGOLIAN VOWEL SEPARATOR
+2000..200A    ; White_Space # Zs  [11] EN QUAD..HAIR SPACE
+2028          ; White_Space # Zl       LINE SEPARATOR
+2029          ; White_Space # Zp       PARAGRAPH SEPARATOR
+202F          ; White_Space # Zs       NARROW NO-BREAK SPACE
+205F          ; White_Space # Zs       MEDIUM MATHEMATICAL SPACE
+3000          ; White_Space # Zs       IDEOGRAPHIC SPACE
+
+# Total code points: 26
+
+# ================================================
+
+200E..200F    ; Bidi_Control # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+202A..202E    ; Bidi_Control # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+
+# Total code points: 7
+
+# ================================================
+
+200C..200D    ; Join_Control # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+
+# Total code points: 2
+
+# ================================================
+
+002D          ; Dash # Pd       HYPHEN-MINUS
+058A          ; Dash # Pd       ARMENIAN HYPHEN
+05BE          ; Dash # Pd       HEBREW PUNCTUATION MAQAF
+1400          ; Dash # Pd       CANADIAN SYLLABICS HYPHEN
+1806          ; Dash # Pd       MONGOLIAN TODO SOFT HYPHEN
+2010..2015    ; Dash # Pd   [6] HYPHEN..HORIZONTAL BAR
+2053          ; Dash # Po       SWUNG DASH
+207B          ; Dash # Sm       SUPERSCRIPT MINUS
+208B          ; Dash # Sm       SUBSCRIPT MINUS
+2212          ; Dash # Sm       MINUS SIGN
+2E17          ; Dash # Pd       DOUBLE OBLIQUE HYPHEN
+2E1A          ; Dash # Pd       HYPHEN WITH DIAERESIS
+301C          ; Dash # Pd       WAVE DASH
+3030          ; Dash # Pd       WAVY DASH
+30A0          ; Dash # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN
+FE31..FE32    ; Dash # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE58          ; Dash # Pd       SMALL EM DASH
+FE63          ; Dash # Pd       SMALL HYPHEN-MINUS
+FF0D          ; Dash # Pd       FULLWIDTH HYPHEN-MINUS
+
+# Total code points: 25
+
+# ================================================
+
+002D          ; Hyphen # Pd       HYPHEN-MINUS
+00AD          ; Hyphen # Cf       SOFT HYPHEN
+058A          ; Hyphen # Pd       ARMENIAN HYPHEN
+1806          ; Hyphen # Pd       MONGOLIAN TODO SOFT HYPHEN
+2010..2011    ; Hyphen # Pd   [2] HYPHEN..NON-BREAKING HYPHEN
+2E17          ; Hyphen # Pd       DOUBLE OBLIQUE HYPHEN
+30FB          ; Hyphen # Po       KATAKANA MIDDLE DOT
+FE63          ; Hyphen # Pd       SMALL HYPHEN-MINUS
+FF0D          ; Hyphen # Pd       FULLWIDTH HYPHEN-MINUS
+FF65          ; Hyphen # Po       HALFWIDTH KATAKANA MIDDLE DOT
+
+# Total code points: 11
+
+# ================================================
+
+0022          ; Quotation_Mark # Po       QUOTATION MARK
+0027          ; Quotation_Mark # Po       APOSTROPHE
+00AB          ; Quotation_Mark # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB          ; Quotation_Mark # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2018          ; Quotation_Mark # Pi       LEFT SINGLE QUOTATION MARK
+2019          ; Quotation_Mark # Pf       RIGHT SINGLE QUOTATION MARK
+201A          ; Quotation_Mark # Ps       SINGLE LOW-9 QUOTATION MARK
+201B..201C    ; Quotation_Mark # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D          ; Quotation_Mark # Pf       RIGHT DOUBLE QUOTATION MARK
+201E          ; Quotation_Mark # Ps       DOUBLE LOW-9 QUOTATION MARK
+201F          ; Quotation_Mark # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2039          ; Quotation_Mark # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A          ; Quotation_Mark # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+300C          ; Quotation_Mark # Ps       LEFT CORNER BRACKET
+300D          ; Quotation_Mark # Pe       RIGHT CORNER BRACKET
+300E          ; Quotation_Mark # Ps       LEFT WHITE CORNER BRACKET
+300F          ; Quotation_Mark # Pe       RIGHT WHITE CORNER BRACKET
+301D          ; Quotation_Mark # Ps       REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F    ; Quotation_Mark # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+FE41          ; Quotation_Mark # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42          ; Quotation_Mark # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43          ; Quotation_Mark # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44          ; Quotation_Mark # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FF02          ; Quotation_Mark # Po       FULLWIDTH QUOTATION MARK
+FF07          ; Quotation_Mark # Po       FULLWIDTH APOSTROPHE
+FF62          ; Quotation_Mark # Ps       HALFWIDTH LEFT CORNER BRACKET
+FF63          ; Quotation_Mark # Pe       HALFWIDTH RIGHT CORNER BRACKET
+
+# Total code points: 29
+
+# ================================================
+
+0021          ; Terminal_Punctuation # Po       EXCLAMATION MARK
+002C          ; Terminal_Punctuation # Po       COMMA
+002E          ; Terminal_Punctuation # Po       FULL STOP
+003A..003B    ; Terminal_Punctuation # Po   [2] COLON..SEMICOLON
+003F          ; Terminal_Punctuation # Po       QUESTION MARK
+037E          ; Terminal_Punctuation # Po       GREEK QUESTION MARK
+0387          ; Terminal_Punctuation # Po       GREEK ANO TELEIA
+0589          ; Terminal_Punctuation # Po       ARMENIAN FULL STOP
+05C3          ; Terminal_Punctuation # Po       HEBREW PUNCTUATION SOF PASUQ
+060C          ; Terminal_Punctuation # Po       ARABIC COMMA
+061B          ; Terminal_Punctuation # Po       ARABIC SEMICOLON
+061F          ; Terminal_Punctuation # Po       ARABIC QUESTION MARK
+06D4          ; Terminal_Punctuation # Po       ARABIC FULL STOP
+0700..070A    ; Terminal_Punctuation # Po  [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
+070C          ; Terminal_Punctuation # Po       SYRIAC HARKLEAN METOBELUS
+07F8..07F9    ; Terminal_Punctuation # Po   [2] NKO COMMA..NKO EXCLAMATION MARK
+0830..083E    ; Terminal_Punctuation # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+0964..0965    ; Terminal_Punctuation # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0E5A..0E5B    ; Terminal_Punctuation # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0F08          ; Terminal_Punctuation # Po       TIBETAN MARK SBRUL SHAD
+0F0D..0F12    ; Terminal_Punctuation # Po   [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD
+104A..104B    ; Terminal_Punctuation # Po   [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1361..1368    ; Terminal_Punctuation # Po   [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+166D..166E    ; Terminal_Punctuation # Po   [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+16EB..16ED    ; Terminal_Punctuation # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+17D4..17D6    ; Terminal_Punctuation # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17DA          ; Terminal_Punctuation # Po       KHMER SIGN KOOMUUT
+1802..1805    ; Terminal_Punctuation # Po   [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS
+1808..1809    ; Terminal_Punctuation # Po   [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP
+1944..1945    ; Terminal_Punctuation # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1AA8..1AAB    ; Terminal_Punctuation # Po   [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
+1B5A..1B5B    ; Terminal_Punctuation # Po   [2] BALINESE PANTI..BALINESE PAMADA
+1B5D..1B5F    ; Terminal_Punctuation # Po   [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN
+1C3B..1C3F    ; Terminal_Punctuation # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C7E..1C7F    ; Terminal_Punctuation # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+203C..203D    ; Terminal_Punctuation # Po   [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049    ; Terminal_Punctuation # Po   [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2E2E          ; Terminal_Punctuation # Po       REVERSED QUESTION MARK
+3001..3002    ; Terminal_Punctuation # Po   [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
+A4FE..A4FF    ; Terminal_Punctuation # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A60D..A60F    ; Terminal_Punctuation # Po   [3] VAI COMMA..VAI QUESTION MARK
+A6F3..A6F7    ; Terminal_Punctuation # Po   [5] BAMUM FULL STOP..BAMUM QUESTION MARK
+A876..A877    ; Terminal_Punctuation # Po   [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
+A8CE..A8CF    ; Terminal_Punctuation # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A92F          ; Terminal_Punctuation # Po       KAYAH LI SIGN SHYA
+A9C7..A9C9    ; Terminal_Punctuation # Po   [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI
+AA5D..AA5F    ; Terminal_Punctuation # Po   [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+AADF          ; Terminal_Punctuation # Po       TAI VIET SYMBOL KOI KOI
+ABEB          ; Terminal_Punctuation # Po       MEETEI MAYEK CHEIKHEI
+FE50..FE52    ; Terminal_Punctuation # Po   [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57    ; Terminal_Punctuation # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FF01          ; Terminal_Punctuation # Po       FULLWIDTH EXCLAMATION MARK
+FF0C          ; Terminal_Punctuation # Po       FULLWIDTH COMMA
+FF0E          ; Terminal_Punctuation # Po       FULLWIDTH FULL STOP
+FF1A..FF1B    ; Terminal_Punctuation # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1F          ; Terminal_Punctuation # Po       FULLWIDTH QUESTION MARK
+FF61          ; Terminal_Punctuation # Po       HALFWIDTH IDEOGRAPHIC FULL STOP
+FF64          ; Terminal_Punctuation # Po       HALFWIDTH IDEOGRAPHIC COMMA
+1039F         ; Terminal_Punctuation # Po       UGARITIC WORD DIVIDER
+103D0         ; Terminal_Punctuation # Po       OLD PERSIAN WORD DIVIDER
+10857         ; Terminal_Punctuation # Po       IMPERIAL ARAMAIC SECTION SIGN
+1091F         ; Terminal_Punctuation # Po       PHOENICIAN WORD SEPARATOR
+10B3A..10B3F  ; Terminal_Punctuation # Po   [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+110BE..110C1  ; Terminal_Punctuation # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+12470..12473  ; Terminal_Punctuation # Po   [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+
+# Total code points: 161
+
+# ================================================
+
+005E          ; Other_Math # Sk       CIRCUMFLEX ACCENT
+03D0..03D2    ; Other_Math # L&   [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5          ; Other_Math # L&       GREEK PHI SYMBOL
+03F0..03F1    ; Other_Math # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5    ; Other_Math # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+2016          ; Other_Math # Po       DOUBLE VERTICAL LINE
+2032..2034    ; Other_Math # Po   [3] PRIME..TRIPLE PRIME
+2040          ; Other_Math # Pc       CHARACTER TIE
+2061..2064    ; Other_Math # Cf   [4] FUNCTION APPLICATION..INVISIBLE PLUS
+207D          ; Other_Math # Ps       SUPERSCRIPT LEFT PARENTHESIS
+207E          ; Other_Math # Pe       SUPERSCRIPT RIGHT PARENTHESIS
+208D          ; Other_Math # Ps       SUBSCRIPT LEFT PARENTHESIS
+208E          ; Other_Math # Pe       SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC    ; Other_Math # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; Other_Math # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6    ; Other_Math # Mn   [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20EB..20EF    ; Other_Math # Mn   [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
+2102          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL C
+210A..2113    ; Other_Math # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL N
+2119..211D    ; Other_Math # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL Z
+2128          ; Other_Math # L&       BLACK-LETTER CAPITAL Z
+2129          ; Other_Math # So       TURNED GREEK SMALL LETTER IOTA
+212C..212D    ; Other_Math # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131    ; Other_Math # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134    ; Other_Math # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138    ; Other_Math # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F    ; Other_Math # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149    ; Other_Math # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2195..2199    ; Other_Math # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219C..219F    ; Other_Math # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A1..21A2    ; Other_Math # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A4..21A5    ; Other_Math # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A7          ; Other_Math # So       DOWNWARDS ARROW FROM BAR
+21A9..21AD    ; Other_Math # So   [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW
+21B0..21B1    ; Other_Math # So   [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS
+21B6..21B7    ; Other_Math # So   [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21BC..21CD    ; Other_Math # So  [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Other_Math # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D3          ; Other_Math # So       DOWNWARDS DOUBLE ARROW
+21D5..21DB    ; Other_Math # So   [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW
+21DD          ; Other_Math # So       RIGHTWARDS SQUIGGLE ARROW
+21E4..21E5    ; Other_Math # So   [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR
+23B4..23B5    ; Other_Math # So   [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET
+23B7          ; Other_Math # So       RADICAL SYMBOL BOTTOM
+23D0          ; Other_Math # So       VERTICAL LINE EXTENSION
+23E2          ; Other_Math # So       WHITE TRAPEZIUM
+25A0..25A1    ; Other_Math # So   [2] BLACK SQUARE..WHITE SQUARE
+25AE..25B6    ; Other_Math # So   [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE
+25BC..25C0    ; Other_Math # So   [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C6..25C7    ; Other_Math # So   [2] BLACK DIAMOND..WHITE DIAMOND
+25CA..25CB    ; Other_Math # So   [2] LOZENGE..WHITE CIRCLE
+25CF..25D3    ; Other_Math # So   [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK
+25E2          ; Other_Math # So       BLACK LOWER RIGHT TRIANGLE
+25E4          ; Other_Math # So       BLACK UPPER LEFT TRIANGLE
+25E7..25EC    ; Other_Math # So   [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT
+2605..2606    ; Other_Math # So   [2] BLACK STAR..WHITE STAR
+2640          ; Other_Math # So       FEMALE SIGN
+2642          ; Other_Math # So       MALE SIGN
+2660..2663    ; Other_Math # So   [4] BLACK SPADE SUIT..BLACK CLUB SUIT
+266D..266E    ; Other_Math # So   [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN
+27C5          ; Other_Math # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Other_Math # Pe       RIGHT S-SHAPED BAG DELIMITER
+27E6          ; Other_Math # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Other_Math # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Other_Math # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Other_Math # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Other_Math # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Other_Math # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Other_Math # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Other_Math # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Other_Math # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Other_Math # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+2983          ; Other_Math # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Other_Math # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Other_Math # Ps       LEFT WHITE PARENTHESIS
+2986          ; Other_Math # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Other_Math # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Other_Math # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Other_Math # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Other_Math # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Other_Math # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Other_Math # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Other_Math # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Other_Math # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Other_Math # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Other_Math # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Other_Math # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Other_Math # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+29D8          ; Other_Math # Ps       LEFT WIGGLY FENCE
+29D9          ; Other_Math # Pe       RIGHT WIGGLY FENCE
+29DA          ; Other_Math # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Other_Math # Pe       RIGHT DOUBLE WIGGLY FENCE
+29FC          ; Other_Math # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Other_Math # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+FE61          ; Other_Math # Po       SMALL ASTERISK
+FE63          ; Other_Math # Pd       SMALL HYPHEN-MINUS
+FE68          ; Other_Math # Po       SMALL REVERSE SOLIDUS
+FF3C          ; Other_Math # Po       FULLWIDTH REVERSE SOLIDUS
+FF3E          ; Other_Math # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+1D400..1D454  ; Other_Math # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Other_Math # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Other_Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Other_Math # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Other_Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Other_Math # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Other_Math # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Other_Math # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Other_Math # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Other_Math # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Other_Math # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Other_Math # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Other_Math # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Other_Math # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Other_Math # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Other_Math # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Other_Math # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Other_Math # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Other_Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Other_Math # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA  ; Other_Math # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA  ; Other_Math # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714  ; Other_Math # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734  ; Other_Math # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E  ; Other_Math # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E  ; Other_Math # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788  ; Other_Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8  ; Other_Math # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2  ; Other_Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB  ; Other_Math # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Other_Math # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 1216
+
+# ================================================
+
+0030..0039    ; Hex_Digit # Nd  [10] DIGIT ZERO..DIGIT NINE
+0041..0046    ; Hex_Digit # L&   [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066    ; Hex_Digit # L&   [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+FF10..FF19    ; Hex_Digit # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF26    ; Hex_Digit # L&   [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F
+FF41..FF46    ; Hex_Digit # L&   [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F
+
+# Total code points: 44
+
+# ================================================
+
+0030..0039    ; ASCII_Hex_Digit # Nd  [10] DIGIT ZERO..DIGIT NINE
+0041..0046    ; ASCII_Hex_Digit # L&   [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066    ; ASCII_Hex_Digit # L&   [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+
+# Total code points: 22
+
+# ================================================
+
+0345          ; Other_Alphabetic # Mn       COMBINING GREEK YPOGEGRAMMENI
+05B0..05BD    ; Other_Alphabetic # Mn  [14] HEBREW POINT SHEVA..HEBREW POINT METEG
+05BF          ; Other_Alphabetic # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Other_Alphabetic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; Other_Alphabetic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; Other_Alphabetic # Mn       HEBREW POINT QAMATS QATAN
+0610..061A    ; Other_Alphabetic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+064B..0657    ; Other_Alphabetic # Mn  [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065E    ; Other_Alphabetic # Mn   [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS
+0670          ; Other_Alphabetic # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC    ; Other_Alphabetic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4    ; Other_Alphabetic # Mn   [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E7..06E8    ; Other_Alphabetic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED          ; Other_Alphabetic # Mn       ARABIC SMALL LOW MEEM
+0711          ; Other_Alphabetic # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..073F    ; Other_Alphabetic # Mn  [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+07A6..07B0    ; Other_Alphabetic # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+0816..0817    ; Other_Alphabetic # Mn   [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF
+081B..0823    ; Other_Alphabetic # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0825..0827    ; Other_Alphabetic # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0829..082C    ; Other_Alphabetic # Mn   [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+0900..0902    ; Other_Alphabetic # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; Other_Alphabetic # Mc       DEVANAGARI SIGN VISARGA
+093E..0940    ; Other_Alphabetic # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; Other_Alphabetic # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; Other_Alphabetic # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E          ; Other_Alphabetic # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0955          ; Other_Alphabetic # Mn       DEVANAGARI VOWEL SIGN CANDRA LONG E
+0962..0963    ; Other_Alphabetic # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981          ; Other_Alphabetic # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; Other_Alphabetic # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+09BE..09C0    ; Other_Alphabetic # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; Other_Alphabetic # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Other_Alphabetic # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; Other_Alphabetic # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09D7          ; Other_Alphabetic # Mc       BENGALI AU LENGTH MARK
+09E2..09E3    ; Other_Alphabetic # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02    ; Other_Alphabetic # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; Other_Alphabetic # Mc       GURMUKHI SIGN VISARGA
+0A3E..0A40    ; Other_Alphabetic # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A51          ; Other_Alphabetic # Mn       GURMUKHI SIGN UDAAT
+0A70..0A71    ; Other_Alphabetic # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75          ; Other_Alphabetic # Mn       GURMUKHI SIGN YAKASH
+0A81..0A82    ; Other_Alphabetic # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83          ; Other_Alphabetic # Mc       GUJARATI SIGN VISARGA
+0ABE..0AC0    ; Other_Alphabetic # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5    ; Other_Alphabetic # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; Other_Alphabetic # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9          ; Other_Alphabetic # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; Other_Alphabetic # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AE2..0AE3    ; Other_Alphabetic # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01          ; Other_Alphabetic # Mn       ORIYA SIGN CANDRABINDU
+0B02..0B03    ; Other_Alphabetic # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B3E          ; Other_Alphabetic # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; Other_Alphabetic # Mn       ORIYA VOWEL SIGN I
+0B40          ; Other_Alphabetic # Mc       ORIYA VOWEL SIGN II
+0B41..0B44    ; Other_Alphabetic # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48    ; Other_Alphabetic # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; Other_Alphabetic # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B56          ; Other_Alphabetic # Mn       ORIYA AI LENGTH MARK
+0B57          ; Other_Alphabetic # Mc       ORIYA AU LENGTH MARK
+0B62..0B63    ; Other_Alphabetic # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82          ; Other_Alphabetic # Mn       TAMIL SIGN ANUSVARA
+0BBE..0BBF    ; Other_Alphabetic # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0          ; Other_Alphabetic # Mn       TAMIL VOWEL SIGN II
+0BC1..0BC2    ; Other_Alphabetic # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Other_Alphabetic # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; Other_Alphabetic # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD7          ; Other_Alphabetic # Mc       TAMIL AU LENGTH MARK
+0C01..0C03    ; Other_Alphabetic # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C3E..0C40    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44    ; Other_Alphabetic # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4C    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU
+0C55..0C56    ; Other_Alphabetic # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63    ; Other_Alphabetic # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C82..0C83    ; Other_Alphabetic # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0CBE          ; Other_Alphabetic # Mc       KANNADA VOWEL SIGN AA
+0CBF          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN I
+0CC0..0CC4    ; Other_Alphabetic # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN E
+0CC7..0CC8    ; Other_Alphabetic # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; Other_Alphabetic # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN AU
+0CD5..0CD6    ; Other_Alphabetic # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE2..0CE3    ; Other_Alphabetic # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D02..0D03    ; Other_Alphabetic # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3E..0D40    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44    ; Other_Alphabetic # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D57          ; Other_Alphabetic # Mc       MALAYALAM AU LENGTH MARK
+0D62..0D63    ; Other_Alphabetic # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D82..0D83    ; Other_Alphabetic # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0DCF..0DD1    ; Other_Alphabetic # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4    ; Other_Alphabetic # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Other_Alphabetic # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF    ; Other_Alphabetic # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3    ; Other_Alphabetic # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E31          ; Other_Alphabetic # Mn       THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A    ; Other_Alphabetic # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E4D          ; Other_Alphabetic # Mn       THAI CHARACTER NIKHAHIT
+0EB1          ; Other_Alphabetic # Mn       LAO VOWEL SIGN MAI KAN
+0EB4..0EB9    ; Other_Alphabetic # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; Other_Alphabetic # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0ECD          ; Other_Alphabetic # Mn       LAO NIGGAHITA
+0F71..0F7E    ; Other_Alphabetic # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F          ; Other_Alphabetic # Mc       TIBETAN SIGN RNAM BCAD
+0F80..0F81    ; Other_Alphabetic # Mn   [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II
+0F90..0F97    ; Other_Alphabetic # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; Other_Alphabetic # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+102B..102C    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030    ; Other_Alphabetic # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031          ; Other_Alphabetic # Mc       MYANMAR VOWEL SIGN E
+1032..1036    ; Other_Alphabetic # Mn   [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA
+1038          ; Other_Alphabetic # Mc       MYANMAR SIGN VISARGA
+103B..103C    ; Other_Alphabetic # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E    ; Other_Alphabetic # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1056..1057    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059    ; Other_Alphabetic # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060    ; Other_Alphabetic # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1062          ; Other_Alphabetic # Mc       MYANMAR VOWEL SIGN SGAW KAREN EU
+1067..1068    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+1071..1074    ; Other_Alphabetic # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082          ; Other_Alphabetic # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086    ; Other_Alphabetic # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+109C          ; Other_Alphabetic # Mc       MYANMAR VOWEL SIGN AITON A
+109D          ; Other_Alphabetic # Mn       MYANMAR VOWEL SIGN AITON AI
+135F          ; Other_Alphabetic # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1712..1713    ; Other_Alphabetic # Mn   [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
+1732..1733    ; Other_Alphabetic # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1752..1753    ; Other_Alphabetic # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773    ; Other_Alphabetic # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B6          ; Other_Alphabetic # Mc       KHMER VOWEL SIGN AA
+17B7..17BD    ; Other_Alphabetic # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5    ; Other_Alphabetic # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6          ; Other_Alphabetic # Mn       KHMER SIGN NIKAHIT
+17C7..17C8    ; Other_Alphabetic # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+18A9          ; Other_Alphabetic # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922    ; Other_Alphabetic # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926    ; Other_Alphabetic # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928    ; Other_Alphabetic # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B    ; Other_Alphabetic # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; Other_Alphabetic # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932          ; Other_Alphabetic # Mn       LIMBU SMALL LETTER ANUSVARA
+1933..1938    ; Other_Alphabetic # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+19B0..19C0    ; Other_Alphabetic # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C8..19C9    ; Other_Alphabetic # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+1A17..1A18    ; Other_Alphabetic # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B    ; Other_Alphabetic # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A55          ; Other_Alphabetic # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A56          ; Other_Alphabetic # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A57          ; Other_Alphabetic # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E    ; Other_Alphabetic # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A61          ; Other_Alphabetic # Mc       TAI THAM VOWEL SIGN A
+1A62          ; Other_Alphabetic # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64    ; Other_Alphabetic # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C    ; Other_Alphabetic # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72    ; Other_Alphabetic # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A74    ; Other_Alphabetic # Mn   [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
+1B00..1B03    ; Other_Alphabetic # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04          ; Other_Alphabetic # Mc       BALINESE SIGN BISAH
+1B35          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A    ; Other_Alphabetic # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C          ; Other_Alphabetic # Mn       BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41    ; Other_Alphabetic # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42          ; Other_Alphabetic # Mn       BALINESE VOWEL SIGN PEPET
+1B43          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN PEPET TEDUNG
+1B80..1B81    ; Other_Alphabetic # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82          ; Other_Alphabetic # Mc       SUNDANESE SIGN PANGWISAD
+1BA1          ; Other_Alphabetic # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5    ; Other_Alphabetic # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7    ; Other_Alphabetic # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9    ; Other_Alphabetic # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1C24..1C2B    ; Other_Alphabetic # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33    ; Other_Alphabetic # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35    ; Other_Alphabetic # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1CF2          ; Other_Alphabetic # Mc       VEDIC SIGN ARDHAVISARGA
+24B6..24E9    ; Other_Alphabetic # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2DE0..2DFF    ; Other_Alphabetic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+A823..A824    ; Other_Alphabetic # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826    ; Other_Alphabetic # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827          ; Other_Alphabetic # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A880..A881    ; Other_Alphabetic # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A8B4..A8C3    ; Other_Alphabetic # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A926..A92A    ; Other_Alphabetic # Mn   [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O
+A947..A951    ; Other_Alphabetic # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952          ; Other_Alphabetic # Mc       REJANG CONSONANT SIGN H
+A980..A982    ; Other_Alphabetic # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983          ; Other_Alphabetic # Mc       JAVANESE SIGN WIGNYAN
+A9B3          ; Other_Alphabetic # Mn       JAVANESE SIGN CECAK TELU
+A9B4..A9B5    ; Other_Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9    ; Other_Alphabetic # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB    ; Other_Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC          ; Other_Alphabetic # Mn       JAVANESE VOWEL SIGN PEPET
+A9BD..A9BF    ; Other_Alphabetic # Mc   [3] JAVANESE CONSONANT SIGN KERET..JAVANESE CONSONANT SIGN CAKRA
+AA29..AA2E    ; Other_Alphabetic # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30    ; Other_Alphabetic # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32    ; Other_Alphabetic # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34    ; Other_Alphabetic # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36    ; Other_Alphabetic # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43          ; Other_Alphabetic # Mn       CHAM CONSONANT SIGN FINAL NG
+AA4C          ; Other_Alphabetic # Mn       CHAM CONSONANT SIGN FINAL M
+AA4D          ; Other_Alphabetic # Mc       CHAM CONSONANT SIGN FINAL H
+AAB0          ; Other_Alphabetic # Mn       TAI VIET MAI KANG
+AAB2..AAB4    ; Other_Alphabetic # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8    ; Other_Alphabetic # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE          ; Other_Alphabetic # Mn       TAI VIET VOWEL AM
+ABE3..ABE4    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5          ; Other_Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8          ; Other_Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+FB1E          ; Other_Alphabetic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+10A01..10A03  ; Other_Alphabetic # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Other_Alphabetic # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; Other_Alphabetic # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+11082         ; Other_Alphabetic # Mc       KAITHI SIGN VISARGA
+110B0..110B2  ; Other_Alphabetic # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6  ; Other_Alphabetic # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8  ; Other_Alphabetic # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+
+# Total code points: 759
+
+# ================================================
+
+3006          ; Ideographic # Lo       IDEOGRAPHIC CLOSING MARK
+3007          ; Ideographic # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; Ideographic # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A    ; Ideographic # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+3400..4DB5    ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; Ideographic # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+F900..FA2D    ; Ideographic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; Ideographic # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+20000..2A6D6  ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 75408
+
+# ================================================
+
+005E          ; Diacritic # Sk       CIRCUMFLEX ACCENT
+0060          ; Diacritic # Sk       GRAVE ACCENT
+00A8          ; Diacritic # Sk       DIAERESIS
+00AF          ; Diacritic # Sk       MACRON
+00B4          ; Diacritic # Sk       ACUTE ACCENT
+00B7          ; Diacritic # Po       MIDDLE DOT
+00B8          ; Diacritic # Sk       CEDILLA
+02B0..02C1    ; Diacritic # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5    ; Diacritic # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1    ; Diacritic # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF    ; Diacritic # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4    ; Diacritic # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB    ; Diacritic # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC          ; Diacritic # Lm       MODIFIER LETTER VOICING
+02ED          ; Diacritic # Sk       MODIFIER LETTER UNASPIRATED
+02EE          ; Diacritic # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF    ; Diacritic # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..034E    ; Diacritic # Mn  [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
+0350..0357    ; Diacritic # Mn   [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE
+035D..0362    ; Diacritic # Mn   [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0374          ; Diacritic # Lm       GREEK NUMERAL SIGN
+0375          ; Diacritic # Sk       GREEK LOWER NUMERAL SIGN
+037A          ; Diacritic # Lm       GREEK YPOGEGRAMMENI
+0384..0385    ; Diacritic # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0483..0487    ; Diacritic # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0559          ; Diacritic # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0591..05A1    ; Diacritic # Mn  [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05BD    ; Diacritic # Mn  [27] HEBREW ACCENT MUNAH..HEBREW POINT METEG
+05BF          ; Diacritic # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Diacritic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4          ; Diacritic # Mn       HEBREW MARK UPPER DOT
+064B..0652    ; Diacritic # Mn   [8] ARABIC FATHATAN..ARABIC SUKUN
+0657..0658    ; Diacritic # Mn   [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA
+06DF..06E0    ; Diacritic # Mn   [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E5..06E6    ; Diacritic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EA..06EC    ; Diacritic # Mn   [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+0730..074A    ; Diacritic # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0    ; Diacritic # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3    ; Diacritic # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5    ; Diacritic # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+0818..0819    ; Diacritic # Mn   [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
+093C          ; Diacritic # Mn       DEVANAGARI SIGN NUKTA
+094D          ; Diacritic # Mn       DEVANAGARI SIGN VIRAMA
+0951..0954    ; Diacritic # Mn   [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+0971          ; Diacritic # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+09BC          ; Diacritic # Mn       BENGALI SIGN NUKTA
+09CD          ; Diacritic # Mn       BENGALI SIGN VIRAMA
+0A3C          ; Diacritic # Mn       GURMUKHI SIGN NUKTA
+0A4D          ; Diacritic # Mn       GURMUKHI SIGN VIRAMA
+0ABC          ; Diacritic # Mn       GUJARATI SIGN NUKTA
+0ACD          ; Diacritic # Mn       GUJARATI SIGN VIRAMA
+0B3C          ; Diacritic # Mn       ORIYA SIGN NUKTA
+0B4D          ; Diacritic # Mn       ORIYA SIGN VIRAMA
+0BCD          ; Diacritic # Mn       TAMIL SIGN VIRAMA
+0C4D          ; Diacritic # Mn       TELUGU SIGN VIRAMA
+0CBC          ; Diacritic # Mn       KANNADA SIGN NUKTA
+0CCD          ; Diacritic # Mn       KANNADA SIGN VIRAMA
+0D4D          ; Diacritic # Mn       MALAYALAM SIGN VIRAMA
+0DCA          ; Diacritic # Mn       SINHALA SIGN AL-LAKUNA
+0E47..0E4C    ; Diacritic # Mn   [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT
+0E4E          ; Diacritic # Mn       THAI CHARACTER YAMAKKAN
+0EC8..0ECC    ; Diacritic # Mn   [5] LAO TONE MAI EK..LAO CANCELLATION MARK
+0F18..0F19    ; Diacritic # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35          ; Diacritic # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; Diacritic # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39          ; Diacritic # Mn       TIBETAN MARK TSA -PHRU
+0F3E..0F3F    ; Diacritic # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F82..0F84    ; Diacritic # Mn   [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
+0F86..0F87    ; Diacritic # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0FC6          ; Diacritic # Mn       TIBETAN SYMBOL PADMA GDAN
+1037          ; Diacritic # Mn       MYANMAR SIGN DOT BELOW
+1039..103A    ; Diacritic # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+1087..108C    ; Diacritic # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D          ; Diacritic # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108F          ; Diacritic # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A..109B    ; Diacritic # Mc   [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3
+17C9..17D3    ; Diacritic # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD          ; Diacritic # Mn       KHMER SIGN ATTHACAN
+1939..193B    ; Diacritic # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A75..1A7C    ; Diacritic # Mn   [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; Diacritic # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1B34          ; Diacritic # Mn       BALINESE SIGN REREKAN
+1B44          ; Diacritic # Mc       BALINESE ADEG ADEG
+1B6B..1B73    ; Diacritic # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1BAA          ; Diacritic # Mc       SUNDANESE SIGN PAMAAEH
+1C36..1C37    ; Diacritic # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C78..1C7D    ; Diacritic # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2    ; Diacritic # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD3          ; Diacritic # Po       VEDIC SIGN NIHSHVASA
+1CD4..1CE0    ; Diacritic # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1          ; Diacritic # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8    ; Diacritic # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED          ; Diacritic # Mn       VEDIC SIGN TIRYAK
+1D2C..1D61    ; Diacritic # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D6A    ; Diacritic # L&   [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI
+1DC4..1DCF    ; Diacritic # Mn  [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW
+1DFD..1DFF    ; Diacritic # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1FBD          ; Diacritic # Sk       GREEK KORONIS
+1FBF..1FC1    ; Diacritic # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF    ; Diacritic # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF    ; Diacritic # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF    ; Diacritic # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE    ; Diacritic # Sk   [2] GREEK OXIA..GREEK DASIA
+2CEF..2CF1    ; Diacritic # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2E2F          ; Diacritic # Lm       VERTICAL TILDE
+302A..302F    ; Diacritic # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A    ; Diacritic # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C    ; Diacritic # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30FC          ; Diacritic # Lm       KATAKANA-HIRAGANA PROLONGED SOUND MARK
+A66F          ; Diacritic # Mn       COMBINING CYRILLIC VZMET
+A67C..A67D    ; Diacritic # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67F          ; Diacritic # Lm       CYRILLIC PAYEROK
+A6F0..A6F1    ; Diacritic # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A717..A71F    ; Diacritic # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721    ; Diacritic # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A788          ; Diacritic # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A8C4          ; Diacritic # Mn       SAURASHTRA SIGN VIRAMA
+A8E0..A8F1    ; Diacritic # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A92B..A92D    ; Diacritic # Mn   [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU
+A92E          ; Diacritic # Po       KAYAH LI SIGN CWI
+A953          ; Diacritic # Mc       REJANG VIRAMA
+A9B3          ; Diacritic # Mn       JAVANESE SIGN CECAK TELU
+A9C0          ; Diacritic # Mc       JAVANESE PANGKON
+AA7B          ; Diacritic # Mc       MYANMAR SIGN PAO KAREN TONE
+AABF          ; Diacritic # Mn       TAI VIET TONE MAI EK
+AAC0          ; Diacritic # Lo       TAI VIET TONE MAI NUENG
+AAC1          ; Diacritic # Mn       TAI VIET TONE MAI THO
+AAC2          ; Diacritic # Lo       TAI VIET TONE MAI SONG
+ABEC          ; Diacritic # Mc       MEETEI MAYEK LUM IYEK
+ABED          ; Diacritic # Mn       MEETEI MAYEK APUN IYEK
+FB1E          ; Diacritic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FE20..FE26    ; Diacritic # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+FF3E          ; Diacritic # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF40          ; Diacritic # Sk       FULLWIDTH GRAVE ACCENT
+FF70          ; Diacritic # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F    ; Diacritic # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE3          ; Diacritic # Sk       FULLWIDTH MACRON
+110B9..110BA  ; Diacritic # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+1D167..1D169  ; Diacritic # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172  ; Diacritic # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182  ; Diacritic # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; Diacritic # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; Diacritic # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+
+# Total code points: 639
+
+# ================================================
+
+00B7          ; Extender # Po       MIDDLE DOT
+02D0..02D1    ; Extender # Lm   [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
+0640          ; Extender # Lm       ARABIC TATWEEL
+07FA          ; Extender # Lm       NKO LAJANYALAN
+0E46          ; Extender # Lm       THAI CHARACTER MAIYAMOK
+0EC6          ; Extender # Lm       LAO KO LA
+1843          ; Extender # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1AA7          ; Extender # Lm       TAI THAM SIGN MAI YAMOK
+1C36          ; Extender # Mn       LEPCHA SIGN RAN
+1C7B          ; Extender # Lm       OL CHIKI RELAA
+3005          ; Extender # Lm       IDEOGRAPHIC ITERATION MARK
+3031..3035    ; Extender # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+309D..309E    ; Extender # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30FC..30FE    ; Extender # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015          ; Extender # Lm       YI SYLLABLE WU
+A60C          ; Extender # Lm       VAI SYLLABLE LENGTHENER
+A9CF          ; Extender # Lm       JAVANESE PANGRANGKEP
+AA70          ; Extender # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AADD          ; Extender # Lm       TAI VIET SYMBOL SAM
+FF70          ; Extender # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+
+# Total code points: 28
+
+# ================================================
+
+02B0..02B8    ; Other_Lowercase # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1    ; Other_Lowercase # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4    ; Other_Lowercase # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345          ; Other_Lowercase # Mn       COMBINING GREEK YPOGEGRAMMENI
+037A          ; Other_Lowercase # Lm       GREEK YPOGEGRAMMENI
+1D2C..1D61    ; Other_Lowercase # Lm  [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D78          ; Other_Lowercase # Lm       MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF    ; Other_Lowercase # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+2090..2094    ; Other_Lowercase # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2170..217F    ; Other_Lowercase # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+24D0..24E9    ; Other_Lowercase # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C7D          ; Other_Lowercase # Lm       MODIFIER LETTER CAPITAL V
+A770          ; Other_Lowercase # Lm       MODIFIER LETTER US
+
+# Total code points: 159
+
+# ================================================
+
+2160..216F    ; Other_Uppercase # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+24B6..24CF    ; Other_Uppercase # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+
+# Total code points: 42
+
+# ================================================
+
+FDD0..FDEF    ; Noncharacter_Code_Point # Cn  [32] <noncharacter-FDD0>..<noncharacter-FDEF>
+FFFE..FFFF    ; Noncharacter_Code_Point # Cn   [2] <noncharacter-FFFE>..<noncharacter-FFFF>
+1FFFE..1FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>
+2FFFE..2FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>
+3FFFE..3FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>
+4FFFE..4FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>
+5FFFE..5FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>
+6FFFE..6FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>
+7FFFE..7FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>
+8FFFE..8FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>
+9FFFE..9FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>
+AFFFE..AFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>
+BFFFE..BFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>
+CFFFE..CFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>
+DFFFE..DFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-DFFFE>..<noncharacter-DFFFF>
+EFFFE..EFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>
+FFFFE..FFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+10FFFE..10FFFF; Noncharacter_Code_Point # Cn   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+
+# Total code points: 66
+
+# ================================================
+
+09BE          ; Other_Grapheme_Extend # Mc       BENGALI VOWEL SIGN AA
+09D7          ; Other_Grapheme_Extend # Mc       BENGALI AU LENGTH MARK
+0B3E          ; Other_Grapheme_Extend # Mc       ORIYA VOWEL SIGN AA
+0B57          ; Other_Grapheme_Extend # Mc       ORIYA AU LENGTH MARK
+0BBE          ; Other_Grapheme_Extend # Mc       TAMIL VOWEL SIGN AA
+0BD7          ; Other_Grapheme_Extend # Mc       TAMIL AU LENGTH MARK
+0CC2          ; Other_Grapheme_Extend # Mc       KANNADA VOWEL SIGN UU
+0CD5..0CD6    ; Other_Grapheme_Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D3E          ; Other_Grapheme_Extend # Mc       MALAYALAM VOWEL SIGN AA
+0D57          ; Other_Grapheme_Extend # Mc       MALAYALAM AU LENGTH MARK
+0DCF          ; Other_Grapheme_Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA
+0DDF          ; Other_Grapheme_Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA
+200C..200D    ; Other_Grapheme_Extend # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+FF9E..FF9F    ; Other_Grapheme_Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+1D165         ; Other_Grapheme_Extend # Mc       MUSICAL SYMBOL COMBINING STEM
+1D16E..1D172  ; Other_Grapheme_Extend # Mc   [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+
+# Total code points: 23
+
+# ================================================
+
+2FF0..2FF1    ; IDS_Binary_Operator # So   [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF4..2FFB    ; IDS_Binary_Operator # So   [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+
+# Total code points: 10
+
+# ================================================
+
+2FF2..2FF3    ; IDS_Trinary_Operator # So   [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+
+# Total code points: 2
+
+# ================================================
+
+2E80..2E99    ; Radical # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3    ; Radical # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5    ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+
+# Total code points: 329
+
+# ================================================
+
+3400..4DB5    ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; Unified_Ideograph # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+FA0E..FA0F    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13..FA14    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23..FA24    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27..FA29    ; Unified_Ideograph # Lo   [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+20000..2A6D6  ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+
+# Total code points: 74394
+
+# ================================================
+
+034F          ; Other_Default_Ignorable_Code_Point # Mn       COMBINING GRAPHEME JOINER
+115F..1160    ; Other_Default_Ignorable_Code_Point # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+2065..2069    ; Other_Default_Ignorable_Code_Point # Cn   [5] <reserved-2065>..<reserved-2069>
+3164          ; Other_Default_Ignorable_Code_Point # Lo       HANGUL FILLER
+FFA0          ; Other_Default_Ignorable_Code_Point # Lo       HALFWIDTH HANGUL FILLER
+FFF0..FFF8    ; Other_Default_Ignorable_Code_Point # Cn   [9] <reserved-FFF0>..<reserved-FFF8>
+E0000         ; Other_Default_Ignorable_Code_Point # Cn       <reserved-E0000>
+E0002..E001F  ; Other_Default_Ignorable_Code_Point # Cn  [30] <reserved-E0002>..<reserved-E001F>
+E0080..E00FF  ; Other_Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E01F0..E0FFF  ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 3778
+
+# ================================================
+
+0149          ; Deprecated # L&       LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0F77          ; Deprecated # Mn       TIBETAN VOWEL SIGN VOCALIC RR
+0F79          ; Deprecated # Mn       TIBETAN VOWEL SIGN VOCALIC LL
+17A3..17A4    ; Deprecated # Lo   [2] KHMER INDEPENDENT VOWEL QAQ..KHMER INDEPENDENT VOWEL QAA
+206A..206F    ; Deprecated # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2329          ; Deprecated # Ps       LEFT-POINTING ANGLE BRACKET
+232A          ; Deprecated # Pe       RIGHT-POINTING ANGLE BRACKET
+E0001         ; Deprecated # Cf       LANGUAGE TAG
+E0020..E007F  ; Deprecated # Cf  [96] TAG SPACE..CANCEL TAG
+
+# Total code points: 110
+
+# ================================================
+
+0069..006A    ; Soft_Dotted # L&   [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J
+012F          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH OGONEK
+0249          ; Soft_Dotted # L&       LATIN SMALL LETTER J WITH STROKE
+0268          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH STROKE
+029D          ; Soft_Dotted # L&       LATIN SMALL LETTER J WITH CROSSED-TAIL
+02B2          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL J
+03F3          ; Soft_Dotted # L&       GREEK LETTER YOT
+0456          ; Soft_Dotted # L&       CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0458          ; Soft_Dotted # L&       CYRILLIC SMALL LETTER JE
+1D62          ; Soft_Dotted # L&       LATIN SUBSCRIPT SMALL LETTER I
+1D96          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1DA4          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL I WITH STROKE
+1DA8          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1E2D          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH TILDE BELOW
+1ECB          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH DOT BELOW
+2071          ; Soft_Dotted # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+2148..2149    ; Soft_Dotted # L&   [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J
+2C7C          ; Soft_Dotted # L&       LATIN SUBSCRIPT SMALL LETTER J
+1D422..1D423  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J
+1D456..1D457  ; Soft_Dotted # L&   [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J
+1D48A..1D48B  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J
+1D4BE..1D4BF  ; Soft_Dotted # L&   [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J
+1D4F2..1D4F3  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J
+1D526..1D527  ; Soft_Dotted # L&   [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J
+1D55A..1D55B  ; Soft_Dotted # L&   [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D58E..1D58F  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J
+1D5C2..1D5C3  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J
+1D5F6..1D5F7  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D62A..1D62B  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D65E..1D65F  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D692..1D693  ; Soft_Dotted # L&   [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J
+
+# Total code points: 46
+
+# ================================================
+
+0E40..0E44    ; Logical_Order_Exception # Lo   [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
+0EC0..0EC4    ; Logical_Order_Exception # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+AAB5..AAB6    ; Logical_Order_Exception # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9          ; Logical_Order_Exception # Lo       TAI VIET VOWEL UEA
+AABB..AABC    ; Logical_Order_Exception # Lo   [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY
+
+# Total code points: 15
+
+# ================================================
+
+2118          ; Other_ID_Start # So       SCRIPT CAPITAL P
+212E          ; Other_ID_Start # So       ESTIMATED SYMBOL
+309B..309C    ; Other_ID_Start # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+
+# Total code points: 4
+
+# ================================================
+
+00B7          ; Other_ID_Continue # Po       MIDDLE DOT
+0387          ; Other_ID_Continue # Po       GREEK ANO TELEIA
+1369..1371    ; Other_ID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+
+# Total code points: 11
+
+# ================================================
+
+0021          ; STerm # Po       EXCLAMATION MARK
+002E          ; STerm # Po       FULL STOP
+003F          ; STerm # Po       QUESTION MARK
+055C          ; STerm # Po       ARMENIAN EXCLAMATION MARK
+055E          ; STerm # Po       ARMENIAN QUESTION MARK
+0589          ; STerm # Po       ARMENIAN FULL STOP
+061F          ; STerm # Po       ARABIC QUESTION MARK
+06D4          ; STerm # Po       ARABIC FULL STOP
+0700..0702    ; STerm # Po   [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
+07F9          ; STerm # Po       NKO EXCLAMATION MARK
+0964..0965    ; STerm # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+104A..104B    ; STerm # Po   [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1362          ; STerm # Po       ETHIOPIC FULL STOP
+1367..1368    ; STerm # Po   [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+166E          ; STerm # Po       CANADIAN SYLLABICS FULL STOP
+1803          ; STerm # Po       MONGOLIAN FULL STOP
+1809          ; STerm # Po       MONGOLIAN MANCHU FULL STOP
+1944..1945    ; STerm # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1B5A..1B5B    ; STerm # Po   [2] BALINESE PANTI..BALINESE PAMADA
+1B5E..1B5F    ; STerm # Po   [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN
+1C3B..1C3C    ; STerm # Po   [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+1C7E..1C7F    ; STerm # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+203C..203D    ; STerm # Po   [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049    ; STerm # Po   [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2E2E          ; STerm # Po       REVERSED QUESTION MARK
+3002          ; STerm # Po       IDEOGRAPHIC FULL STOP
+A4FF          ; STerm # Po       LISU PUNCTUATION FULL STOP
+A60E..A60F    ; STerm # Po   [2] VAI FULL STOP..VAI QUESTION MARK
+A6F3          ; STerm # Po       BAMUM FULL STOP
+A6F7          ; STerm # Po       BAMUM QUESTION MARK
+A876..A877    ; STerm # Po   [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
+A8CE..A8CF    ; STerm # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A92F          ; STerm # Po       KAYAH LI SIGN SHYA
+A9C8..A9C9    ; STerm # Po   [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI
+AA5D..AA5F    ; STerm # Po   [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+ABEB          ; STerm # Po       MEETEI MAYEK CHEIKHEI
+FE52          ; STerm # Po       SMALL FULL STOP
+FE56..FE57    ; STerm # Po   [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
+FF01          ; STerm # Po       FULLWIDTH EXCLAMATION MARK
+FF0E          ; STerm # Po       FULLWIDTH FULL STOP
+FF1F          ; STerm # Po       FULLWIDTH QUESTION MARK
+FF61          ; STerm # Po       HALFWIDTH IDEOGRAPHIC FULL STOP
+110BE..110C1  ; STerm # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+
+# Total code points: 66
+
+# ================================================
+
+180B..180D    ; Variation_Selector # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+FE00..FE0F    ; Variation_Selector # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+E0100..E01EF  ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 259
+
+# ================================================
+
+0009..000D    ; Pattern_White_Space # Cc   [5] <control-0009>..<control-000D>
+0020          ; Pattern_White_Space # Zs       SPACE
+0085          ; Pattern_White_Space # Cc       <control-0085>
+200E..200F    ; Pattern_White_Space # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2028          ; Pattern_White_Space # Zl       LINE SEPARATOR
+2029          ; Pattern_White_Space # Zp       PARAGRAPH SEPARATOR
+
+# Total code points: 11
+
+# ================================================
+
+0021..0023    ; Pattern_Syntax # Po   [3] EXCLAMATION MARK..NUMBER SIGN
+0024          ; Pattern_Syntax # Sc       DOLLAR SIGN
+0025..0027    ; Pattern_Syntax # Po   [3] PERCENT SIGN..APOSTROPHE
+0028          ; Pattern_Syntax # Ps       LEFT PARENTHESIS
+0029          ; Pattern_Syntax # Pe       RIGHT PARENTHESIS
+002A          ; Pattern_Syntax # Po       ASTERISK
+002B          ; Pattern_Syntax # Sm       PLUS SIGN
+002C          ; Pattern_Syntax # Po       COMMA
+002D          ; Pattern_Syntax # Pd       HYPHEN-MINUS
+002E..002F    ; Pattern_Syntax # Po   [2] FULL STOP..SOLIDUS
+003A..003B    ; Pattern_Syntax # Po   [2] COLON..SEMICOLON
+003C..003E    ; Pattern_Syntax # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040    ; Pattern_Syntax # Po   [2] QUESTION MARK..COMMERCIAL AT
+005B          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET
+005C          ; Pattern_Syntax # Po       REVERSE SOLIDUS
+005D          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET
+005E          ; Pattern_Syntax # Sk       CIRCUMFLEX ACCENT
+0060          ; Pattern_Syntax # Sk       GRAVE ACCENT
+007B          ; Pattern_Syntax # Ps       LEFT CURLY BRACKET
+007C          ; Pattern_Syntax # Sm       VERTICAL LINE
+007D          ; Pattern_Syntax # Pe       RIGHT CURLY BRACKET
+007E          ; Pattern_Syntax # Sm       TILDE
+00A1          ; Pattern_Syntax # Po       INVERTED EXCLAMATION MARK
+00A2..00A5    ; Pattern_Syntax # Sc   [4] CENT SIGN..YEN SIGN
+00A6..00A7    ; Pattern_Syntax # So   [2] BROKEN BAR..SECTION SIGN
+00A9          ; Pattern_Syntax # So       COPYRIGHT SIGN
+00AB          ; Pattern_Syntax # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC          ; Pattern_Syntax # Sm       NOT SIGN
+00AE          ; Pattern_Syntax # So       REGISTERED SIGN
+00B0          ; Pattern_Syntax # So       DEGREE SIGN
+00B1          ; Pattern_Syntax # Sm       PLUS-MINUS SIGN
+00B6          ; Pattern_Syntax # So       PILCROW SIGN
+00BB          ; Pattern_Syntax # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF          ; Pattern_Syntax # Po       INVERTED QUESTION MARK
+00D7          ; Pattern_Syntax # Sm       MULTIPLICATION SIGN
+00F7          ; Pattern_Syntax # Sm       DIVISION SIGN
+2010..2015    ; Pattern_Syntax # Pd   [6] HYPHEN..HORIZONTAL BAR
+2016..2017    ; Pattern_Syntax # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018          ; Pattern_Syntax # Pi       LEFT SINGLE QUOTATION MARK
+2019          ; Pattern_Syntax # Pf       RIGHT SINGLE QUOTATION MARK
+201A          ; Pattern_Syntax # Ps       SINGLE LOW-9 QUOTATION MARK
+201B..201C    ; Pattern_Syntax # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D          ; Pattern_Syntax # Pf       RIGHT DOUBLE QUOTATION MARK
+201E          ; Pattern_Syntax # Ps       DOUBLE LOW-9 QUOTATION MARK
+201F          ; Pattern_Syntax # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027    ; Pattern_Syntax # Po   [8] DAGGER..HYPHENATION POINT
+2030..2038    ; Pattern_Syntax # Po   [9] PER MILLE SIGN..CARET
+2039          ; Pattern_Syntax # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A          ; Pattern_Syntax # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E    ; Pattern_Syntax # Po   [4] REFERENCE MARK..OVERLINE
+2041..2043    ; Pattern_Syntax # Po   [3] CARET INSERTION POINT..HYPHEN BULLET
+2044          ; Pattern_Syntax # Sm       FRACTION SLASH
+2045          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH QUILL
+2046          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH QUILL
+2047..2051    ; Pattern_Syntax # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052          ; Pattern_Syntax # Sm       COMMERCIAL MINUS SIGN
+2053          ; Pattern_Syntax # Po       SWUNG DASH
+2055..205E    ; Pattern_Syntax # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+2190..2194    ; Pattern_Syntax # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199    ; Pattern_Syntax # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B    ; Pattern_Syntax # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F    ; Pattern_Syntax # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0          ; Pattern_Syntax # Sm       RIGHTWARDS TWO HEADED ARROW
+21A1..21A2    ; Pattern_Syntax # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3          ; Pattern_Syntax # Sm       RIGHTWARDS ARROW WITH TAIL
+21A4..21A5    ; Pattern_Syntax # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6          ; Pattern_Syntax # Sm       RIGHTWARDS ARROW FROM BAR
+21A7..21AD    ; Pattern_Syntax # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE          ; Pattern_Syntax # Sm       LEFT RIGHT ARROW WITH STROKE
+21AF..21CD    ; Pattern_Syntax # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF    ; Pattern_Syntax # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Pattern_Syntax # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2          ; Pattern_Syntax # Sm       RIGHTWARDS DOUBLE ARROW
+21D3          ; Pattern_Syntax # So       DOWNWARDS DOUBLE ARROW
+21D4          ; Pattern_Syntax # Sm       LEFT RIGHT DOUBLE ARROW
+21D5..21F3    ; Pattern_Syntax # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF    ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307    ; Pattern_Syntax # So   [8] DIAMETER SIGN..WAVY LINE
+2308..230B    ; Pattern_Syntax # Sm   [4] LEFT CEILING..RIGHT FLOOR
+230C..231F    ; Pattern_Syntax # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321    ; Pattern_Syntax # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328    ; Pattern_Syntax # So   [7] FROWN..KEYBOARD
+2329          ; Pattern_Syntax # Ps       LEFT-POINTING ANGLE BRACKET
+232A          ; Pattern_Syntax # Pe       RIGHT-POINTING ANGLE BRACKET
+232B..237B    ; Pattern_Syntax # So  [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C          ; Pattern_Syntax # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A    ; Pattern_Syntax # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3    ; Pattern_Syntax # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB    ; Pattern_Syntax # So  [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1    ; Pattern_Syntax # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..23E8    ; Pattern_Syntax # So   [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
+23E9..23FF    ; Pattern_Syntax # Cn  [23] <reserved-23E9>..<reserved-23FF>
+2400..2426    ; Pattern_Syntax # So  [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2427..243F    ; Pattern_Syntax # Cn  [25] <reserved-2427>..<reserved-243F>
+2440..244A    ; Pattern_Syntax # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH
+244B..245F    ; Pattern_Syntax # Cn  [21] <reserved-244B>..<reserved-245F>
+2500..25B6    ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7          ; Pattern_Syntax # Sm       WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0    ; Pattern_Syntax # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1          ; Pattern_Syntax # Sm       WHITE LEFT-POINTING TRIANGLE
+25C2..25F7    ; Pattern_Syntax # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF    ; Pattern_Syntax # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E    ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F          ; Pattern_Syntax # Sm       MUSIC SHARP SIGN
+2670..26CD    ; Pattern_Syntax # So  [94] WEST SYRIAC CROSS..DISABLED CAR
+26CE          ; Pattern_Syntax # Cn       <reserved-26CE>
+26CF..26E1    ; Pattern_Syntax # So  [19] PICK..RESTRICTED LEFT ENTRY-2
+26E2          ; Pattern_Syntax # Cn       <reserved-26E2>
+26E3          ; Pattern_Syntax # So       HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4..26E7    ; Pattern_Syntax # Cn   [4] <reserved-26E4>..<reserved-26E7>
+26E8..26FF    ; Pattern_Syntax # So  [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700          ; Pattern_Syntax # Cn       <reserved-2700>
+2701..2704    ; Pattern_Syntax # So   [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2705          ; Pattern_Syntax # Cn       <reserved-2705>
+2706..2709    ; Pattern_Syntax # So   [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270A..270B    ; Pattern_Syntax # Cn   [2] <reserved-270A>..<reserved-270B>
+270C..2727    ; Pattern_Syntax # So  [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2728          ; Pattern_Syntax # Cn       <reserved-2728>
+2729..274B    ; Pattern_Syntax # So  [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C          ; Pattern_Syntax # Cn       <reserved-274C>
+274D          ; Pattern_Syntax # So       SHADOWED WHITE CIRCLE
+274E          ; Pattern_Syntax # Cn       <reserved-274E>
+274F..2752    ; Pattern_Syntax # So   [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2753..2755    ; Pattern_Syntax # Cn   [3] <reserved-2753>..<reserved-2755>
+2756..275E    ; Pattern_Syntax # So   [9] BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+275F..2760    ; Pattern_Syntax # Cn   [2] <reserved-275F>..<reserved-2760>
+2761..2767    ; Pattern_Syntax # So   [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768          ; Pattern_Syntax # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT
+2769          ; Pattern_Syntax # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A          ; Pattern_Syntax # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B          ; Pattern_Syntax # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C          ; Pattern_Syntax # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D          ; Pattern_Syntax # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E          ; Pattern_Syntax # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F          ; Pattern_Syntax # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770          ; Pattern_Syntax # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771          ; Pattern_Syntax # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772          ; Pattern_Syntax # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773          ; Pattern_Syntax # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774          ; Pattern_Syntax # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775          ; Pattern_Syntax # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2794          ; Pattern_Syntax # So       HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795..2797    ; Pattern_Syntax # Cn   [3] <reserved-2795>..<reserved-2797>
+2798..27AF    ; Pattern_Syntax # So  [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0          ; Pattern_Syntax # Cn       <reserved-27B0>
+27B1..27BE    ; Pattern_Syntax # So  [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27BF          ; Pattern_Syntax # Cn       <reserved-27BF>
+27C0..27C4    ; Pattern_Syntax # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5          ; Pattern_Syntax # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Pattern_Syntax # Pe       RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Pattern_Syntax # Sm   [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CB          ; Pattern_Syntax # Cn       <reserved-27CB>
+27CC          ; Pattern_Syntax # Sm       LONG DIVISION
+27CD..27CF    ; Pattern_Syntax # Cn   [3] <reserved-27CD>..<reserved-27CF>
+27D0..27E5    ; Pattern_Syntax # Sm  [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Pattern_Syntax # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF    ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982    ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983          ; Pattern_Syntax # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Pattern_Syntax # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Pattern_Syntax # Ps       LEFT WHITE PARENTHESIS
+2986          ; Pattern_Syntax # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Pattern_Syntax # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Pattern_Syntax # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Pattern_Syntax # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Pattern_Syntax # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Pattern_Syntax # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Pattern_Syntax # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Pattern_Syntax # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Pattern_Syntax # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Pattern_Syntax # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Pattern_Syntax # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Pattern_Syntax # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Pattern_Syntax # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7    ; Pattern_Syntax # Sm  [63] DOTTED FENCE..BLACK HOURGLASS
+29D8          ; Pattern_Syntax # Ps       LEFT WIGGLY FENCE
+29D9          ; Pattern_Syntax # Pe       RIGHT WIGGLY FENCE
+29DA          ; Pattern_Syntax # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Pattern_Syntax # Pe       RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB    ; Pattern_Syntax # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC          ; Pattern_Syntax # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Pattern_Syntax # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF    ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F    ; Pattern_Syntax # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44    ; Pattern_Syntax # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46    ; Pattern_Syntax # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C    ; Pattern_Syntax # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B4F    ; Pattern_Syntax # Cn   [3] <reserved-2B4D>..<reserved-2B4F>
+2B50..2B59    ; Pattern_Syntax # So  [10] WHITE MEDIUM STAR..HEAVY CIRCLED SALTIRE
+2B5A..2BFF    ; Pattern_Syntax # Cn [166] <reserved-2B5A>..<reserved-2BFF>
+2E00..2E01    ; Pattern_Syntax # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02          ; Pattern_Syntax # Pi       LEFT SUBSTITUTION BRACKET
+2E03          ; Pattern_Syntax # Pf       RIGHT SUBSTITUTION BRACKET
+2E04          ; Pattern_Syntax # Pi       LEFT DOTTED SUBSTITUTION BRACKET
+2E05          ; Pattern_Syntax # Pf       RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08    ; Pattern_Syntax # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09          ; Pattern_Syntax # Pi       LEFT TRANSPOSITION BRACKET
+2E0A          ; Pattern_Syntax # Pf       RIGHT TRANSPOSITION BRACKET
+2E0B          ; Pattern_Syntax # Po       RAISED SQUARE
+2E0C          ; Pattern_Syntax # Pi       LEFT RAISED OMISSION BRACKET
+2E0D          ; Pattern_Syntax # Pf       RIGHT RAISED OMISSION BRACKET
+2E0E..2E16    ; Pattern_Syntax # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17          ; Pattern_Syntax # Pd       DOUBLE OBLIQUE HYPHEN
+2E18..2E19    ; Pattern_Syntax # Po   [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A          ; Pattern_Syntax # Pd       HYPHEN WITH DIAERESIS
+2E1B          ; Pattern_Syntax # Po       TILDE WITH RING ABOVE
+2E1C          ; Pattern_Syntax # Pi       LEFT LOW PARAPHRASE BRACKET
+2E1D          ; Pattern_Syntax # Pf       RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F    ; Pattern_Syntax # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20          ; Pattern_Syntax # Pi       LEFT VERTICAL BAR WITH QUILL
+2E21          ; Pattern_Syntax # Pf       RIGHT VERTICAL BAR WITH QUILL
+2E22          ; Pattern_Syntax # Ps       TOP LEFT HALF BRACKET
+2E23          ; Pattern_Syntax # Pe       TOP RIGHT HALF BRACKET
+2E24          ; Pattern_Syntax # Ps       BOTTOM LEFT HALF BRACKET
+2E25          ; Pattern_Syntax # Pe       BOTTOM RIGHT HALF BRACKET
+2E26          ; Pattern_Syntax # Ps       LEFT SIDEWAYS U BRACKET
+2E27          ; Pattern_Syntax # Pe       RIGHT SIDEWAYS U BRACKET
+2E28          ; Pattern_Syntax # Ps       LEFT DOUBLE PARENTHESIS
+2E29          ; Pattern_Syntax # Pe       RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E    ; Pattern_Syntax # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F          ; Pattern_Syntax # Lm       VERTICAL TILDE
+2E30..2E31    ; Pattern_Syntax # Po   [2] RING POINT..WORD SEPARATOR MIDDLE DOT
+2E32..2E7F    ; Pattern_Syntax # Cn  [78] <reserved-2E32>..<reserved-2E7F>
+3001..3003    ; Pattern_Syntax # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK
+3008          ; Pattern_Syntax # Ps       LEFT ANGLE BRACKET
+3009          ; Pattern_Syntax # Pe       RIGHT ANGLE BRACKET
+300A          ; Pattern_Syntax # Ps       LEFT DOUBLE ANGLE BRACKET
+300B          ; Pattern_Syntax # Pe       RIGHT DOUBLE ANGLE BRACKET
+300C          ; Pattern_Syntax # Ps       LEFT CORNER BRACKET
+300D          ; Pattern_Syntax # Pe       RIGHT CORNER BRACKET
+300E          ; Pattern_Syntax # Ps       LEFT WHITE CORNER BRACKET
+300F          ; Pattern_Syntax # Pe       RIGHT WHITE CORNER BRACKET
+3010          ; Pattern_Syntax # Ps       LEFT BLACK LENTICULAR BRACKET
+3011          ; Pattern_Syntax # Pe       RIGHT BLACK LENTICULAR BRACKET
+3012..3013    ; Pattern_Syntax # So   [2] POSTAL MARK..GETA MARK
+3014          ; Pattern_Syntax # Ps       LEFT TORTOISE SHELL BRACKET
+3015          ; Pattern_Syntax # Pe       RIGHT TORTOISE SHELL BRACKET
+3016          ; Pattern_Syntax # Ps       LEFT WHITE LENTICULAR BRACKET
+3017          ; Pattern_Syntax # Pe       RIGHT WHITE LENTICULAR BRACKET
+3018          ; Pattern_Syntax # Ps       LEFT WHITE TORTOISE SHELL BRACKET
+3019          ; Pattern_Syntax # Pe       RIGHT WHITE TORTOISE SHELL BRACKET
+301A          ; Pattern_Syntax # Ps       LEFT WHITE SQUARE BRACKET
+301B          ; Pattern_Syntax # Pe       RIGHT WHITE SQUARE BRACKET
+301C          ; Pattern_Syntax # Pd       WAVE DASH
+301D          ; Pattern_Syntax # Ps       REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F    ; Pattern_Syntax # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020          ; Pattern_Syntax # So       POSTAL MARK FACE
+3030          ; Pattern_Syntax # Pd       WAVY DASH
+FD3E          ; Pattern_Syntax # Ps       ORNATE LEFT PARENTHESIS
+FD3F          ; Pattern_Syntax # Pe       ORNATE RIGHT PARENTHESIS
+FE45..FE46    ; Pattern_Syntax # Po   [2] SESAME DOT..WHITE SESAME DOT
+
+# Total code points: 2760
+
+# EOF
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/Scripts.txt b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/Scripts.txt
new file mode 100644 (file)
index 0000000..3ecf008
--- /dev/null
@@ -0,0 +1,1976 @@
+# Scripts-5.2.0.txt
+# Date: 2009-08-22, 04:58:43 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2009 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# It is ok to redistribute this file "solely for informational 
+# purposes in the creation of products supporting the Unicode Standard".
+# We don't nee to add a Boost License to this file: boostinspect:nolicense.
+
+# ================================================
+
+# Property:    Script
+
+#  All code points not explicitly listed for Script
+#  have the value Unknown (Zzzz).
+
+# @missing: 0000..10FFFF; Unknown
+
+# ================================================
+
+0000..001F    ; Common # Cc  [32] <control-0000>..<control-001F>
+0020          ; Common # Zs       SPACE
+0021..0023    ; Common # Po   [3] EXCLAMATION MARK..NUMBER SIGN
+0024          ; Common # Sc       DOLLAR SIGN
+0025..0027    ; Common # Po   [3] PERCENT SIGN..APOSTROPHE
+0028          ; Common # Ps       LEFT PARENTHESIS
+0029          ; Common # Pe       RIGHT PARENTHESIS
+002A          ; Common # Po       ASTERISK
+002B          ; Common # Sm       PLUS SIGN
+002C          ; Common # Po       COMMA
+002D          ; Common # Pd       HYPHEN-MINUS
+002E..002F    ; Common # Po   [2] FULL STOP..SOLIDUS
+0030..0039    ; Common # Nd  [10] DIGIT ZERO..DIGIT NINE
+003A..003B    ; Common # Po   [2] COLON..SEMICOLON
+003C..003E    ; Common # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040    ; Common # Po   [2] QUESTION MARK..COMMERCIAL AT
+005B          ; Common # Ps       LEFT SQUARE BRACKET
+005C          ; Common # Po       REVERSE SOLIDUS
+005D          ; Common # Pe       RIGHT SQUARE BRACKET
+005E          ; Common # Sk       CIRCUMFLEX ACCENT
+005F          ; Common # Pc       LOW LINE
+0060          ; Common # Sk       GRAVE ACCENT
+007B          ; Common # Ps       LEFT CURLY BRACKET
+007C          ; Common # Sm       VERTICAL LINE
+007D          ; Common # Pe       RIGHT CURLY BRACKET
+007E          ; Common # Sm       TILDE
+007F..009F    ; Common # Cc  [33] <control-007F>..<control-009F>
+00A0          ; Common # Zs       NO-BREAK SPACE
+00A1          ; Common # Po       INVERTED EXCLAMATION MARK
+00A2..00A5    ; Common # Sc   [4] CENT SIGN..YEN SIGN
+00A6..00A7    ; Common # So   [2] BROKEN BAR..SECTION SIGN
+00A8          ; Common # Sk       DIAERESIS
+00A9          ; Common # So       COPYRIGHT SIGN
+00AB          ; Common # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC          ; Common # Sm       NOT SIGN
+00AD          ; Common # Cf       SOFT HYPHEN
+00AE          ; Common # So       REGISTERED SIGN
+00AF          ; Common # Sk       MACRON
+00B0          ; Common # So       DEGREE SIGN
+00B1          ; Common # Sm       PLUS-MINUS SIGN
+00B2..00B3    ; Common # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4          ; Common # Sk       ACUTE ACCENT
+00B5          ; Common # L&       MICRO SIGN
+00B6          ; Common # So       PILCROW SIGN
+00B7          ; Common # Po       MIDDLE DOT
+00B8          ; Common # Sk       CEDILLA
+00B9          ; Common # No       SUPERSCRIPT ONE
+00BB          ; Common # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE    ; Common # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF          ; Common # Po       INVERTED QUESTION MARK
+00D7          ; Common # Sm       MULTIPLICATION SIGN
+00F7          ; Common # Sm       DIVISION SIGN
+02B9..02C1    ; Common # Lm   [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5    ; Common # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1    ; Common # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF    ; Common # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E5..02EB    ; Common # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC          ; Common # Lm       MODIFIER LETTER VOICING
+02ED          ; Common # Sk       MODIFIER LETTER UNASPIRATED
+02EE          ; Common # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF    ; Common # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0374          ; Common # Lm       GREEK NUMERAL SIGN
+037E          ; Common # Po       GREEK QUESTION MARK
+0385          ; Common # Sk       GREEK DIALYTIKA TONOS
+0387          ; Common # Po       GREEK ANO TELEIA
+0589          ; Common # Po       ARMENIAN FULL STOP
+0600..0603    ; Common # Cf   [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+060C          ; Common # Po       ARABIC COMMA
+061B          ; Common # Po       ARABIC SEMICOLON
+061F          ; Common # Po       ARABIC QUESTION MARK
+0640          ; Common # Lm       ARABIC TATWEEL
+0660..0669    ; Common # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+06DD          ; Common # Cf       ARABIC END OF AYAH
+0964..0965    ; Common # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0970          ; Common # Po       DEVANAGARI ABBREVIATION SIGN
+0CF1..0CF2    ; Common # So   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0E3F          ; Common # Sc       THAI CURRENCY SYMBOL BAHT
+0FD5..0FD8    ; Common # So   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+10FB          ; Common # Po       GEORGIAN PARAGRAPH SEPARATOR
+16EB..16ED    ; Common # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+1735..1736    ; Common # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1802..1803    ; Common # Po   [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
+1805          ; Common # Po       MONGOLIAN FOUR DOTS
+1CD3          ; Common # Po       VEDIC SIGN NIHSHVASA
+1CE1          ; Common # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE9..1CEC    ; Common # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF1    ; Common # Lo   [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CF2          ; Common # Mc       VEDIC SIGN ARDHAVISARGA
+2000..200A    ; Common # Zs  [11] EN QUAD..HAIR SPACE
+200B          ; Common # Cf       ZERO WIDTH SPACE
+200E..200F    ; Common # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2010..2015    ; Common # Pd   [6] HYPHEN..HORIZONTAL BAR
+2016..2017    ; Common # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018          ; Common # Pi       LEFT SINGLE QUOTATION MARK
+2019          ; Common # Pf       RIGHT SINGLE QUOTATION MARK
+201A          ; Common # Ps       SINGLE LOW-9 QUOTATION MARK
+201B..201C    ; Common # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D          ; Common # Pf       RIGHT DOUBLE QUOTATION MARK
+201E          ; Common # Ps       DOUBLE LOW-9 QUOTATION MARK
+201F          ; Common # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027    ; Common # Po   [8] DAGGER..HYPHENATION POINT
+2028          ; Common # Zl       LINE SEPARATOR
+2029          ; Common # Zp       PARAGRAPH SEPARATOR
+202A..202E    ; Common # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F          ; Common # Zs       NARROW NO-BREAK SPACE
+2030..2038    ; Common # Po   [9] PER MILLE SIGN..CARET
+2039          ; Common # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A          ; Common # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E    ; Common # Po   [4] REFERENCE MARK..OVERLINE
+203F..2040    ; Common # Pc   [2] UNDERTIE..CHARACTER TIE
+2041..2043    ; Common # Po   [3] CARET INSERTION POINT..HYPHEN BULLET
+2044          ; Common # Sm       FRACTION SLASH
+2045          ; Common # Ps       LEFT SQUARE BRACKET WITH QUILL
+2046          ; Common # Pe       RIGHT SQUARE BRACKET WITH QUILL
+2047..2051    ; Common # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052          ; Common # Sm       COMMERCIAL MINUS SIGN
+2053          ; Common # Po       SWUNG DASH
+2054          ; Common # Pc       INVERTED UNDERTIE
+2055..205E    ; Common # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F          ; Common # Zs       MEDIUM MATHEMATICAL SPACE
+2060..2064    ; Common # Cf   [5] WORD JOINER..INVISIBLE PLUS
+206A..206F    ; Common # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2070          ; Common # No       SUPERSCRIPT ZERO
+2074..2079    ; Common # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C    ; Common # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D          ; Common # Ps       SUPERSCRIPT LEFT PARENTHESIS
+207E          ; Common # Pe       SUPERSCRIPT RIGHT PARENTHESIS
+2080..2089    ; Common # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C    ; Common # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D          ; Common # Ps       SUBSCRIPT LEFT PARENTHESIS
+208E          ; Common # Pe       SUBSCRIPT RIGHT PARENTHESIS
+20A0..20B8    ; Common # Sc  [25] EURO-CURRENCY SIGN..TENGE SIGN
+2100..2101    ; Common # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102          ; Common # L&       DOUBLE-STRUCK CAPITAL C
+2103..2106    ; Common # So   [4] DEGREE CELSIUS..CADA UNA
+2107          ; Common # L&       EULER CONSTANT
+2108..2109    ; Common # So   [2] SCRUPLE..DEGREE FAHRENHEIT
+210A..2113    ; Common # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2114          ; Common # So       L B BAR SYMBOL
+2115          ; Common # L&       DOUBLE-STRUCK CAPITAL N
+2116..2118    ; Common # So   [3] NUMERO SIGN..SCRIPT CAPITAL P
+2119..211D    ; Common # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2123    ; Common # So   [6] PRESCRIPTION TAKE..VERSICLE
+2124          ; Common # L&       DOUBLE-STRUCK CAPITAL Z
+2125          ; Common # So       OUNCE SIGN
+2127          ; Common # So       INVERTED OHM SIGN
+2128          ; Common # L&       BLACK-LETTER CAPITAL Z
+2129          ; Common # So       TURNED GREEK SMALL LETTER IOTA
+212C..212D    ; Common # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212E          ; Common # So       ESTIMATED SYMBOL
+212F..2131    ; Common # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134    ; Common # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138    ; Common # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+2139          ; Common # L&       INFORMATION SOURCE
+213A..213B    ; Common # So   [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F    ; Common # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144    ; Common # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149    ; Common # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A          ; Common # So       PROPERTY LINE
+214B          ; Common # Sm       TURNED AMPERSAND
+214C..214D    ; Common # So   [2] PER SIGN..AKTIESELSKAB
+214F          ; Common # So       SYMBOL FOR SAMARITAN SOURCE
+2150..215F    ; Common # No  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2189          ; Common # No       VULGAR FRACTION ZERO THIRDS
+2190..2194    ; Common # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199    ; Common # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B    ; Common # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F    ; Common # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0          ; Common # Sm       RIGHTWARDS TWO HEADED ARROW
+21A1..21A2    ; Common # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3          ; Common # Sm       RIGHTWARDS ARROW WITH TAIL
+21A4..21A5    ; Common # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6          ; Common # Sm       RIGHTWARDS ARROW FROM BAR
+21A7..21AD    ; Common # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE          ; Common # Sm       LEFT RIGHT ARROW WITH STROKE
+21AF..21CD    ; Common # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF    ; Common # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Common # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2          ; Common # Sm       RIGHTWARDS DOUBLE ARROW
+21D3          ; Common # So       DOWNWARDS DOUBLE ARROW
+21D4          ; Common # Sm       LEFT RIGHT DOUBLE ARROW
+21D5..21F3    ; Common # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF    ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307    ; Common # So   [8] DIAMETER SIGN..WAVY LINE
+2308..230B    ; Common # Sm   [4] LEFT CEILING..RIGHT FLOOR
+230C..231F    ; Common # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321    ; Common # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328    ; Common # So   [7] FROWN..KEYBOARD
+2329          ; Common # Ps       LEFT-POINTING ANGLE BRACKET
+232A          ; Common # Pe       RIGHT-POINTING ANGLE BRACKET
+232B..237B    ; Common # So  [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C          ; Common # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A    ; Common # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3    ; Common # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB    ; Common # So  [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1    ; Common # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..23E8    ; Common # So   [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
+2400..2426    ; Common # So  [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A    ; Common # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B    ; Common # No  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9    ; Common # So  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FF    ; Common # No  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6    ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7          ; Common # Sm       WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0    ; Common # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1          ; Common # Sm       WHITE LEFT-POINTING TRIANGLE
+25C2..25F7    ; Common # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF    ; Common # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E    ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F          ; Common # Sm       MUSIC SHARP SIGN
+2670..26CD    ; Common # So  [94] WEST SYRIAC CROSS..DISABLED CAR
+26CF..26E1    ; Common # So  [19] PICK..RESTRICTED LEFT ENTRY-2
+26E3          ; Common # So       HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E8..26FF    ; Common # So  [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2701..2704    ; Common # So   [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2706..2709    ; Common # So   [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270C..2727    ; Common # So  [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2729..274B    ; Common # So  [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D          ; Common # So       SHADOWED WHITE CIRCLE
+274F..2752    ; Common # So   [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2756..275E    ; Common # So   [9] BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761..2767    ; Common # So   [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768          ; Common # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT
+2769          ; Common # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A          ; Common # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B          ; Common # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C          ; Common # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D          ; Common # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E          ; Common # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F          ; Common # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770          ; Common # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771          ; Common # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772          ; Common # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773          ; Common # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774          ; Common # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775          ; Common # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793    ; Common # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794          ; Common # So       HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798..27AF    ; Common # So  [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1..27BE    ; Common # So  [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27C0..27C4    ; Common # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5          ; Common # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Common # Pe       RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Common # Sm   [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CC          ; Common # Sm       LONG DIVISION
+27D0..27E5    ; Common # Sm  [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6          ; Common # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Common # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Common # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Common # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Common # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Common # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Common # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Common # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Common # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Common # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Common # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982    ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983          ; Common # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Common # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Common # Ps       LEFT WHITE PARENTHESIS
+2986          ; Common # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Common # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Common # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Common # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Common # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Common # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Common # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Common # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Common # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Common # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Common # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Common # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Common # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Common # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Common # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Common # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Common # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Common # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Common # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7    ; Common # Sm  [63] DOTTED FENCE..BLACK HOURGLASS
+29D8          ; Common # Ps       LEFT WIGGLY FENCE
+29D9          ; Common # Pe       RIGHT WIGGLY FENCE
+29DA          ; Common # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Common # Pe       RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB    ; Common # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC          ; Common # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Common # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF    ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F    ; Common # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44    ; Common # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46    ; Common # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C    ; Common # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B50..2B59    ; Common # So  [10] WHITE MEDIUM STAR..HEAVY CIRCLED SALTIRE
+2E00..2E01    ; Common # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02          ; Common # Pi       LEFT SUBSTITUTION BRACKET
+2E03          ; Common # Pf       RIGHT SUBSTITUTION BRACKET
+2E04          ; Common # Pi       LEFT DOTTED SUBSTITUTION BRACKET
+2E05          ; Common # Pf       RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08    ; Common # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09          ; Common # Pi       LEFT TRANSPOSITION BRACKET
+2E0A          ; Common # Pf       RIGHT TRANSPOSITION BRACKET
+2E0B          ; Common # Po       RAISED SQUARE
+2E0C          ; Common # Pi       LEFT RAISED OMISSION BRACKET
+2E0D          ; Common # Pf       RIGHT RAISED OMISSION BRACKET
+2E0E..2E16    ; Common # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17          ; Common # Pd       DOUBLE OBLIQUE HYPHEN
+2E18..2E19    ; Common # Po   [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A          ; Common # Pd       HYPHEN WITH DIAERESIS
+2E1B          ; Common # Po       TILDE WITH RING ABOVE
+2E1C          ; Common # Pi       LEFT LOW PARAPHRASE BRACKET
+2E1D          ; Common # Pf       RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F    ; Common # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20          ; Common # Pi       LEFT VERTICAL BAR WITH QUILL
+2E21          ; Common # Pf       RIGHT VERTICAL BAR WITH QUILL
+2E22          ; Common # Ps       TOP LEFT HALF BRACKET
+2E23          ; Common # Pe       TOP RIGHT HALF BRACKET
+2E24          ; Common # Ps       BOTTOM LEFT HALF BRACKET
+2E25          ; Common # Pe       BOTTOM RIGHT HALF BRACKET
+2E26          ; Common # Ps       LEFT SIDEWAYS U BRACKET
+2E27          ; Common # Pe       RIGHT SIDEWAYS U BRACKET
+2E28          ; Common # Ps       LEFT DOUBLE PARENTHESIS
+2E29          ; Common # Pe       RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E    ; Common # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F          ; Common # Lm       VERTICAL TILDE
+2E30..2E31    ; Common # Po   [2] RING POINT..WORD SEPARATOR MIDDLE DOT
+2FF0..2FFB    ; Common # So  [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000          ; Common # Zs       IDEOGRAPHIC SPACE
+3001..3003    ; Common # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004          ; Common # So       JAPANESE INDUSTRIAL STANDARD SYMBOL
+3006          ; Common # Lo       IDEOGRAPHIC CLOSING MARK
+3008          ; Common # Ps       LEFT ANGLE BRACKET
+3009          ; Common # Pe       RIGHT ANGLE BRACKET
+300A          ; Common # Ps       LEFT DOUBLE ANGLE BRACKET
+300B          ; Common # Pe       RIGHT DOUBLE ANGLE BRACKET
+300C          ; Common # Ps       LEFT CORNER BRACKET
+300D          ; Common # Pe       RIGHT CORNER BRACKET
+300E          ; Common # Ps       LEFT WHITE CORNER BRACKET
+300F          ; Common # Pe       RIGHT WHITE CORNER BRACKET
+3010          ; Common # Ps       LEFT BLACK LENTICULAR BRACKET
+3011          ; Common # Pe       RIGHT BLACK LENTICULAR BRACKET
+3012..3013    ; Common # So   [2] POSTAL MARK..GETA MARK
+3014          ; Common # Ps       LEFT TORTOISE SHELL BRACKET
+3015          ; Common # Pe       RIGHT TORTOISE SHELL BRACKET
+3016          ; Common # Ps       LEFT WHITE LENTICULAR BRACKET
+3017          ; Common # Pe       RIGHT WHITE LENTICULAR BRACKET
+3018          ; Common # Ps       LEFT WHITE TORTOISE SHELL BRACKET
+3019          ; Common # Pe       RIGHT WHITE TORTOISE SHELL BRACKET
+301A          ; Common # Ps       LEFT WHITE SQUARE BRACKET
+301B          ; Common # Pe       RIGHT WHITE SQUARE BRACKET
+301C          ; Common # Pd       WAVE DASH
+301D          ; Common # Ps       REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F    ; Common # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020          ; Common # So       POSTAL MARK FACE
+3030          ; Common # Pd       WAVY DASH
+3031..3035    ; Common # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037    ; Common # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303C          ; Common # Lo       MASU MARK
+303D          ; Common # Po       PART ALTERNATION MARK
+303E..303F    ; Common # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+309B..309C    ; Common # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0          ; Common # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB          ; Common # Po       KATAKANA MIDDLE DOT
+30FC          ; Common # Lm       KATAKANA-HIRAGANA PROLONGED SOUND MARK
+3190..3191    ; Common # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195    ; Common # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F    ; Common # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31C0..31E3    ; Common # So  [36] CJK STROKE T..CJK STROKE Q
+3220..3229    ; Common # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3250    ; Common # So  [39] PARENTHESIZED IDEOGRAPH MOON..PARTNERSHIP SIGN
+3251..325F    ; Common # No  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+327F          ; Common # So       KOREAN STANDARD SYMBOL
+3280..3289    ; Common # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0    ; Common # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF    ; Common # No  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32CF    ; Common # So  [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN
+3358..33FF    ; Common # So [168] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..SQUARE GAL
+4DC0..4DFF    ; Common # So  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A700..A716    ; Common # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F    ; Common # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721    ; Common # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A788          ; Common # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A    ; Common # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A830..A835    ; Common # No   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837    ; Common # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838          ; Common # Sc       NORTH INDIC RUPEE MARK
+A839          ; Common # So       NORTH INDIC QUANTITY MARK
+FD3E          ; Common # Ps       ORNATE LEFT PARENTHESIS
+FD3F          ; Common # Pe       ORNATE RIGHT PARENTHESIS
+FDFD          ; Common # So       ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE10..FE16    ; Common # Po   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19          ; Common # Po       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30          ; Common # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32    ; Common # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34    ; Common # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46    ; Common # Po   [2] SESAME DOT..WHITE SESAME DOT
+FE47          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C    ; Common # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F    ; Common # Pc   [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52    ; Common # Po   [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57    ; Common # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58          ; Common # Pd       SMALL EM DASH
+FE59          ; Common # Ps       SMALL LEFT PARENTHESIS
+FE5A          ; Common # Pe       SMALL RIGHT PARENTHESIS
+FE5B          ; Common # Ps       SMALL LEFT CURLY BRACKET
+FE5C          ; Common # Pe       SMALL RIGHT CURLY BRACKET
+FE5D          ; Common # Ps       SMALL LEFT TORTOISE SHELL BRACKET
+FE5E          ; Common # Pe       SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61    ; Common # Po   [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62          ; Common # Sm       SMALL PLUS SIGN
+FE63          ; Common # Pd       SMALL HYPHEN-MINUS
+FE64..FE66    ; Common # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68          ; Common # Po       SMALL REVERSE SOLIDUS
+FE69          ; Common # Sc       SMALL DOLLAR SIGN
+FE6A..FE6B    ; Common # Po   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FEFF          ; Common # Cf       ZERO WIDTH NO-BREAK SPACE
+FF01..FF03    ; Common # Po   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04          ; Common # Sc       FULLWIDTH DOLLAR SIGN
+FF05..FF07    ; Common # Po   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08          ; Common # Ps       FULLWIDTH LEFT PARENTHESIS
+FF09          ; Common # Pe       FULLWIDTH RIGHT PARENTHESIS
+FF0A          ; Common # Po       FULLWIDTH ASTERISK
+FF0B          ; Common # Sm       FULLWIDTH PLUS SIGN
+FF0C          ; Common # Po       FULLWIDTH COMMA
+FF0D          ; Common # Pd       FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F    ; Common # Po   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19    ; Common # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B    ; Common # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E    ; Common # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20    ; Common # Po   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF3B          ; Common # Ps       FULLWIDTH LEFT SQUARE BRACKET
+FF3C          ; Common # Po       FULLWIDTH REVERSE SOLIDUS
+FF3D          ; Common # Pe       FULLWIDTH RIGHT SQUARE BRACKET
+FF3E          ; Common # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF3F          ; Common # Pc       FULLWIDTH LOW LINE
+FF40          ; Common # Sk       FULLWIDTH GRAVE ACCENT
+FF5B          ; Common # Ps       FULLWIDTH LEFT CURLY BRACKET
+FF5C          ; Common # Sm       FULLWIDTH VERTICAL LINE
+FF5D          ; Common # Pe       FULLWIDTH RIGHT CURLY BRACKET
+FF5E          ; Common # Sm       FULLWIDTH TILDE
+FF5F          ; Common # Ps       FULLWIDTH LEFT WHITE PARENTHESIS
+FF60          ; Common # Pe       FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61          ; Common # Po       HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62          ; Common # Ps       HALFWIDTH LEFT CORNER BRACKET
+FF63          ; Common # Pe       HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65    ; Common # Po   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF70          ; Common # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F    ; Common # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE0..FFE1    ; Common # Sc   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2          ; Common # Sm       FULLWIDTH NOT SIGN
+FFE3          ; Common # Sk       FULLWIDTH MACRON
+FFE4          ; Common # So       FULLWIDTH BROKEN BAR
+FFE5..FFE6    ; Common # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8          ; Common # So       HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC    ; Common # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE    ; Common # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB    ; Common # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC..FFFD    ; Common # So   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10100..10101  ; Common # Po   [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
+10102         ; Common # So       AEGEAN CHECK MARK
+10107..10133  ; Common # No  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F  ; Common # So   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10190..1019B  ; Common # So  [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+101D0..101FC  ; Common # So  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+1D000..1D0F5  ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126  ; Common # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164  ; Common # So  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166  ; Common # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C  ; Common # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172  ; Common # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D173..1D17A  ; Common # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D183..1D184  ; Common # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9  ; Common # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1DD  ; Common # So  [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D300..1D356  ; Common # So  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D371  ; Common # No  [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1D400..1D454  ; Common # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Common # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Common # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Common # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Common # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Common # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Common # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Common # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Common # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Common # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Common # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Common # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Common # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Common # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Common # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Common # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Common # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Common # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Common # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1         ; Common # Sm       MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA  ; Common # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB         ; Common # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA  ; Common # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB         ; Common # Sm       MATHEMATICAL ITALIC NABLA
+1D6FC..1D714  ; Common # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715         ; Common # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734  ; Common # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735         ; Common # Sm       MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E  ; Common # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F         ; Common # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E  ; Common # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788  ; Common # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8  ; Common # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2  ; Common # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB  ; Common # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Common # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1F000..1F02B  ; Common # So  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F030..1F093  ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F100..1F10A  ; Common # No  [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E  ; Common # So  [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F131         ; Common # So       SQUARED LATIN CAPITAL LETTER B
+1F13D         ; Common # So       SQUARED LATIN CAPITAL LETTER N
+1F13F         ; Common # So       SQUARED LATIN CAPITAL LETTER P
+1F142         ; Common # So       SQUARED LATIN CAPITAL LETTER S
+1F146         ; Common # So       SQUARED LATIN CAPITAL LETTER W
+1F14A..1F14E  ; Common # So   [5] SQUARED HV..SQUARED PPV
+1F157         ; Common # So       NEGATIVE CIRCLED LATIN CAPITAL LETTER H
+1F15F         ; Common # So       NEGATIVE CIRCLED LATIN CAPITAL LETTER P
+1F179         ; Common # So       NEGATIVE SQUARED LATIN CAPITAL LETTER J
+1F17B..1F17C  ; Common # So   [2] NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M
+1F17F         ; Common # So       NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F18A..1F18D  ; Common # So   [4] CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA
+1F190         ; Common # So       SQUARE DJ
+1F210..1F231  ; Common # So  [34] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F240..1F248  ; Common # So   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+E0001         ; Common # Cf       LANGUAGE TAG
+E0020..E007F  ; Common # Cf  [96] TAG SPACE..CANCEL TAG
+
+# Total code points: 5395
+
+# ================================================
+
+0041..005A    ; Latin # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; Latin # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; Latin # L&       FEMININE ORDINAL INDICATOR
+00BA          ; Latin # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; Latin # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Latin # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; Latin # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; Latin # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; Latin # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; Latin # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; Latin # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; Latin # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8    ; Latin # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02E0..02E4    ; Latin # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+1D00..1D25    ; Latin # L&  [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN
+1D2C..1D5C    ; Latin # Lm  [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN
+1D62..1D65    ; Latin # L&   [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
+1D6B..1D77    ; Latin # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D79..1D9A    ; Latin # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBE    ; Latin # Lm  [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH
+1E00..1EFF    ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
+2071          ; Latin # Lm       SUPERSCRIPT LATIN SMALL LETTER I
+207F          ; Latin # Lm       SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094    ; Latin # Lm   [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+212A..212B    ; Latin # L&   [2] KELVIN SIGN..ANGSTROM SIGN
+2132          ; Latin # L&       TURNED CAPITAL F
+214E          ; Latin # L&       TURNED SMALL F
+2160..2182    ; Latin # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184    ; Latin # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188    ; Latin # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C60..2C7C    ; Latin # L&  [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
+2C7D          ; Latin # Lm       MODIFIER LETTER CAPITAL V
+2C7E..2C7F    ; Latin # L&   [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+A722..A76F    ; Latin # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770          ; Latin # Lm       MODIFIER LETTER US
+A771..A787    ; Latin # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A78B..A78C    ; Latin # L&   [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A7FB..A7FF    ; Latin # Lo   [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+FB00..FB06    ; Latin # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FF21..FF3A    ; Latin # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A    ; Latin # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+
+# Total code points: 1244
+
+# ================================================
+
+0370..0373    ; Greek # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0375          ; Greek # Sk       GREEK LOWER NUMERAL SIGN
+0376..0377    ; Greek # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Greek # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Greek # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0384          ; Greek # Sk       GREEK TONOS
+0386          ; Greek # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Greek # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Greek # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Greek # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03E1    ; Greek # L&  [63] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER SAMPI
+03F0..03F5    ; Greek # L&   [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6          ; Greek # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..03FF    ; Greek # L&   [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+1D26..1D2A    ; Greek # L&   [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI
+1D5D..1D61    ; Greek # Lm   [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI
+1D66..1D6A    ; Greek # L&   [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
+1DBF          ; Greek # Lm       MODIFIER LETTER SMALL THETA
+1F00..1F15    ; Greek # L&  [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Greek # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Greek # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Greek # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Greek # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D    ; Greek # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4    ; Greek # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC    ; Greek # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD          ; Greek # Sk       GREEK KORONIS
+1FBE          ; Greek # L&       GREEK PROSGEGRAMMENI
+1FBF..1FC1    ; Greek # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4    ; Greek # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC    ; Greek # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF    ; Greek # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3    ; Greek # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB    ; Greek # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF    ; Greek # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC    ; Greek # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF    ; Greek # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4    ; Greek # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC    ; Greek # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE    ; Greek # Sk   [2] GREEK OXIA..GREEK DASIA
+2126          ; Greek # L&       OHM SIGN
+10140..10174  ; Greek # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178  ; Greek # No   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189  ; Greek # So  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A         ; Greek # No       GREEK ZERO SIGN
+1D200..1D241  ; Greek # So  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244  ; Greek # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245         ; Greek # So       GREEK MUSICAL LEIMMA
+
+# Total code points: 511
+
+# ================================================
+
+0400..0481    ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
+0482          ; Cyrillic # So       CYRILLIC THOUSANDS SIGN
+0483..0484    ; Cyrillic # Mn   [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION
+0487          ; Cyrillic # Mn       COMBINING CYRILLIC POKRYTIE
+0488..0489    ; Cyrillic # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+048A..0525    ; Cyrillic # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER
+1D2B          ; Cyrillic # L&       CYRILLIC LETTER SMALL CAPITAL EL
+1D78          ; Cyrillic # Lm       MODIFIER LETTER CYRILLIC EN
+2DE0..2DFF    ; Cyrillic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+A640..A65F    ; Cyrillic # L&  [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A662..A66D    ; Cyrillic # L&  [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E          ; Cyrillic # Lo       CYRILLIC LETTER MULTIOCULAR O
+A66F          ; Cyrillic # Mn       COMBINING CYRILLIC VZMET
+A670..A672    ; Cyrillic # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673          ; Cyrillic # Po       SLAVONIC ASTERISK
+A67C..A67D    ; Cyrillic # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A67E          ; Cyrillic # Po       CYRILLIC KAVYKA
+A67F          ; Cyrillic # Lm       CYRILLIC PAYEROK
+A680..A697    ; Cyrillic # L&  [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+
+# Total code points: 404
+
+# ================================================
+
+0531..0556    ; Armenian # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Armenian # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F    ; Armenian # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0561..0587    ; Armenian # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+058A          ; Armenian # Pd       ARMENIAN HYPHEN
+FB13..FB17    ; Armenian # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+
+# Total code points: 90
+
+# ================================================
+
+0591..05BD    ; Hebrew # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BE          ; Hebrew # Pd       HEBREW PUNCTUATION MAQAF
+05BF          ; Hebrew # Mn       HEBREW POINT RAFE
+05C0          ; Hebrew # Po       HEBREW PUNCTUATION PASEQ
+05C1..05C2    ; Hebrew # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C3          ; Hebrew # Po       HEBREW PUNCTUATION SOF PASUQ
+05C4..05C5    ; Hebrew # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6          ; Hebrew # Po       HEBREW PUNCTUATION NUN HAFUKHA
+05C7          ; Hebrew # Mn       HEBREW POINT QAMATS QATAN
+05D0..05EA    ; Hebrew # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; Hebrew # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4    ; Hebrew # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+FB1D          ; Hebrew # Lo       HEBREW LETTER YOD WITH HIRIQ
+FB1E          ; Hebrew # Mn       HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28    ; Hebrew # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29          ; Hebrew # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36    ; Hebrew # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; Hebrew # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; Hebrew # Lo       HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; Hebrew # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; Hebrew # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F    ; Hebrew # Lo  [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+
+# Total code points: 133
+
+# ================================================
+
+0606..0608    ; Arabic # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A    ; Arabic # Po   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B          ; Arabic # Sc       AFGHANI SIGN
+060D          ; Arabic # Po       ARABIC DATE SEPARATOR
+060E..060F    ; Arabic # So   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+0610..061A    ; Arabic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061E          ; Arabic # Po       ARABIC TRIPLE DOT PUNCTUATION MARK
+0621..063F    ; Arabic # Lo  [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0641..064A    ; Arabic # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0656..065E    ; Arabic # Mn   [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
+066A..066D    ; Arabic # Po   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F    ; Arabic # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3    ; Arabic # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4          ; Arabic # Po       ARABIC FULL STOP
+06D5          ; Arabic # Lo       ARABIC LETTER AE
+06D6..06DC    ; Arabic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DE          ; Arabic # Me       ARABIC START OF RUB EL HIZB
+06DF..06E4    ; Arabic # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; Arabic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; Arabic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06E9          ; Arabic # So       ARABIC PLACE OF SAJDAH
+06EA..06ED    ; Arabic # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF    ; Arabic # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; Arabic # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC    ; Arabic # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE    ; Arabic # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF          ; Arabic # Lo       ARABIC LETTER HEH WITH INVERTED V
+0750..077F    ; Arabic # Lo  [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+FB50..FBB1    ; Arabic # Lo  [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; Arabic # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; Arabic # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; Arabic # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC          ; Arabic # Sc       RIAL SIGN
+FE70..FE74    ; Arabic # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+10E60..10E7E  ; Arabic # No  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+
+# Total code points: 1030
+
+# ================================================
+
+0700..070D    ; Syriac # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F          ; Syriac # Cf       SYRIAC ABBREVIATION MARK
+0710          ; Syriac # Lo       SYRIAC LETTER ALAPH
+0711          ; Syriac # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F    ; Syriac # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A    ; Syriac # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..074F    ; Syriac # Lo   [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+
+# Total code points: 77
+
+# ================================================
+
+0780..07A5    ; Thaana # Lo  [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07A6..07B0    ; Thaana # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07B1          ; Thaana # Lo       THAANA LETTER NAA
+
+# Total code points: 50
+
+# ================================================
+
+0900..0902    ; Devanagari # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; Devanagari # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; Devanagari # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093C          ; Devanagari # Mn       DEVANAGARI SIGN NUKTA
+093D          ; Devanagari # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; Devanagari # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; Devanagari # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; Devanagari # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D          ; Devanagari # Mn       DEVANAGARI SIGN VIRAMA
+094E          ; Devanagari # Mc       DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0950          ; Devanagari # Lo       DEVANAGARI OM
+0953..0955    ; Devanagari # Mn   [3] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN CANDRA LONG E
+0958..0961    ; Devanagari # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963    ; Devanagari # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F    ; Devanagari # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971          ; Devanagari # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972          ; Devanagari # Lo       DEVANAGARI LETTER CANDRA A
+0979..097F    ; Devanagari # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+A8E0..A8F1    ; Devanagari # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7    ; Devanagari # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA    ; Devanagari # Po   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB          ; Devanagari # Lo       DEVANAGARI HEADSTROKE
+
+# Total code points: 140
+
+# ================================================
+
+0981          ; Bengali # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; Bengali # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; Bengali # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Bengali # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Bengali # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Bengali # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Bengali # Lo       BENGALI LETTER LA
+09B6..09B9    ; Bengali # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC          ; Bengali # Mn       BENGALI SIGN NUKTA
+09BD          ; Bengali # Lo       BENGALI SIGN AVAGRAHA
+09BE..09C0    ; Bengali # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; Bengali # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Bengali # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; Bengali # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD          ; Bengali # Mn       BENGALI SIGN VIRAMA
+09CE          ; Bengali # Lo       BENGALI LETTER KHANDA TA
+09D7          ; Bengali # Mc       BENGALI AU LENGTH MARK
+09DC..09DD    ; Bengali # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; Bengali # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3    ; Bengali # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF    ; Bengali # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1    ; Bengali # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3    ; Bengali # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9    ; Bengali # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA          ; Bengali # So       BENGALI ISSHAR
+09FB          ; Bengali # Sc       BENGALI GANDA MARK
+
+# Total code points: 92
+
+# ================================================
+
+0A01..0A02    ; Gurmukhi # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; Gurmukhi # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Gurmukhi # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Gurmukhi # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Gurmukhi # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Gurmukhi # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; Gurmukhi # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; Gurmukhi # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; Gurmukhi # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C          ; Gurmukhi # Mn       GURMUKHI SIGN NUKTA
+0A3E..0A40    ; Gurmukhi # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; Gurmukhi # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Gurmukhi # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; Gurmukhi # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51          ; Gurmukhi # Mn       GURMUKHI SIGN UDAAT
+0A59..0A5C    ; Gurmukhi # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E          ; Gurmukhi # Lo       GURMUKHI LETTER FA
+0A66..0A6F    ; Gurmukhi # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71    ; Gurmukhi # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74    ; Gurmukhi # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75          ; Gurmukhi # Mn       GURMUKHI SIGN YAKASH
+
+# Total code points: 79
+
+# ================================================
+
+0A81..0A82    ; Gujarati # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83          ; Gujarati # Mc       GUJARATI SIGN VISARGA
+0A85..0A8D    ; Gujarati # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; Gujarati # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; Gujarati # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; Gujarati # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; Gujarati # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; Gujarati # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC          ; Gujarati # Mn       GUJARATI SIGN NUKTA
+0ABD          ; Gujarati # Lo       GUJARATI SIGN AVAGRAHA
+0ABE..0AC0    ; Gujarati # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5    ; Gujarati # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8    ; Gujarati # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9          ; Gujarati # Mc       GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC    ; Gujarati # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD          ; Gujarati # Mn       GUJARATI SIGN VIRAMA
+0AD0          ; Gujarati # Lo       GUJARATI OM
+0AE0..0AE1    ; Gujarati # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3    ; Gujarati # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF    ; Gujarati # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF1          ; Gujarati # Sc       GUJARATI RUPEE SIGN
+
+# Total code points: 83
+
+# ================================================
+
+0B01          ; Oriya # Mn       ORIYA SIGN CANDRABINDU
+0B02..0B03    ; Oriya # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C    ; Oriya # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; Oriya # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; Oriya # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; Oriya # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; Oriya # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39    ; Oriya # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C          ; Oriya # Mn       ORIYA SIGN NUKTA
+0B3D          ; Oriya # Lo       ORIYA SIGN AVAGRAHA
+0B3E          ; Oriya # Mc       ORIYA VOWEL SIGN AA
+0B3F          ; Oriya # Mn       ORIYA VOWEL SIGN I
+0B40          ; Oriya # Mc       ORIYA VOWEL SIGN II
+0B41..0B44    ; Oriya # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48    ; Oriya # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C    ; Oriya # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D          ; Oriya # Mn       ORIYA SIGN VIRAMA
+0B56          ; Oriya # Mn       ORIYA AI LENGTH MARK
+0B57          ; Oriya # Mc       ORIYA AU LENGTH MARK
+0B5C..0B5D    ; Oriya # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61    ; Oriya # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63    ; Oriya # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F    ; Oriya # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70          ; Oriya # So       ORIYA ISSHAR
+0B71          ; Oriya # Lo       ORIYA LETTER WA
+
+# Total code points: 84
+
+# ================================================
+
+0B82          ; Tamil # Mn       TAMIL SIGN ANUSVARA
+0B83          ; Tamil # Lo       TAMIL SIGN VISARGA
+0B85..0B8A    ; Tamil # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; Tamil # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; Tamil # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; Tamil # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; Tamil # Lo       TAMIL LETTER JA
+0B9E..0B9F    ; Tamil # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; Tamil # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; Tamil # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9    ; Tamil # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF    ; Tamil # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0          ; Tamil # Mn       TAMIL VOWEL SIGN II
+0BC1..0BC2    ; Tamil # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Tamil # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC    ; Tamil # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD          ; Tamil # Mn       TAMIL SIGN VIRAMA
+0BD0          ; Tamil # Lo       TAMIL OM
+0BD7          ; Tamil # Mc       TAMIL AU LENGTH MARK
+0BE6..0BEF    ; Tamil # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2    ; Tamil # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8    ; Tamil # So   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9          ; Tamil # Sc       TAMIL RUPEE SIGN
+0BFA          ; Tamil # So       TAMIL NUMBER SIGN
+
+# Total code points: 72
+
+# ================================================
+
+0C01..0C03    ; Telugu # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C    ; Telugu # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; Telugu # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; Telugu # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; Telugu # Lo  [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; Telugu # Lo   [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; Telugu # Lo       TELUGU SIGN AVAGRAHA
+0C3E..0C40    ; Telugu # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44    ; Telugu # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; Telugu # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; Telugu # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; Telugu # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C59    ; Telugu # Lo   [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C60..0C61    ; Telugu # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63    ; Telugu # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F    ; Telugu # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C78..0C7E    ; Telugu # No   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F          ; Telugu # So       TELUGU SIGN TUUMU
+
+# Total code points: 93
+
+# ================================================
+
+0C82..0C83    ; Kannada # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; Kannada # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; Kannada # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; Kannada # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; Kannada # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; Kannada # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC          ; Kannada # Mn       KANNADA SIGN NUKTA
+0CBD          ; Kannada # Lo       KANNADA SIGN AVAGRAHA
+0CBE          ; Kannada # Mc       KANNADA VOWEL SIGN AA
+0CBF          ; Kannada # Mn       KANNADA VOWEL SIGN I
+0CC0..0CC4    ; Kannada # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6          ; Kannada # Mn       KANNADA VOWEL SIGN E
+0CC7..0CC8    ; Kannada # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB    ; Kannada # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD    ; Kannada # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; Kannada # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE          ; Kannada # Lo       KANNADA LETTER FA
+0CE0..0CE1    ; Kannada # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; Kannada # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF    ; Kannada # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+
+# Total code points: 84
+
+# ================================================
+
+0D02..0D03    ; Malayalam # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; Malayalam # Lo   [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; Malayalam # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; Malayalam # Lo  [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39    ; Malayalam # Lo  [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3D          ; Malayalam # Lo       MALAYALAM SIGN AVAGRAHA
+0D3E..0D40    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44    ; Malayalam # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D          ; Malayalam # Mn       MALAYALAM SIGN VIRAMA
+0D57          ; Malayalam # Mc       MALAYALAM AU LENGTH MARK
+0D60..0D61    ; Malayalam # Lo   [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D62..0D63    ; Malayalam # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F    ; Malayalam # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D75    ; Malayalam # No   [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
+0D79          ; Malayalam # So       MALAYALAM DATE MARK
+0D7A..0D7F    ; Malayalam # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+
+# Total code points: 95
+
+# ================================================
+
+0D82..0D83    ; Sinhala # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96    ; Sinhala # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1    ; Sinhala # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; Sinhala # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; Sinhala # Lo       SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; Sinhala # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA          ; Sinhala # Mn       SINHALA SIGN AL-LAKUNA
+0DCF..0DD1    ; Sinhala # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4    ; Sinhala # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Sinhala # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF    ; Sinhala # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3    ; Sinhala # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4          ; Sinhala # Po       SINHALA PUNCTUATION KUNDDALIYA
+
+# Total code points: 80
+
+# ================================================
+
+0E01..0E30    ; Thai # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31          ; Thai # Mn       THAI CHARACTER MAI HAN-AKAT
+0E32..0E33    ; Thai # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A    ; Thai # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45    ; Thai # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46          ; Thai # Lm       THAI CHARACTER MAIYAMOK
+0E47..0E4E    ; Thai # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E4F          ; Thai # Po       THAI CHARACTER FONGMAN
+0E50..0E59    ; Thai # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B    ; Thai # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+
+# Total code points: 86
+
+# ================================================
+
+0E81..0E82    ; Lao # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; Lao # Lo       LAO LETTER KHO TAM
+0E87..0E88    ; Lao # Lo   [2] LAO LETTER NGO..LAO LETTER CO
+0E8A          ; Lao # Lo       LAO LETTER SO TAM
+0E8D          ; Lao # Lo       LAO LETTER NYO
+0E94..0E97    ; Lao # Lo   [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F    ; Lao # Lo   [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3    ; Lao # Lo   [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; Lao # Lo       LAO LETTER LO LOOT
+0EA7          ; Lao # Lo       LAO LETTER WO
+0EAA..0EAB    ; Lao # Lo   [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0    ; Lao # Lo   [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB1          ; Lao # Mn       LAO VOWEL SIGN MAI KAN
+0EB2..0EB3    ; Lao # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9    ; Lao # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC    ; Lao # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD          ; Lao # Lo       LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; Lao # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; Lao # Lm       LAO KO LA
+0EC8..0ECD    ; Lao # Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9    ; Lao # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD    ; Lao # Lo   [2] LAO HO NO..LAO HO MO
+
+# Total code points: 65
+
+# ================================================
+
+0F00          ; Tibetan # Lo       TIBETAN SYLLABLE OM
+0F01..0F03    ; Tibetan # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12    ; Tibetan # Po  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13..0F17    ; Tibetan # So   [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18..0F19    ; Tibetan # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A..0F1F    ; Tibetan # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29    ; Tibetan # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33    ; Tibetan # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34          ; Tibetan # So       TIBETAN MARK BSDUS RTAGS
+0F35          ; Tibetan # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36          ; Tibetan # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37          ; Tibetan # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38          ; Tibetan # So       TIBETAN MARK CHE MGO
+0F39          ; Tibetan # Mn       TIBETAN MARK TSA -PHRU
+0F3A          ; Tibetan # Ps       TIBETAN MARK GUG RTAGS GYON
+0F3B          ; Tibetan # Pe       TIBETAN MARK GUG RTAGS GYAS
+0F3C          ; Tibetan # Ps       TIBETAN MARK ANG KHANG GYON
+0F3D          ; Tibetan # Pe       TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F    ; Tibetan # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47    ; Tibetan # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C    ; Tibetan # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E    ; Tibetan # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F          ; Tibetan # Mc       TIBETAN SIGN RNAM BCAD
+0F80..0F84    ; Tibetan # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F85          ; Tibetan # Po       TIBETAN MARK PALUTA
+0F86..0F87    ; Tibetan # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8B    ; Tibetan # Lo   [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0F90..0F97    ; Tibetan # Mn   [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC    ; Tibetan # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE..0FC5    ; Tibetan # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC6          ; Tibetan # Mn       TIBETAN SYMBOL PADMA GDAN
+0FC7..0FCC    ; Tibetan # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF    ; Tibetan # So   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD4    ; Tibetan # Po   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+
+# Total code points: 201
+
+# ================================================
+
+1000..102A    ; Myanmar # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030    ; Myanmar # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031          ; Myanmar # Mc       MYANMAR VOWEL SIGN E
+1032..1037    ; Myanmar # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038          ; Myanmar # Mc       MYANMAR SIGN VISARGA
+1039..103A    ; Myanmar # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C    ; Myanmar # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E    ; Myanmar # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F          ; Myanmar # Lo       MYANMAR LETTER GREAT SA
+1040..1049    ; Myanmar # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F    ; Myanmar # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055    ; Myanmar # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059    ; Myanmar # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D    ; Myanmar # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060    ; Myanmar # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061          ; Myanmar # Lo       MYANMAR LETTER SGAW KAREN SHA
+1062..1064    ; Myanmar # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066    ; Myanmar # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D    ; Myanmar # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070    ; Myanmar # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074    ; Myanmar # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081    ; Myanmar # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082          ; Myanmar # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086    ; Myanmar # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C    ; Myanmar # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D          ; Myanmar # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E          ; Myanmar # Lo       MYANMAR LETTER RUMAI PALAUNG FA
+108F          ; Myanmar # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099    ; Myanmar # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C    ; Myanmar # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D          ; Myanmar # Mn       MYANMAR VOWEL SIGN AITON AI
+109E..109F    ; Myanmar # So   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+AA60..AA6F    ; Myanmar # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70          ; Myanmar # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76    ; Myanmar # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79    ; Myanmar # So   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A          ; Myanmar # Lo       MYANMAR LETTER AITON RA
+AA7B          ; Myanmar # Mc       MYANMAR SIGN PAO KAREN TONE
+
+# Total code points: 188
+
+# ================================================
+
+10A0..10C5    ; Georgian # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA    ; Georgian # Lo  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC          ; Georgian # Lm       MODIFIER LETTER GEORGIAN NAR
+2D00..2D25    ; Georgian # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+
+# Total code points: 120
+
+# ================================================
+
+1100..11FF    ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
+3131..318E    ; Hangul # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3200..321E    ; Hangul # So  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3260..327E    ; Hangul # So  [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
+A960..A97C    ; Hangul # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+AC00..D7A3    ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6    ; Hangul # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; Hangul # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+FFA0..FFBE    ; Hangul # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; Hangul # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+
+# Total code points: 11737
+
+# ================================================
+
+1200..1248    ; Ethiopic # Lo  [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+124A..124D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; Ethiopic # Lo       ETHIOPIC SYLLABLE QHWA
+125A..125D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288    ; Ethiopic # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0    ; Ethiopic # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; Ethiopic # Lo       ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6    ; Ethiopic # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310    ; Ethiopic # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A    ; Ethiopic # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F          ; Ethiopic # Mn       ETHIOPIC COMBINING GEMINATION MARK
+1360          ; Ethiopic # So       ETHIOPIC SECTION MARK
+1361..1368    ; Ethiopic # Po   [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C    ; Ethiopic # No  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F    ; Ethiopic # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399    ; Ethiopic # So  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+2D80..2D96    ; Ethiopic # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+
+# Total code points: 461
+
+# ================================================
+
+13A0..13F4    ; Cherokee # Lo  [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+
+# Total code points: 85
+
+# ================================================
+
+1400          ; Canadian_Aboriginal # Pd       CANADIAN SYLLABICS HYPHEN
+1401..166C    ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D..166E    ; Canadian_Aboriginal # Po   [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+166F..167F    ; Canadian_Aboriginal # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+18B0..18F5    ; Canadian_Aboriginal # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+
+# Total code points: 710
+
+# ================================================
+
+1680          ; Ogham # Zs       OGHAM SPACE MARK
+1681..169A    ; Ogham # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B          ; Ogham # Ps       OGHAM FEATHER MARK
+169C          ; Ogham # Pe       OGHAM REVERSED FEATHER MARK
+
+# Total code points: 29
+
+# ================================================
+
+16A0..16EA    ; Runic # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; Runic # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+
+# Total code points: 78
+
+# ================================================
+
+1780..17B3    ; Khmer # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5    ; Khmer # Cf   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6          ; Khmer # Mc       KHMER VOWEL SIGN AA
+17B7..17BD    ; Khmer # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5    ; Khmer # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6          ; Khmer # Mn       KHMER SIGN NIKAHIT
+17C7..17C8    ; Khmer # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3    ; Khmer # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D4..17D6    ; Khmer # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7          ; Khmer # Lm       KHMER SIGN LEK TOO
+17D8..17DA    ; Khmer # Po   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB          ; Khmer # Sc       KHMER CURRENCY SYMBOL RIEL
+17DC          ; Khmer # Lo       KHMER SIGN AVAKRAHASANYA
+17DD          ; Khmer # Mn       KHMER SIGN ATTHACAN
+17E0..17E9    ; Khmer # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9    ; Khmer # No  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+19E0..19FF    ; Khmer # So  [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+
+# Total code points: 146
+
+# ================================================
+
+1800..1801    ; Mongolian # Po   [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS
+1804          ; Mongolian # Po       MONGOLIAN COLON
+1806          ; Mongolian # Pd       MONGOLIAN TODO SOFT HYPHEN
+1807..180A    ; Mongolian # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+180B..180D    ; Mongolian # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E          ; Mongolian # Zs       MONGOLIAN VOWEL SEPARATOR
+1810..1819    ; Mongolian # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842    ; Mongolian # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843          ; Mongolian # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877    ; Mongolian # Lo  [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8    ; Mongolian # Lo  [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9          ; Mongolian # Mn       MONGOLIAN LETTER ALI GALI DAGALGA
+18AA          ; Mongolian # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA
+
+# Total code points: 153
+
+# ================================================
+
+3041..3096    ; Hiragana # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E    ; Hiragana # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F          ; Hiragana # Lo       HIRAGANA DIGRAPH YORI
+1F200         ; Hiragana # So       SQUARE HIRAGANA HOKA
+
+# Total code points: 90
+
+# ================================================
+
+30A1..30FA    ; Katakana # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FD..30FE    ; Katakana # Lm   [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
+30FF          ; Katakana # Lo       KATAKANA DIGRAPH KOTO
+31F0..31FF    ; Katakana # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+32D0..32FE    ; Katakana # So  [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
+3300..3357    ; Katakana # So  [88] SQUARE APAATO..SQUARE WATTO
+FF66..FF6F    ; Katakana # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF71..FF9D    ; Katakana # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+
+# Total code points: 299
+
+# ================================================
+
+3105..312D    ; Bopomofo # Lo  [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+31A0..31B7    ; Bopomofo # Lo  [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+
+# Total code points: 65
+
+# ================================================
+
+2E80..2E99    ; Han # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3    ; Han # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5    ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3005          ; Han # Lm       IDEOGRAPHIC ITERATION MARK
+3007          ; Han # Nl       IDEOGRAPHIC NUMBER ZERO
+3021..3029    ; Han # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A    ; Han # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B          ; Han # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK
+3400..4DB5    ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FCB    ; Han # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
+F900..FA2D    ; Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6D    ; Han # Lo  [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+20000..2A6D6  ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A700..2B734  ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2F800..2FA1D  ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 75738
+
+# ================================================
+
+A000..A014    ; Yi # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E
+A015          ; Yi # Lm       YI SYLLABLE WU
+A016..A48C    ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6    ; Yi # So  [55] YI RADICAL QOT..YI RADICAL KE
+
+# Total code points: 1220
+
+# ================================================
+
+10300..1031E  ; Old_Italic # Lo  [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10320..10323  ; Old_Italic # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+
+# Total code points: 35
+
+# ================================================
+
+10330..10340  ; Gothic # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+10341         ; Gothic # Nl       GOTHIC LETTER NINETY
+10342..10349  ; Gothic # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A         ; Gothic # Nl       GOTHIC LETTER NINE HUNDRED
+
+# Total code points: 27
+
+# ================================================
+
+10400..1044F  ; Deseret # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 80
+
+# ================================================
+
+0300..036F    ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0485..0486    ; Inherited # Mn   [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
+064B..0655    ; Inherited # Mn  [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
+0670          ; Inherited # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+0951..0952    ; Inherited # Mn   [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
+1CD0..1CD2    ; Inherited # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0    ; Inherited # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8    ; Inherited # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED          ; Inherited # Mn       VEDIC SIGN TIRYAK
+1DC0..1DE6    ; Inherited # Mn  [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
+1DFD..1DFF    ; Inherited # Mn   [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C..200D    ; Inherited # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+20D0..20DC    ; Inherited # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0    ; Inherited # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1          ; Inherited # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4    ; Inherited # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0    ; Inherited # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+302A..302F    ; Inherited # Mn   [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A    ; Inherited # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FE00..FE0F    ; Inherited # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE26    ; Inherited # Mn   [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
+101FD         ; Inherited # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+1D167..1D169  ; Inherited # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D17B..1D182  ; Inherited # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; Inherited # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; Inherited # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+E0100..E01EF  ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 523
+
+# ================================================
+
+1700..170C    ; Tagalog # Lo  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711    ; Tagalog # Lo   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714    ; Tagalog # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+
+# Total code points: 20
+
+# ================================================
+
+1720..1731    ; Hanunoo # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734    ; Hanunoo # Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+
+# Total code points: 21
+
+# ================================================
+
+1740..1751    ; Buhid # Lo  [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753    ; Buhid # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+
+# Total code points: 20
+
+# ================================================
+
+1760..176C    ; Tagbanwa # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; Tagbanwa # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773    ; Tagbanwa # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+
+# Total code points: 18
+
+# ================================================
+
+1900..191C    ; Limbu # Lo  [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1920..1922    ; Limbu # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926    ; Limbu # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928    ; Limbu # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B    ; Limbu # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931    ; Limbu # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932          ; Limbu # Mn       LIMBU SMALL LETTER ANUSVARA
+1933..1938    ; Limbu # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B    ; Limbu # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1940          ; Limbu # So       LIMBU SIGN LOO
+1944..1945    ; Limbu # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F    ; Limbu # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+
+# Total code points: 66
+
+# ================================================
+
+1950..196D    ; Tai_Le # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974    ; Tai_Le # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+
+# Total code points: 35
+
+# ================================================
+
+10000..1000B  ; Linear_B # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; Linear_B # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; Linear_B # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; Linear_B # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; Linear_B # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; Linear_B # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+
+# Total code points: 211
+
+# ================================================
+
+10380..1039D  ; Ugaritic # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F         ; Ugaritic # Po       UGARITIC WORD DIVIDER
+
+# Total code points: 31
+
+# ================================================
+
+10450..1047F  ; Shavian # Lo  [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+
+# Total code points: 48
+
+# ================================================
+
+10480..1049D  ; Osmanya # Lo  [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+104A0..104A9  ; Osmanya # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+
+# Total code points: 40
+
+# ================================================
+
+10800..10805  ; Cypriot # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; Cypriot # Lo       CYPRIOT SYLLABLE JO
+1080A..10835  ; Cypriot # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; Cypriot # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; Cypriot # Lo       CYPRIOT SYLLABLE ZA
+1083F         ; Cypriot # Lo       CYPRIOT SYLLABLE ZO
+
+# Total code points: 55
+
+# ================================================
+
+2800..28FF    ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+
+# Total code points: 256
+
+# ================================================
+
+1A00..1A16    ; Buginese # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18    ; Buginese # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B    ; Buginese # Mc   [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A1E..1A1F    ; Buginese # Po   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+
+# Total code points: 30
+
+# ================================================
+
+03E2..03EF    ; Coptic # L&  [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI
+2C80..2CE4    ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA    ; Coptic # So   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE    ; Coptic # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1    ; Coptic # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF9..2CFC    ; Coptic # Po   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD          ; Coptic # No       COPTIC FRACTION ONE HALF
+2CFE..2CFF    ; Coptic # Po   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+
+# Total code points: 135
+
+# ================================================
+
+1980..19AB    ; New_Tai_Lue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C0    ; New_Tai_Lue # Mc  [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7    ; New_Tai_Lue # Lo   [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9    ; New_Tai_Lue # Mc   [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19DA    ; New_Tai_Lue # Nd  [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
+19DE..19DF    ; New_Tai_Lue # Po   [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+
+# Total code points: 83
+
+# ================================================
+
+2C00..2C2E    ; Glagolitic # L&  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Glagolitic # L&  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+
+# Total code points: 94
+
+# ================================================
+
+2D30..2D65    ; Tifinagh # Lo  [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F          ; Tifinagh # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+
+# Total code points: 55
+
+# ================================================
+
+A800..A801    ; Syloti_Nagri # Lo   [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN DVISVARA
+A803..A805    ; Syloti_Nagri # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN HASANTA
+A807..A80A    ; Syloti_Nagri # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822    ; Syloti_Nagri # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824    ; Syloti_Nagri # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826    ; Syloti_Nagri # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827          ; Syloti_Nagri # Mc       SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B    ; Syloti_Nagri # So   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+
+# Total code points: 44
+
+# ================================================
+
+103A0..103C3  ; Old_Persian # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; Old_Persian # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0         ; Old_Persian # Po       OLD PERSIAN WORD DIVIDER
+103D1..103D5  ; Old_Persian # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+
+# Total code points: 50
+
+# ================================================
+
+10A00         ; Kharoshthi # Lo       KHAROSHTHI LETTER A
+10A01..10A03  ; Kharoshthi # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Kharoshthi # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F  ; Kharoshthi # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13  ; Kharoshthi # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17  ; Kharoshthi # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; Kharoshthi # Lo  [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A38..10A3A  ; Kharoshthi # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; Kharoshthi # Mn       KHAROSHTHI VIRAMA
+10A40..10A47  ; Kharoshthi # No   [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A50..10A58  ; Kharoshthi # Po   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+
+# Total code points: 65
+
+# ================================================
+
+1B00..1B03    ; Balinese # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04          ; Balinese # Mc       BALINESE SIGN BISAH
+1B05..1B33    ; Balinese # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34          ; Balinese # Mn       BALINESE SIGN REREKAN
+1B35          ; Balinese # Mc       BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A    ; Balinese # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B          ; Balinese # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C          ; Balinese # Mn       BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41    ; Balinese # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42          ; Balinese # Mn       BALINESE VOWEL SIGN PEPET
+1B43..1B44    ; Balinese # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4B    ; Balinese # Lo   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B50..1B59    ; Balinese # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B60    ; Balinese # Po   [7] BALINESE PANTI..BALINESE PAMENENG
+1B61..1B6A    ; Balinese # So  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B..1B73    ; Balinese # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74..1B7C    ; Balinese # So   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+
+# Total code points: 121
+
+# ================================================
+
+12000..1236E  ; Cuneiform # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+12400..12462  ; Cuneiform # Nl  [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+12470..12473  ; Cuneiform # Po   [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+
+# Total code points: 982
+
+# ================================================
+
+10900..10915  ; Phoenician # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B  ; Phoenician # No   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F         ; Phoenician # Po       PHOENICIAN WORD SEPARATOR
+
+# Total code points: 29
+
+# ================================================
+
+A840..A873    ; Phags_Pa # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A877    ; Phags_Pa # Po   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+
+# Total code points: 56
+
+# ================================================
+
+07C0..07C9    ; Nko # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA    ; Nko # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3    ; Nko # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5    ; Nko # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6          ; Nko # So       NKO SYMBOL OO DENNEN
+07F7..07F9    ; Nko # Po   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+07FA          ; Nko # Lm       NKO LAJANYALAN
+
+# Total code points: 59
+
+# ================================================
+
+1B80..1B81    ; Sundanese # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82          ; Sundanese # Mc       SUNDANESE SIGN PANGWISAD
+1B83..1BA0    ; Sundanese # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1          ; Sundanese # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5    ; Sundanese # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7    ; Sundanese # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9    ; Sundanese # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA          ; Sundanese # Mc       SUNDANESE SIGN PAMAAEH
+1BAE..1BAF    ; Sundanese # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9    ; Sundanese # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+
+# Total code points: 55
+
+# ================================================
+
+1C00..1C23    ; Lepcha # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B    ; Lepcha # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33    ; Lepcha # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35    ; Lepcha # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37    ; Lepcha # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C3B..1C3F    ; Lepcha # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49    ; Lepcha # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F    ; Lepcha # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+
+# Total code points: 74
+
+# ================================================
+
+1C50..1C59    ; Ol_Chiki # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77    ; Ol_Chiki # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D    ; Ol_Chiki # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F    ; Ol_Chiki # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+
+# Total code points: 48
+
+# ================================================
+
+A500..A60B    ; Vai # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C          ; Vai # Lm       VAI SYLLABLE LENGTHENER
+A60D..A60F    ; Vai # Po   [3] VAI COMMA..VAI QUESTION MARK
+A610..A61F    ; Vai # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629    ; Vai # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B    ; Vai # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+
+# Total code points: 300
+
+# ================================================
+
+A880..A881    ; Saurashtra # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3    ; Saurashtra # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3    ; Saurashtra # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4          ; Saurashtra # Mn       SAURASHTRA SIGN VIRAMA
+A8CE..A8CF    ; Saurashtra # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9    ; Saurashtra # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+
+# Total code points: 81
+
+# ================================================
+
+A900..A909    ; Kayah_Li # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925    ; Kayah_Li # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D    ; Kayah_Li # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A92E..A92F    ; Kayah_Li # Po   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+
+# Total code points: 48
+
+# ================================================
+
+A930..A946    ; Rejang # Lo  [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951    ; Rejang # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953    ; Rejang # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F          ; Rejang # Po       REJANG SECTION MARK
+
+# Total code points: 37
+
+# ================================================
+
+10280..1029C  ; Lycian # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X
+
+# Total code points: 29
+
+# ================================================
+
+102A0..102D0  ; Carian # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+
+# Total code points: 49
+
+# ================================================
+
+10920..10939  ; Lydian # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F         ; Lydian # Po       LYDIAN TRIANGULAR MARK
+
+# Total code points: 27
+
+# ================================================
+
+AA00..AA28    ; Cham # Lo  [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E    ; Cham # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30    ; Cham # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32    ; Cham # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34    ; Cham # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36    ; Cham # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42    ; Cham # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43          ; Cham # Mn       CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B    ; Cham # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C          ; Cham # Mn       CHAM CONSONANT SIGN FINAL M
+AA4D          ; Cham # Mc       CHAM CONSONANT SIGN FINAL H
+AA50..AA59    ; Cham # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C..AA5F    ; Cham # Po   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+
+# Total code points: 83
+
+# ================================================
+
+1A20..1A54    ; Tai_Tham # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55          ; Tai_Tham # Mc       TAI THAM CONSONANT SIGN MEDIAL RA
+1A56          ; Tai_Tham # Mn       TAI THAM CONSONANT SIGN MEDIAL LA
+1A57          ; Tai_Tham # Mc       TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E    ; Tai_Tham # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60          ; Tai_Tham # Mn       TAI THAM SIGN SAKOT
+1A61          ; Tai_Tham # Mc       TAI THAM VOWEL SIGN A
+1A62          ; Tai_Tham # Mn       TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64    ; Tai_Tham # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C    ; Tai_Tham # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72    ; Tai_Tham # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C    ; Tai_Tham # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F          ; Tai_Tham # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89    ; Tai_Tham # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99    ; Tai_Tham # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6    ; Tai_Tham # Po   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7          ; Tai_Tham # Lm       TAI THAM SIGN MAI YAMOK
+1AA8..1AAD    ; Tai_Tham # Po   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+
+# Total code points: 127
+
+# ================================================
+
+AA80..AAAF    ; Tai_Viet # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+AAB0          ; Tai_Viet # Mn       TAI VIET MAI KANG
+AAB1          ; Tai_Viet # Lo       TAI VIET VOWEL AA
+AAB2..AAB4    ; Tai_Viet # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6    ; Tai_Viet # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8    ; Tai_Viet # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD    ; Tai_Viet # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF    ; Tai_Viet # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0          ; Tai_Viet # Lo       TAI VIET TONE MAI NUENG
+AAC1          ; Tai_Viet # Mn       TAI VIET TONE MAI THO
+AAC2          ; Tai_Viet # Lo       TAI VIET TONE MAI SONG
+AADB..AADC    ; Tai_Viet # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD          ; Tai_Viet # Lm       TAI VIET SYMBOL SAM
+AADE..AADF    ; Tai_Viet # Po   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+
+# Total code points: 72
+
+# ================================================
+
+10B00..10B35  ; Avestan # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F  ; Avestan # Po   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+
+# Total code points: 61
+
+# ================================================
+
+13000..1342E  ; Egyptian_Hieroglyphs # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+
+# Total code points: 1071
+
+# ================================================
+
+0800..0815    ; Samaritan # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819    ; Samaritan # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; Samaritan # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; Samaritan # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER I
+0829..082D    ; Samaritan # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0830..083E    ; Samaritan # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+
+# Total code points: 61
+
+# ================================================
+
+A4D0..A4F7    ; Lisu # Lo  [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD    ; Lisu # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF    ; Lisu # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+
+# Total code points: 48
+
+# ================================================
+
+A6A0..A6E5    ; Bamum # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF    ; Bamum # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1    ; Bamum # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A6F2..A6F7    ; Bamum # Po   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+
+# Total code points: 88
+
+# ================================================
+
+A980..A982    ; Javanese # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983          ; Javanese # Mc       JAVANESE SIGN WIGNYAN
+A984..A9B2    ; Javanese # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3          ; Javanese # Mn       JAVANESE SIGN CECAK TELU
+A9B4..A9B5    ; Javanese # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9    ; Javanese # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB    ; Javanese # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC          ; Javanese # Mn       JAVANESE VOWEL SIGN PEPET
+A9BD..A9C0    ; Javanese # Mc   [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
+A9C1..A9CD    ; Javanese # Po  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9CF          ; Javanese # Lm       JAVANESE PANGRANGKEP
+A9D0..A9D9    ; Javanese # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF    ; Javanese # Po   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+
+# Total code points: 91
+
+# ================================================
+
+ABC0..ABE2    ; Meetei_Mayek # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5          ; Meetei_Mayek # Mn       MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8          ; Meetei_Mayek # Mn       MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB          ; Meetei_Mayek # Po       MEETEI MAYEK CHEIKHEI
+ABEC          ; Meetei_Mayek # Mc       MEETEI MAYEK LUM IYEK
+ABED          ; Meetei_Mayek # Mn       MEETEI MAYEK APUN IYEK
+ABF0..ABF9    ; Meetei_Mayek # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+
+# Total code points: 56
+
+# ================================================
+
+10840..10855  ; Imperial_Aramaic # Lo  [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+10857         ; Imperial_Aramaic # Po       IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F  ; Imperial_Aramaic # No   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+
+# Total code points: 31
+
+# ================================================
+
+10A60..10A7C  ; Old_South_Arabian # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E  ; Old_South_Arabian # No   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F         ; Old_South_Arabian # Po       OLD SOUTH ARABIAN NUMERIC INDICATOR
+
+# Total code points: 32
+
+# ================================================
+
+10B40..10B55  ; Inscriptional_Parthian # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F  ; Inscriptional_Parthian # No   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+
+# Total code points: 30
+
+# ================================================
+
+10B60..10B72  ; Inscriptional_Pahlavi # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F  ; Inscriptional_Pahlavi # No   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+
+# Total code points: 27
+
+# ================================================
+
+10C00..10C48  ; Old_Turkic # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+
+# Total code points: 73
+
+# ================================================
+
+11080..11081  ; Kaithi # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+11082         ; Kaithi # Mc       KAITHI SIGN VISARGA
+11083..110AF  ; Kaithi # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2  ; Kaithi # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6  ; Kaithi # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8  ; Kaithi # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA  ; Kaithi # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BB..110BC  ; Kaithi # Po   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BD         ; Kaithi # Cf       KAITHI NUMBER SIGN
+110BE..110C1  ; Kaithi # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+
+# Total code points: 66
+
+# EOF
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/UnicodeData.txt b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/UnicodeData.txt
new file mode 100644 (file)
index 0000000..77db788
--- /dev/null
@@ -0,0 +1,19336 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
+0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
+0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
+0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
+0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
+0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
+0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
+0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
+0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
+0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
+0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
+0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
+024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
+024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
+024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
+024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
+024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
+024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
+02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
+02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
+02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
+02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
+02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
+0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
+0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
+0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
+035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
+035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
+0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
+0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
+0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
+0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
+0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
+0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
+036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
+036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
+036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
+036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
+036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
+036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
+0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;
+0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370
+0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;
+0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372
+0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;
+0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
+037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
+037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF
+03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
+03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
+03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
+03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
+03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
+03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
+03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
+03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
+03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
+048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
+04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
+04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
+04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
+04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
+04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
+04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
+04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
+04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
+04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
+0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
+0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
+0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
+0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
+0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
+0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
+0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
+0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
+0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
+0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
+050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
+050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
+050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
+050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
+050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
+050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
+0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
+0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
+0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
+0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
+0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;
+0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514
+0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;
+0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516
+0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;
+0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518
+051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;
+051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A
+051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;
+051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C
+051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;
+051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E
+0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;
+0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520
+0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;
+0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
+0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
+0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
+0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
+0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;
+0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;
+0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;
+0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;
+061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
+072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
+072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
+074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
+074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;
+076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;
+077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
+07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
+07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
+07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
+07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
+07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
+07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
+07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
+07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
+07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
+07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
+07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
+07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
+07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
+07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
+07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
+07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
+07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
+07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
+07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
+07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
+07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
+07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
+07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
+07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
+07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
+07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
+07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
+07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
+07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
+07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
+07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
+07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
+07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
+07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
+07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
+07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;
+0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;
+097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
+097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
+0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;
+0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;;
+0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;
+0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
+0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
+0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
+0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;
+0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
+0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
+0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;
+0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
+0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;;
+0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;;
+0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;
+1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;
+1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;
+103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
+103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
+103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;
+103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;
+105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;
+105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;
+105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;
+105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;
+105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;
+1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;
+1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
+1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
+1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
+1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;
+1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;
+1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
+1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
+1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
+106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
+106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
+106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
+106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
+106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;
+106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;
+1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;
+1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;
+1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;
+1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;
+1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;
+1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;
+1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;
+1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;
+1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;
+1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;
+107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;
+107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;
+107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;
+107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;
+107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;
+107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;
+1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;
+1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;
+1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
+1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
+1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;
+1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
+1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
+1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
+108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
+108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
+108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
+108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;
+108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;
+108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
+1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;
+109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
+10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
+10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
+10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;;
+1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
+1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
+1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
+1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
+1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
+1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
+1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
+1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
+1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
+1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
+170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
+170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
+170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
+170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
+1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
+1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
+1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
+1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
+1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
+1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
+1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
+1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
+1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
+1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
+1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
+172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
+172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
+172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
+172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
+172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
+172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
+1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
+1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
+1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
+1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
+1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
+1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
+1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
+1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
+1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
+1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
+1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
+1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
+174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
+174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
+174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
+174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
+174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
+174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
+1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
+1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
+1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
+1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
+1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
+1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
+1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
+1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
+1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
+1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
+176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
+176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
+176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
+176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
+176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
+1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
+1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;;
+17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
+17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
+17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
+17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
+17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
+17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
+17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
+17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
+17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
+17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
+17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;
+1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
+1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
+1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
+1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
+1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
+1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
+1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
+1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
+1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
+190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
+190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
+190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
+190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
+190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
+190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
+1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
+1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
+1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
+1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
+1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
+1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
+1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
+1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
+1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
+1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
+191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
+191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
+191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
+1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
+1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
+1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
+1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
+1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
+1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
+1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
+1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
+1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
+1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
+193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
+193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
+1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
+1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
+1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
+1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
+1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
+1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
+1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
+1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
+1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
+1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
+1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
+195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
+195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
+195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
+195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
+195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
+195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
+1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
+1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
+1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
+1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
+1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
+1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
+1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
+1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
+196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
+196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
+196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
+196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
+1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
+1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
+1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
+1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
+1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
+19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
+19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
+19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
+19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
+19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
+19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
+19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
+19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
+19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
+19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
+19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
+19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
+19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
+19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
+19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
+19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
+19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
+19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
+19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
+19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
+19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
+19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
+19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
+19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
+19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
+19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
+19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
+19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
+19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
+19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
+19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
+19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
+1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;;
+1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;;
+1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;;
+1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;;
+1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;;
+1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;;
+1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;;
+1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;;
+1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;;
+1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;;
+1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;;
+1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;;
+1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;;
+1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;;
+1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;;
+1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;;
+1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;;
+1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;;
+1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;;
+1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;;
+1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;;
+1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;;
+1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;;
+1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;;
+1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;;
+1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;;
+1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;;
+1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;;
+1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;;
+1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;;
+1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;;
+1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;;
+1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;;
+1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;;
+1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;;
+1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;;
+1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;;
+1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;;
+1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;;
+1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;;
+1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;;
+1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;;
+1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;;
+1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;;
+1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;;
+1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;;
+1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;;
+1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;;
+1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;;
+1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;;
+1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;;
+1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
+1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
+1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
+1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
+1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
+1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
+1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;;
+1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;;
+1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;;
+1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;;
+1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;;
+1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;;
+1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;;
+1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
+1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
+1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
+1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
+1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
+1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
+1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
+1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
+1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
+1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
+1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
+1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
+1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
+1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
+1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
+1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
+1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
+1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
+1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
+1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
+1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
+1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
+1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
+1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
+1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
+1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
+1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
+1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;
+1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;
+1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;
+1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;
+1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;
+1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;
+1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;
+1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;
+1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;
+1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;
+1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;
+1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
+1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;
+1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;
+1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;
+1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;
+1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
+1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
+1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
+1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
+1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
+1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
+1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;
+1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;
+1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;
+1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;
+1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;
+1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;
+1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;
+1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;
+1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;
+1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;
+1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;
+1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;
+1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;
+1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;
+1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;
+1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;
+1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;
+1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;
+1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;
+1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;
+1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;
+1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;
+1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;
+1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;
+1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;
+1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;
+1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;
+1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;
+1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;
+1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;
+1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;
+1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
+1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
+1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
+1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;
+1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;
+1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
+1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
+1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;
+1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;
+1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;
+1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;
+1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;
+1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;
+1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;
+1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;
+1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;
+1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;
+1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;
+1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;
+1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;
+1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;
+1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;
+1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;
+1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;
+1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;
+1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;
+1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;
+1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;
+1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;
+1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;
+1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;
+1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;
+1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;
+1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;
+1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;
+1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;
+1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;
+1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;
+1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;
+1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;
+1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;
+1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;
+1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;
+1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;
+1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;
+1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;
+1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
+1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
+1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
+1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
+1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
+1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
+1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
+1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
+1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
+1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
+1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
+1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
+1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
+1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
+1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
+1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
+1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
+1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
+1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
+1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
+1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
+1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
+1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
+1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
+1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
+1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
+1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
+1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
+1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
+1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
+1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
+1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
+1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
+1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
+1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
+1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
+1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
+1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
+1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
+1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
+1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
+1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
+1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
+1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
+1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
+1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
+1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
+1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
+1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
+1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
+1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
+1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
+1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
+1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
+1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
+1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
+1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
+1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
+1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
+1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
+1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
+1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
+1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
+1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
+1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
+1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
+1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
+1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
+1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
+1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
+1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
+1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
+1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
+1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
+1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
+1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
+1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
+1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
+1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
+1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
+1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
+1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
+1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
+1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
+1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
+1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
+1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
+1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
+1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
+1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
+1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
+1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
+1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
+1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
+1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
+1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
+1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
+1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L;<sub> 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
+1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
+1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
+1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;
+1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;
+1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;
+1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;
+1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;
+1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;
+1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;
+1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;
+1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;
+1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;
+1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;
+1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;
+1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;
+1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;
+1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;
+1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;
+1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;
+1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;
+1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;
+1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;
+1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;
+1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;
+1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;
+1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;
+1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;
+1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;
+1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
+1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;
+1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA
+1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;
+1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC
+1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;
+1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
+204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
+2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
+2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
+2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
+205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
+2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
+2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
+2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
+2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L;<super> 0069;;;;N;;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
+20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
+20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
+20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
+20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
+2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
+2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
+2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
+214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
+214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
+214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
+214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
+2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
+2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;
+2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;
+2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
+2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
+22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
+23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
+23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
+23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
+23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
+23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
+23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
+23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
+23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
+23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
+23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
+23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
+23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
+23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
+23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
+23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
+23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
+23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
+23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
+23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
+23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
+23E5;FLATNESS;So;0;ON;;;;;N;;;;;
+23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
+23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
+24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
+24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
+24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
+24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
+24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
+24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
+24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
+24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
+24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
+24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
+24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
+24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
+24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
+24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
+24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
+24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
+24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
+24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
+24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
+2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
+2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
+2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
+259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
+2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
+2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;;
+2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;;
+2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;;
+2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;;
+2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;;
+2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;;
+2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;;
+267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
+267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
+2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
+2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
+2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
+2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
+2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
+2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
+2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
+2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
+2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
+268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
+268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
+268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
+268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
+268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
+268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
+2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
+2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
+269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
+26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
+26B2;NEUTER;So;0;ON;;;;;N;;;;;
+26B3;CERES;So;0;ON;;;;;N;;;;;
+26B4;PALLAS;So;0;ON;;;;;N;;;;;
+26B5;JUNO;So;0;ON;;;;;N;;;;;
+26B6;VESTA;So;0;ON;;;;;N;;;;;
+26B7;CHIRON;So;0;ON;;;;;N;;;;;
+26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;
+26B9;SEXTILE;So;0;ON;;;;;N;;;;;
+26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;
+26BB;QUINCUNX;So;0;ON;;;;;N;;;;;
+26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;
+26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
+27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
+27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
+27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
+27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
+27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
+27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
+27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
+27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
+27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
+27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
+27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
+27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
+2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
+2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
+2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
+2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
+2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
+293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
+293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
+2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
+297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
+2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
+2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
+2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
+2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
+2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
+2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
+2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
+2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
+298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
+298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
+298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
+298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
+298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
+298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
+2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
+2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
+2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
+2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
+299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
+299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
+299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
+299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
+299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
+29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
+29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
+29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
+29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
+29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
+29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
+29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
+29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
+29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
+29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
+29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
+29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
+29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
+29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
+29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
+29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
+29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
+29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
+29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
+29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
+29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
+29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
+29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
+29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
+29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
+29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+29FE;TINY;Sm;0;ON;;;;;N;;;;;
+29FF;MINY;Sm;0;ON;;;;;N;;;;;
+2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
+2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
+2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
+2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
+2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
+2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
+2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
+2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
+2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
+2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
+2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
+2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
+2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
+2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
+2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
+2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
+2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
+2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
+2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
+2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
+2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
+2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
+2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
+2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
+2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
+2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
+2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
+2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
+2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
+2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
+2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
+2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
+2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
+2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
+2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
+2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
+2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
+2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;;
+2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;;
+2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
+2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
+2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
+2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
+2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
+2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
+2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
+2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
+2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;
+2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
+2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
+2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;
+2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;
+2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;
+2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;
+2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;
+2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;
+2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
+2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
+2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
+2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
+2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
+2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
+2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
+2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
+2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
+2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
+2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
+2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
+2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
+2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;
+2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;
+2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;
+2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;
+2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;
+2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72
+2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
+2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
+2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
+2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
+2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;
+2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
+2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
+2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
+2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L;<sub> 006A;;;;N;;;;;
+2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;
+2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;
+2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;
+2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;
+2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;
+2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;
+2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;
+2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;
+2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;
+2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;
+2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;
+2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;
+2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;
+2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;
+2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;
+2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;
+2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;
+2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;
+2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
+2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;
+2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
+2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;
+2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;
+2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;
+2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;
+2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;
+2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;
+2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
+2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;
+2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;
+2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;
+2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;
+2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;
+2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;
+2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;
+2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;
+2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;
+2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;
+2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
+2E30;RING POINT;Po;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+303C;MASU MARK;Lo;0;L;;;;;N;;;;;
+303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
+30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
+31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
+31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
+31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;
+31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;
+31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;
+31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;
+31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;
+31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;
+31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;
+31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;
+31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;
+31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;
+31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;
+31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;
+31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;
+31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;
+31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;
+31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;
+31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;
+31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;
+31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;
+31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;
+31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
+31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
+31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
+31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
+31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
+31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
+31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
+31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
+31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
+31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
+31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
+31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
+31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
+31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
+31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
+31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
+321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
+3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
+3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
+3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
+3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
+3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
+3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
+3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
+3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
+3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
+325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
+325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
+325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
+325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
+325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
+325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
+327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
+32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
+32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
+32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
+32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
+32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
+32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
+32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
+32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
+32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
+32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
+32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
+32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
+32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
+32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
+32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
+32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
+32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
+3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
+3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
+337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
+33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
+4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
+4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
+4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
+4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
+4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
+4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
+4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
+4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
+4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
+4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
+4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
+4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
+4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
+4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
+4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
+4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
+4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
+4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
+4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
+4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
+4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
+4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
+4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
+4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
+4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
+4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
+4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
+4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
+4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
+4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
+4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
+4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
+4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
+4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
+4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
+4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
+4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
+4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
+4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
+4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
+4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
+4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
+4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
+4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
+4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
+4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
+4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
+4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
+4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
+4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
+4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
+4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
+4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
+4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
+4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
+4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
+4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FC3;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
+A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;
+A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;
+A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;
+A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;
+A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;
+A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;
+A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;
+A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;
+A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;
+A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;
+A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;
+A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;
+A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;
+A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;
+A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;
+A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;
+A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;
+A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;
+A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;
+A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;
+A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;
+A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;
+A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;
+A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;
+A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;
+A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;
+A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;
+A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;
+A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;
+A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;
+A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;
+A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;
+A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;
+A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;
+A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;
+A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;
+A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;
+A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;
+A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;
+A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;
+A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;
+A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;
+A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;
+A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;
+A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;
+A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;
+A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;
+A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;
+A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;
+A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;
+A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;
+A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;
+A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;
+A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;
+A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;
+A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;
+A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;
+A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;
+A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;
+A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;
+A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;
+A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;
+A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;
+A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;
+A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;
+A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;
+A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;
+A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;
+A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;
+A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;
+A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;
+A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;
+A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;
+A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;
+A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;
+A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;
+A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;
+A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;
+A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;
+A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;
+A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;
+A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;
+A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;
+A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;
+A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;
+A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;
+A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;
+A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;
+A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;
+A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;
+A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;
+A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;
+A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;
+A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;
+A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;
+A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;
+A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;
+A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;
+A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;
+A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;
+A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;
+A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;
+A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;
+A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;
+A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;
+A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;
+A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;
+A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;
+A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;
+A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;
+A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;
+A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;
+A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;
+A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;
+A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;
+A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;
+A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;
+A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;
+A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
+A60D;VAI COMMA;Po;0;ON;;;;;N;;;;;
+A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;
+A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;
+A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;
+A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;
+A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;
+A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;
+A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;
+A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;
+A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;
+A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;
+A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;
+A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;
+A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;
+A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;
+A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;
+A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;
+A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;
+A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;
+A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;
+A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;
+A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;
+A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640
+A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;
+A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642
+A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;
+A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644
+A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;
+A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646
+A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;
+A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648
+A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;
+A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A
+A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;
+A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C
+A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;
+A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E
+A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;
+A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650
+A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;
+A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652
+A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;
+A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654
+A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;
+A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656
+A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;
+A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658
+A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;
+A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A
+A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;
+A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C
+A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;
+A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E
+A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;
+A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662
+A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;
+A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664
+A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;
+A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666
+A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;
+A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668
+A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;
+A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A
+A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;
+A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C
+A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;
+A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;
+A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
+A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
+A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
+A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
+A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;
+A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;
+A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680
+A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;
+A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682
+A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;
+A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684
+A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;
+A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686
+A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;
+A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688
+A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;
+A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A
+A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;
+A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C
+A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;
+A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E
+A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;
+A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690
+A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;
+A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692
+A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
+A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
+A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
+A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
+A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
+A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
+A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
+A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;
+A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;
+A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
+A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
+A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;
+A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722
+A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;
+A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724
+A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;
+A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726
+A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;
+A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728
+A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;
+A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A
+A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;
+A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C
+A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;
+A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E
+A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;
+A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;
+A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;
+A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732
+A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;
+A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734
+A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;
+A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736
+A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;
+A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738
+A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;
+A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A
+A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;
+A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C
+A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;
+A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E
+A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;
+A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740
+A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;
+A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742
+A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;
+A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744
+A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;
+A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746
+A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;
+A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748
+A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;
+A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A
+A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;
+A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C
+A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;
+A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E
+A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;
+A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750
+A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;
+A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752
+A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;
+A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754
+A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;
+A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756
+A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;
+A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758
+A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;
+A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A
+A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;
+A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C
+A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;
+A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E
+A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;
+A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760
+A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;
+A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762
+A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;
+A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764
+A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;
+A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766
+A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;
+A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768
+A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;
+A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A
+A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;
+A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C
+A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;
+A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E
+A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;
+A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;
+A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;
+A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;
+A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;
+A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;
+A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;
+A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;
+A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;
+A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;
+A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779
+A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;
+A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B
+A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;
+A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;
+A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E
+A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;
+A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780
+A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;
+A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782
+A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;
+A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784
+A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;
+A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786
+A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;
+A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;
+A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;
+A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;
+A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
+A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
+A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
+A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;
+A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;
+A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
+A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
+A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
+A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
+A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
+A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
+A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
+A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
+A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
+A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
+A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
+A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
+A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
+A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
+A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
+A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
+A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
+A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
+A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
+A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
+A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
+A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
+A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
+A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
+A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
+A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
+A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
+A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
+A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
+A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
+A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
+A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
+A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
+A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
+A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
+A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
+A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
+A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
+A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
+A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
+A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
+A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
+A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
+A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;
+A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;
+A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;
+A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;
+A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;
+A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;
+A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;
+A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;
+A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;
+A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;
+A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;
+A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;
+A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;
+A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;
+A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;
+A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;
+A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;
+A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;
+A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;
+A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;
+A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;
+A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;
+A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;
+A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;
+A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;
+A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;
+A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;
+A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;
+A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;
+A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;
+A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
+A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
+A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
+A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
+A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;
+A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;
+A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;
+A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;
+A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;
+A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;
+A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;
+A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;
+A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;
+A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;
+A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;
+A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;
+A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;
+A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;
+A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;
+A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;
+A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;
+A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;
+A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;
+A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;
+A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;
+A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;
+A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;
+A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;
+A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;
+A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;
+A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;
+A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;
+A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;
+A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;
+A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;
+A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;
+A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;
+A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;
+A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;
+A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;
+A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;
+A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;
+A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;
+A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;
+A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;
+A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;
+A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;
+A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;
+A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;
+A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;
+A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;
+A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;
+A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;
+A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;
+A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;
+A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;
+A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;
+A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;
+A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;
+A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;
+A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;
+A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;
+A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;
+A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
+A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;
+A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
+A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
+A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;
+AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;
+AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;
+AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;
+AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;
+AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;
+AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;
+AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;
+AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;
+AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;
+AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;
+AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;
+AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;
+AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;
+AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;
+AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;
+AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;
+AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;
+AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;
+AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;
+AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;
+AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;
+AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;
+AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;
+AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;
+AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;
+AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;
+AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;
+AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;
+AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;
+AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;
+AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;
+AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;
+AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
+AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
+AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;
+AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;
+AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;
+AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;
+AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;
+AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;
+AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;
+AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
+AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;
+AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;
+AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;
+AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;
+AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
+AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
+AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;
+AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
+FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
+FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
+FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
+FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
+FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
+FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
+FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
+FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
+FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
+FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
+FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
+FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
+FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
+FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
+FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
+FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
+FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
+FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
+FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
+FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
+FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
+FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
+FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
+FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
+FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
+FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
+FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
+FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
+FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
+FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
+FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
+FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
+FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
+FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
+FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
+FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
+FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
+FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
+FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
+FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
+FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
+FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
+FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
+FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
+FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
+FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
+FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
+FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
+FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
+FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
+FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
+FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
+FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
+FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
+FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
+FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
+FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
+FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;;
+FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
+10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
+10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
+10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
+10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
+10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
+10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
+10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
+10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
+10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
+1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
+1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
+1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
+1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
+1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
+10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
+10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
+10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
+10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
+10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
+10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
+10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
+10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
+10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
+10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
+1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
+1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
+1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
+1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
+1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
+1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
+10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
+10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
+10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
+10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
+10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
+10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
+10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
+10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
+10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
+1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
+1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
+1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
+1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
+1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
+1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
+10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
+10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
+10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
+10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
+10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
+10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
+10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
+10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
+10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
+10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
+1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
+1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
+1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
+1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
+10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
+10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
+10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
+10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
+10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
+10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
+10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
+10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
+10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
+10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
+1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
+1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
+1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
+1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
+10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
+10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
+10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
+10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
+10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
+10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
+10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
+10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
+10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
+10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
+1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
+1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
+1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
+1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
+10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
+10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
+10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
+10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
+10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
+10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
+10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
+10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
+10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
+10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
+1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
+1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
+1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
+1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
+1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
+1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
+10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
+10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
+10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
+10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
+10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
+10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
+10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
+10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
+10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
+10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
+1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
+1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
+1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
+1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
+1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
+1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
+100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
+100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
+100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
+100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
+100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
+100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
+100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
+100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
+100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
+100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
+100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
+100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
+100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
+100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
+100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
+100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
+100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
+100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
+100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
+100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
+100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
+100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
+100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
+100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
+100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
+100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
+100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
+100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
+100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
+100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
+100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
+100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
+100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
+100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
+100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
+100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
+100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
+100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
+100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
+100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
+100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
+100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;;
+100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
+100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;;
+100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
+100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
+100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
+100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
+100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
+100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
+100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
+100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
+100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
+100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
+100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
+100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
+100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
+100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
+100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
+100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
+100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
+100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
+100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
+100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
+100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
+100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
+100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
+100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
+100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
+100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
+100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
+100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
+100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
+100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
+100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
+100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
+100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
+100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
+100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
+100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
+100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
+100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
+100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
+100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
+100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
+100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
+100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
+100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
+100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
+100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
+100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
+10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
+10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;;
+10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
+10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
+10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
+1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
+1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
+1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
+1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
+10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
+10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
+10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
+10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
+1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
+1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
+1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
+1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
+1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
+10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
+10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
+10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
+10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
+10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
+10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
+10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
+10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
+10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
+1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
+1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
+1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
+1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
+1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
+10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
+10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
+10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
+10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
+10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
+10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
+1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
+10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
+10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
+10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
+10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;
+10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;
+10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;
+10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;
+10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
+1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
+1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
+101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
+101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
+101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;
+101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;
+101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;
+101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;
+101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;
+101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;
+101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;
+101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;
+101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;
+101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;
+101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;
+101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;
+101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;
+101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;
+101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;
+101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;
+101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;
+101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;
+101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;
+101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;
+101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;
+101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;
+101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;
+101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;
+101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;
+101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;
+101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;
+101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;
+101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;
+101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;
+101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;
+101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;
+101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;
+101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;
+101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;
+101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;
+101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;
+101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;
+101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;
+101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;
+101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;
+101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;
+101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;
+101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;
+10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;
+10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;
+10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;
+10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;
+10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;
+10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;
+10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;
+10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;
+10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;
+10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;
+1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;
+1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;
+1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;
+1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;
+1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;
+10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;
+10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;
+10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;
+10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;
+10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;
+10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;
+10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;
+10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;
+1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;
+1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;
+1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;
+102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;
+102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;
+102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;
+102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;
+102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;
+102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;
+102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;
+102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;
+102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;
+102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;
+102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;
+102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;
+102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;
+102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;
+102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;
+102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;
+102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;
+102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;
+102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;
+102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;
+102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;
+102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;
+102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;
+102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;
+102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;
+102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;
+102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;
+102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;
+102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;
+102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;
+102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;
+102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;
+102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;
+102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;
+102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;
+102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;
+102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;
+102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;
+102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;
+102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;
+102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;
+102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;
+102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;
+102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;
+10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
+10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
+10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
+10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
+10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
+10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
+10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
+10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
+10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
+10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
+1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
+1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
+1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
+1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
+1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
+1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;;
+10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
+10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
+10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
+10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
+10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
+10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
+10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
+10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;;
+10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
+10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
+1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;;
+1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;;
+1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;;
+1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;;
+10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
+10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
+10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
+10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
+10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
+10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
+10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
+10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
+10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
+10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
+10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
+10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
+1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
+1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
+1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
+1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
+1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
+1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
+10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
+10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
+10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
+10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
+10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
+10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
+10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
+10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
+10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
+10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
+10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
+10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
+10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
+10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
+10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
+10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
+10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
+10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
+10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
+10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
+1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
+1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
+1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
+1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
+1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
+1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
+10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
+10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
+10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
+10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
+10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
+10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
+10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
+10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
+10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
+10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
+1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
+1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
+1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
+1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
+1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
+10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
+10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
+10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
+10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
+10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
+10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
+10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
+10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
+10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
+10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
+1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
+1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
+1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
+1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
+1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
+1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
+10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
+10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
+10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
+10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
+10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
+10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
+10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
+10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
+10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
+10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
+1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
+1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
+1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
+1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
+1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
+1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
+10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
+10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
+10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
+10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
+10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
+10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
+10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
+10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
+10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
+10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
+1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
+1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
+1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
+1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
+1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
+1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
+10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
+10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
+10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
+10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
+10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
+10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
+10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
+10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
+10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
+10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
+1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
+1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
+1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
+1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
+1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
+1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
+10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
+10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
+10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
+10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
+10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
+10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
+10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
+10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
+10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
+10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
+1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
+1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
+1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
+1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
+1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
+1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
+10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
+10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
+10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
+10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
+10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
+10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
+10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
+10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
+10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
+10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
+1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
+1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
+1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
+1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
+1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
+1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
+10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
+10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
+10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
+10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
+10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
+10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
+10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
+10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
+10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
+10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
+1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
+1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
+1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
+1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
+1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
+10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
+10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
+10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
+10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
+10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
+10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
+10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
+10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
+10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
+10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
+1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
+1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
+1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
+1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
+1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
+1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
+10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
+10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
+10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
+10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
+10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
+10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
+10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
+10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
+10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
+1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
+1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
+1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
+1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
+1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
+10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
+10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
+10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
+10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
+10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
+10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
+10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
+10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
+10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
+10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
+1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
+1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
+1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
+1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
+104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
+10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
+10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
+10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
+10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
+10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
+10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
+1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
+1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
+1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
+1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
+1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
+1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
+10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
+10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
+10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
+10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
+10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
+10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
+10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
+10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
+10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
+10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
+1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
+1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
+1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
+1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
+1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
+1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
+10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
+10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
+10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
+10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
+10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
+10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
+10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
+10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
+10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
+10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
+1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
+1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
+1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
+1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
+1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
+1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
+10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
+10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
+10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
+10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
+10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
+10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
+10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
+10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
+1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
+1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
+10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
+10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
+10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
+10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
+10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
+10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
+10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
+10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
+1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
+1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
+1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
+1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
+10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
+10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
+10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
+10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
+10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
+10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;
+10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;
+10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;
+10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;
+10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;
+10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;
+10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;
+10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;
+10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;
+10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;
+1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;
+1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;
+1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;
+1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;
+1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;
+1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;
+10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;
+10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;
+10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;
+10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;
+10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;
+10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;
+10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;
+10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;
+10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
+10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
+1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
+12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
+12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
+12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
+12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
+12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
+12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
+12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
+12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
+1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
+1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
+1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
+12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
+12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
+12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
+12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
+12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
+1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
+1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
+1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
+12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
+12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
+12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
+12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
+12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
+12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
+12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
+12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
+12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
+1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
+1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
+1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
+1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
+1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
+12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
+12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
+12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
+12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
+12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
+12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
+12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
+12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
+12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
+1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
+1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
+1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
+12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
+12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
+12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
+12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
+12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
+12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
+12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
+12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
+12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
+12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
+1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
+1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
+1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
+1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
+1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
+12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
+12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
+12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
+12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
+12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
+12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
+12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
+12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
+12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
+12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
+1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
+1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
+1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
+1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
+12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
+12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
+12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
+12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
+12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
+12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
+12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
+12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
+12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
+1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
+1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
+1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
+1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
+12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
+12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
+12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
+12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
+12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
+12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
+12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
+12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
+12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
+1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
+1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
+1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
+1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
+1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
+1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
+12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
+12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
+12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
+12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
+12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
+12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
+12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
+1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
+1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
+1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
+1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
+1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
+12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
+12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
+12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
+12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
+12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
+12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
+12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
+1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
+1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
+1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
+1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
+1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
+120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
+120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
+120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
+120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
+120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
+120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
+120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
+120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
+120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
+120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
+120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
+120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
+120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
+120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
+120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
+120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
+120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
+120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
+120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
+120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
+120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
+120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
+120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
+120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
+120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
+120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
+120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
+120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
+120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
+120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
+120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
+120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
+120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
+120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
+120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
+120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
+120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
+120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
+120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
+120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
+120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
+120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
+120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
+120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
+120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
+120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
+120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
+120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
+120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
+120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
+120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
+120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
+120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
+120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
+120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
+120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
+120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
+120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
+120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
+120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
+120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
+120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
+120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
+120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
+12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
+12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
+12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
+12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
+12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
+12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
+12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
+12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
+12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
+12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
+1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
+1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
+12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
+12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
+12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
+12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
+12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
+12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
+12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
+12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
+1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
+1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
+1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
+12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
+12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
+12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
+12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
+12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
+12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
+12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
+12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
+1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
+1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
+1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
+1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
+1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
+12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
+12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
+12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
+12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
+12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
+12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
+12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
+1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
+1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
+1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
+12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
+12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
+12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
+12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
+12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
+12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
+12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
+12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
+12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
+12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
+1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
+1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
+1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
+1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
+1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
+12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
+12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
+12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
+12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
+12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
+12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
+12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
+12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
+12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
+1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
+1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
+1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
+1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
+12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
+12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
+12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
+12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
+12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
+12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
+12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
+1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
+1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
+1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
+1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
+1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
+12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
+12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
+12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
+12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
+12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
+12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
+12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
+12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
+12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
+12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
+1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
+1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
+1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
+1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
+1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
+1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
+12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
+12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
+12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
+12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
+12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
+12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
+12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
+12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
+12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
+12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
+1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
+1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
+1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
+1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
+1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
+12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
+12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
+12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
+12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
+12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
+12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
+12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
+12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
+12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
+1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
+1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
+1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
+1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
+121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
+121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
+121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
+121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
+121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
+121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
+121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
+121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
+121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
+121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
+121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
+121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
+121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
+121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
+121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
+121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
+121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
+121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
+121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
+121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
+121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
+121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
+121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
+121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
+121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
+121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
+121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
+121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
+121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
+121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
+121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
+121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
+121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
+121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
+121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
+121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
+121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
+121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
+121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
+121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
+121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
+121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
+121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
+121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
+121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
+121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
+121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
+121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
+121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
+121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
+121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
+121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
+121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
+121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
+121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
+121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
+121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
+121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
+121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
+121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
+121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
+121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
+121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
+121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
+121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
+121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
+121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
+121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
+121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
+121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
+121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
+121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
+121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
+121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
+121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
+121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
+121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
+12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
+12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
+12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
+12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
+1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
+1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
+12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
+12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
+12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
+12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
+12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
+12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
+12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
+12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
+12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
+12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
+1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
+1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
+1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
+1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
+1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
+1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
+12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
+12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
+12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
+12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
+12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
+12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
+12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
+12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
+1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
+1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
+1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
+1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
+1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
+1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
+12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
+12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
+12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
+12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
+12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
+12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
+12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
+12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
+1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
+1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
+1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
+1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
+1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
+1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
+12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
+12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
+12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
+12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
+12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
+12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
+12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
+12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
+12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
+12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
+1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
+1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
+1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
+1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
+1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
+1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
+12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
+12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
+1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
+12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
+12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
+12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
+12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
+12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
+12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
+12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
+12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
+1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
+1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
+1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
+1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
+12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
+12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
+12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
+12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
+1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
+1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
+1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
+1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
+1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
+1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
+12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
+12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
+12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
+12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
+12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
+12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
+12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
+12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
+12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
+12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
+1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
+1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
+1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
+1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
+1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
+1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
+12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
+12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
+12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
+12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
+12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
+12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
+12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
+12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
+12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
+12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
+1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
+1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
+1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
+1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
+1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
+122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
+122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
+122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
+122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
+122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
+122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
+122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
+122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
+122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
+122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
+122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
+122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
+122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
+122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
+122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
+122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
+122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
+122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
+122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
+122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
+122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
+122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
+122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
+122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
+122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
+122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
+122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
+122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
+122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
+122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
+122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
+122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
+122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
+122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
+122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
+122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
+122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
+122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
+122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
+122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
+122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
+122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
+122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
+122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
+122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
+122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
+122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
+122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
+122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
+122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
+122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
+122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
+122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
+122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
+122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
+122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
+122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
+122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
+122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
+122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
+122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
+122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
+122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
+122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
+122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
+122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
+122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
+122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
+122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
+122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
+122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
+122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
+122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
+122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
+122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
+122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
+122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
+122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
+122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
+122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
+122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
+122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
+122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
+122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
+122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
+122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
+122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
+122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
+122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
+12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
+12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
+12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
+12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
+12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
+12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
+12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
+12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
+1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
+1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
+1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
+1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
+1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
+12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
+12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
+12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
+12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
+12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
+12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
+12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
+12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
+12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
+1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
+1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
+1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
+1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
+1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
+12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
+12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
+12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
+12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
+12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
+12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
+12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
+12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
+1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
+1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
+1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
+1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
+12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
+12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
+12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
+12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
+12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
+12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
+12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
+1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
+1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
+1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
+1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
+12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
+12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
+12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
+12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
+12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
+12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
+12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
+12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
+12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
+12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
+1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
+1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
+1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
+1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
+1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
+12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
+12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
+12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
+12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
+12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
+12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
+12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
+12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
+1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
+1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
+1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
+1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
+1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
+12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
+12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
+12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
+12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
+12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
+12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
+12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
+12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
+12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
+12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
+1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
+1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
+1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
+1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
+1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
+12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
+12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
+12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
+12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
+12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
+12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
+12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
+12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
+12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
+12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
+1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
+1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
+1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
+1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
+1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
+1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
+12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
+12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
+12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
+12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
+12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
+12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
+12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
+12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
+12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
+12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
+1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
+1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
+1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
+1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
+1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
+1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
+12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
+12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
+12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
+12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
+12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
+12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
+12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
+12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
+12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
+1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
+1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
+1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
+1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
+1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
+1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
+12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
+12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;;
+12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;;
+12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
+12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
+12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
+12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
+12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
+1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
+1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
+1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
+1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
+1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
+1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
+12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
+12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
+12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
+12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
+12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
+12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
+12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
+12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
+12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
+12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
+1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
+1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
+1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
+1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
+1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
+1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
+12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
+12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
+12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
+12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
+12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
+12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
+12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;;
+12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;;
+12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
+12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
+1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
+1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
+1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
+1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
+1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
+1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
+12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
+12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
+12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
+12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
+12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
+12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
+1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
+1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
+1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
+1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
+1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
+1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
+1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
+1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
+1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
+1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
+1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
+1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
+1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
+1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
+1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
+1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
+1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
+1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
+1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
+1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
+1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
+1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
+1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
+1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
+1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
+1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
+1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
+1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
+1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
+1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
+1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
+1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
+1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
+1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
+1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
+1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
+1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
+1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
+1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
+1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
+1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
+1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
+1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
+1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
+1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
+1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
+1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
+1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
+1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
+1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
+1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
+1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
+1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
+1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
+1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
+1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
+1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
+1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
+1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
+1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
+1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
+1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
+1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
+1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
+1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
+1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
+1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
+1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
+1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
+1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
+1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
+1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
+1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
+1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
+1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
+1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
+1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
+1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
+1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
+1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
+1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
+1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
+1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
+1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
+1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
+1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
+1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
+1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
+1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
+1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
+1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
+1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
+1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
+1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
+1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
+1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
+1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
+1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
+1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
+1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
+1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
+1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
+1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
+1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
+1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
+1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
+1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
+1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
+1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
+1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
+1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
+1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
+1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
+1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
+1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
+1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
+1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
+1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
+1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
+1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
+1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
+1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
+1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
+1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
+1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
+1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
+1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
+1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
+1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
+1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
+1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
+1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
+1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
+1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
+1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
+1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
+1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
+1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
+1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
+1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
+1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
+1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
+1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
+1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
+1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
+1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
+1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
+1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
+1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
+1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
+1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
+1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
+1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
+1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
+1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
+1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
+1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
+1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
+1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
+1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
+1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
+1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
+1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
+1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
+1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
+1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
+1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
+1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
+1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
+1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
+1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
+1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
+1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
+1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
+1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
+1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
+1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
+1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
+1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
+1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
+1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
+1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
+1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
+1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
+1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
+1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
+1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
+1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
+1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
+1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
+1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
+1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
+1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
+1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
+1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
+1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
+1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
+1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
+1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
+1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
+1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
+1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
+1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
+1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
+1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
+1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
+1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
+1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
+1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
+1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;
+1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
+1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
+1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
+1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
+1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
+1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
+1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
+1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
+1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
+1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
+1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
+1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
+1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
+1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
+1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
+1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
+1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
+1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
+1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
+1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
+1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
+1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
+1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
+1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
+1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
+1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
+1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
+1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
+1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
+1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
+1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
+1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
+1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
+1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
+1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
+1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
+1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
+1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
+1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
+1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
+1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
+1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
+1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
+1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
+1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
+1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
+1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
+1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
+1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
+1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
+1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
+1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
+1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
+1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
+1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
+1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
+1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
+1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
+1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
+1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
+1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
+1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
+1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
+1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
+1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
+1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
+1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
+1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
+1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
+1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
+1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
+1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
+1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
+1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
+1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
+1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
+1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
+1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
+1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
+1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
+1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
+1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
+1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
+1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
+1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
+1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
+1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
+1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
+1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
+1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
+1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
+1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
+1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
+1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
+1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
+1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
+1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
+1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
+1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
+1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
+1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
+1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
+1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
+1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
+1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
+1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
+1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
+1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
+1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
+1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
+1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
+1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
+1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
+1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
+1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
+1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
+1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
+1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
+1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
+1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
+1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
+1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
+1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
+1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
+1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
+1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
+1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
+1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
+1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
+1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
+1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
+1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
+1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
+1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
+1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
+1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
+1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;;
+1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;;
+1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;;
+1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;;
+1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;;
+1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;;
+1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
+1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
+1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
+1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
+1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
+1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
+1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
+1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
+1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
+1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
+1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
+1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
+1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
+1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
+1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
+1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
+1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
+1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
+1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
+1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
+1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
+1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
+1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
+1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
+1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
+1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
+1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
+1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
+1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
+1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
+1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
+1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
+1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
+1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
+1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
+1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
+1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
+1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
+1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
+1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
+1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
+1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
+1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
+1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
+1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
+1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
+1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
+1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
+1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
+1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
+1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
+1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
+1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
+1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
+1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
+1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
+1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
+1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
+1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
+1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
+1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
+1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
+1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
+1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
+1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
+1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
+1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
+1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
+1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
+1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
+1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
+1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
+1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
+1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
+1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
+1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
+1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
+1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
+1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
+1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
+1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
+1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
+1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
+1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
+1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
+1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
+1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
+1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
+1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
+1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
+1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
+1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
+1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
+1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
+1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
+1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
+1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
+1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
+1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;
+1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;
+1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;
+1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;
+1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;
+1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;
+1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;
+1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;
+1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;
+1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;
+1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;
+1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;
+1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;
+1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;
+1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;
+1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;
+1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;
+1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;
+1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;
+1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;
+1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;
+1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;
+1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;
+1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;
+1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;
+1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;
+1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;
+1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;
+1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;
+1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;
+1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;
+1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;
+1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;
+1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;
+1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;
+1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;
+1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;
+1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;
+1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;
+1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;
+1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;
+1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;
+1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;
+1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;
+1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;
+1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;
+1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;
+1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;
+1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;
+1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;
+1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;
+1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;
+1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;
+1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;
+1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;
+1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;
+1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;
+1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;
+1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;
+1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;
+1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;
+1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;
+1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;
+1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;
+1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;
+1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;
+1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;
+1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;
+1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;
+1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;
+1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;
+1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;
+1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;
+1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;
+1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;
+1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;
+1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;
+1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;
+1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;
+1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;
+1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;
+1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;
+1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;
+1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;
+1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;
+1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;
+1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;
+1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;
+1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;
+1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;
+1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;
+1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;
+1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;
+1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;
+1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;
+1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;
+1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;
+1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;
+1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;
+1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;
+1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;
+1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;
+1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;
+1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;
+1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;
+1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;
+1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;
+1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;
+1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;
+1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;
+1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;
+1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;
+1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;
+1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;
+20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
+2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
+2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
+2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
+2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
+2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
+2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
+2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
+2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
+2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
+2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
+2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
+2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
+2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
+2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
+2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
+2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
+2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
+2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
+2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
+2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
+2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
+2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
+2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
+2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
+2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
+2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
+2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
+2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
+2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
+2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
+2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
+2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
+2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
+2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
+2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
+2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
+2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
+2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
+2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
+2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
+2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
+2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
+2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
+2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
+2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
+2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
+2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
+2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
+2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
+2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
+2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
+2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
+2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
+2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
+2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
+2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
+2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
+2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
+2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
+2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
+2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
+2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
+2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
+2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
+2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
+2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
+2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
+2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
+2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
+2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
+2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
+2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
+2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
+2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
+2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
+2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
+2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
+2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
+2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
+2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
+2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
+2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
+2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
+2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
+2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
+2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
+2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
+2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
+2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
+2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
+2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
+2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
+2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
+2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
+2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
+2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
+2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
+2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
+2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
+2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
+2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
+2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
+2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
+2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
+2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
+2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
+2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
+2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
+2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
+2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
+2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
+2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
+2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
+2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
+2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
+2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
+2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
+2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
+2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
+2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
+2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
+2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
+2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
+2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
+2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
+2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
+2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
+2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
+2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
+2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
+2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
+2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
+2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
+2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
+2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
+2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
+2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
+2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
+2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
+2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
+2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
+2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
+2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
+2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
+2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;
+2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
+2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
+2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
+2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
+2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
+2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
+2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
+2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
+2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
+2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
+2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
+2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
+2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
+2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
+2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
+2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
+2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
+2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
+2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
+2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
+2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
+2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
+2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
+2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
+2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
+2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
+2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
+2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
+2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
+2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
+2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
+2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
+2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
+2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
+2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
+2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
+2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
+2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
+2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
+2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
+2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
+2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
+2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
+2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
+2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
+2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
+2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
+2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
+2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
+2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
+2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
+2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
+2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
+2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
+2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
+2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
+2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
+2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
+2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
+2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
+2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
+2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
+2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
+2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
+2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
+2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
+2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
+2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
+2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
+2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
+2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
+2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
+2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
+2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
+2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
+2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
+2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
+2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
+2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
+2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
+2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
+2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
+2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
+2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
+2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
+2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
+2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
+2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
+2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
+2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
+2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
+2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
+2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
+2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
+2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
+2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
+2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
+2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
+2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
+2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
+2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
+2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
+2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
+2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
+2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
+2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
+2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
+2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
+2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
+2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
+2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
+2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
+2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
+2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
+2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
+2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
+2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
+2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
+2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
+2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
+2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
+2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
+2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
+2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
+2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
+2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
+2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
+2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
+2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
+2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
+2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
+2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
+2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
+2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
+2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
+2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
+2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
+2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
+2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
+2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
+2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
+2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
+2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
+2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
+2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
+2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
+2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
+2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
+2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
+2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
+2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
+2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
+2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
+2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
+2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
+2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
+2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
+2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
+2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
+2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
+2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
+2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
+2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
+2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
+2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
+2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
+2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
+2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
+2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
+2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
+2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
+2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
+2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
+2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
+2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
+2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
+2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
+2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
+2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
+2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
+2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
+2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
+2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
+2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
+2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
+2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
+2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
+2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
+2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
+2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
+2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
+2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
+2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
+2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
+2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
+2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
+2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
+2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
+2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
+2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
+2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
+2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
+2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
+2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
+2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
+2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
+2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
+2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
+2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
+2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
+2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
+2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
+2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
+2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
+2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
+2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
+2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
+2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
+2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
+2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
+2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
+2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
+2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
+2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
+2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
+2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
+2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
+2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
+2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
+2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
+2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
+2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
+2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
+2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
+2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
+2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
+2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
+2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
+2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
+2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
+2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
+2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
+2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
+2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
+2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
+2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
+2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
+2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
+2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
+2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
+2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
+2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
+2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
+2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
+2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
+2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
+2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
+2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
+2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
+2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
+2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
+2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
+2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
+2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
+2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
+2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
+2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
+2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
+2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
+2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
+2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
+2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
+2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
+2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
+2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
+2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
+2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
+2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
+2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
+2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
+2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
+2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
+2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
+2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
+2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
+2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
+2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
+2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
+2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
+2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
+2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
+2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
+2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
+2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
+2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
+2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
+2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
+2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
+2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
+2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
+2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
+2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
+2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
+2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
+2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
+2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
+2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
+2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
+2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
+2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
+2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
+2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
+2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
+2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
+2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
+2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
+2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
+2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
+2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
+2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
+2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
+2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
+2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
+2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
+2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
+2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
+2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
+2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
+2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
+2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
+2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
+2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
+2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
+2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
+2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
+2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
+2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
+2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
+2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
+2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
+2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
+2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
+2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
+2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
+2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
+2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
+2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
+2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
+2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
+2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
+2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
+2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
+2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
+2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
+2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
+2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
+2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
+2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
+2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
+2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
+2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
+2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
+2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
+2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
+2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
+2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
+2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
+2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
+2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
+2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
+2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
+2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
+2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
+2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
+2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
+2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
+2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
+2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
+2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
+2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
+2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
+2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
+2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
+2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
+2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
+2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
+2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
+2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
+2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
+2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
+2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
+2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
+2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
+2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
+2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
+2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
+2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
+E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
+E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
+E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
+E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
+E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
+E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
+E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
+E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
+E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
+E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
+E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
+E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
+E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
+E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
+E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
+E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
+E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
+E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
+E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
+E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
+E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
+E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
+E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
+E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
+E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
+E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
+E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
+E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
+E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
+E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
+E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
+E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
+E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
+E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
+E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
+E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
+E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
+E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
+E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
+E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
+E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
+E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
+E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
+E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
+E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
+E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
+E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
+E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
+E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
+E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
+E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
+E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
+E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
+E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
+E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
+E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
+E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
+E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
+E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
+E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
+E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
+E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
+E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
+E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
+E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
+E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
+E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
+E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
+E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
+E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
+E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
+E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
+E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
+E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
+E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
+E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
+E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
+E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
+E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
+E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
+E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
+E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
+E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
+E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
+E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
+E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
+E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
+E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
+E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
+E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
+E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
+E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
+E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
+E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
+E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
+E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
+E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
+E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
+E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
+E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
+E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
+E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
+E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
+E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
+E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
+E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
+E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
+E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
+E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
+E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
+E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
+E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
+E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
+E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
+E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
+E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
+E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
+E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
+E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
+E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
+E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
+E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
+E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
+E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
+E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
+E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
+E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
+E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
+E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
+E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
+E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
+E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
+E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
+E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
+E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
+E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
+E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
+E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
+E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
+E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
+E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
+E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
+E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
+E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
+E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
+E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
+E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
+E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
+E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
+E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
+E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
+E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
+E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
+E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
+E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
+E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
+E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
+E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
+E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
+E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
+E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
+E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
+E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
+E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
+E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
+E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
+E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
+E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
+E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
+E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
+E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
+E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
+E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
+E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
+E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
+E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
+E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
+E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
+E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
+E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
+E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
+E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
+E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
+E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
+E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
+E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
+E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
+E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
+E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
+E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
+E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
+E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
+E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
+E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
+E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
+E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
+E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
+E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
+E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
+E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
+E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
+E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
+E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
+E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
+E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
+E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
+E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
+E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
+E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
+E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
+E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
+E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
+E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
+E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
+E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
+E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
+E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
+E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
+E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
+E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
+E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
+E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
+E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
+E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
+E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
+E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
+E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
+E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
+E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
+E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
+E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
+E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
+E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
+E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
+E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
+E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
+E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
+E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
+E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
+E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
+E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
+E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
+E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
+E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
+E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
+E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
+E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
+E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
+E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
+E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
+E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
+E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
+E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
+E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
+E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
+E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
+E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
+E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
+E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
+E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
+E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
+E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
+E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
+E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
+E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
+E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
+E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
+E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
+E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
+E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
+E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
+E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
+E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
+E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
+E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
+E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
+E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
+E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
+E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
+E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
+E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
+E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
+E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
+E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
+E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
+E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
+F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
+FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
+100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
+10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/category_table.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/category_table.hpp
new file mode 100644 (file)
index 0000000..1b262a1
--- /dev/null
@@ -0,0 +1,2216 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t category_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15, 
+     16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31, 
+     32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  34,  42,  43,  44,  45,  46, 
+     47,  48,  49,  40,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  50,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  51, 
+     52,  21,  21,  21,  53,  21,  54,  55,  56,  57,  58,  59,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  60,  61,  61,  61,  61,  61,  61,  61,  61, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  21,  63,  64,  21,  65,  66,  67, 
+     68,  69,  70,  71,  72,  73,  73,  73,  74,  75,  76,  77,  78,  73,  73,  73, 
+     79,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     21,  21,  21,  80,  81,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     82,  82,  82,  82,  83,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     84,  85,  86,  87,  88,  89,  90,  91,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     92,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  94,  82,  82,  82,  82,  82,  82,  82,  82,  82, 
+     82,  82,  82,  82,  82,  82,  82,  95,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  21,  21,  96,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     97,  98,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  93, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 100, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 100
+    };
+
+    static const ::boost::uint16_t category_stage2[] = {
+
+    // block 0
+      32,   32,   32,   32,   32,   32,   32,   32,   32,  544,  544,  544,  544,  544,   32,   32, 
+      32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+     536,   44,   44,   44,   49,   44,   44,   44,   41,   42,   44,   48,   44,   40,   44,   44, 
+    1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,   44,   44,   48,   48,   48,   44, 
+      44, 1216, 1216, 1216, 1216, 1216, 1216,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   41,   44,   42,   50,   43, 
+      50, 1345, 1345, 1345, 1345, 1345, 1345,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   41,   48,   42,   48,   32, 
+      32,   32,   32,   32,   32,  544,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+      32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
+     536,   44,   49,   49,   49,   49,   51,   51,   50,   51,  321,   45,   48, 4129,   51,   50, 
+      51,   48,   18,   18,   50,  321,   51,   44,   50,   18,  321,   46,   18,   18,   18,   44, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,   48,  192,  192,  192,  192,  192,  192,  192,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 1
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321,  192,  321,  192,  321,  192, 
+     321,  192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  192,  321,  192,  321,  192,  321,  321, 
+     321,  192,  192,  321,  192,  321,  192,  192,  321,  192,  192,  192,  321,  321,  192,  192, 
+     192,  192,  321,  192,  192,  321,  192,  192,  192,  321,  321,  321,  192,  192,  321,  192, 
+     192,  321,  192,  321,  192,  321,  192,  192,  321,  192,  321,  321,  192,  321,  192,  192, 
+     321,  192,  192,  192,  321,  192,  321,  192,  192,  321,  321,   68,  192,  321,  321,  321, 
+      68,   68,   68,   68,  192,   66,  321,  192,   66,  321,  192,   66,  321,  192,  321,  192, 
+     321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  192,   66,  321,  192,  321,  192,  192,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 2
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  321,  321,  321,  321,  321,  321,  192,  192,  321,  192,  192,  321, 
+     321,  192,  321,  192,  192,  192,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,   68,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,   67,   67,   67,   67,   67,   67,   67, 
+     323,  323,   50,   50,   50,   50,   67,   67,   67,   67,   67,   67,   67,   67,   67,   67, 
+      67,   67,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+     323,  323,  323,  323,  323,   50,   50,   50,   50,   50,   50,   50,   67,   50,   67,   50, 
+      50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+
+
+    // block 3
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,  328,    8,    8,    8,    8,    8,    8,    8,    8,    8, 4104, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+     192,  321,  192,  321,   67,   50,  192,  321,    0,    0,  323,  321,  321,  321,   44,    0, 
+       0,    0,    0,    0,   50,   50,  192,   44,  192,  192,  192,    0,  192,    0,  192,  192, 
+     321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,    0,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192, 
+     321,  321,  192,  192,  192,  321,  321,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  321,  321,  192,  321,   48,  192,  321,  192,  192,  321,  321,  192,  192,  192, 
+
+
+    // block 4
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,   51,    8,    8,    8,    8,    8,    9,    9,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 5
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  320,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,    0,    0,   67,   44,   44,   44,   44,   44,   44, 
+       0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,    0,   44,   40,    0,    0,    0,    0,    0, 
+       0,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   40,   72, 
+      44,   72,   72,   44,   72,   72,   44,   72,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0, 
+      68,   68,   68,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 6
+      33,   33,   33,   33,    0,    0,   48,   48,   48,   44,   44,   49,   44,   44,   51,   51, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   44,    0,    0,   44,   44, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,    8,   72,   72,   72,   72,   72,   72,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   68,   68, 
+      72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   44,   68,   72,   72,   72,   72,   72,   72,   72,   33,    9,    8, 
+       8,   72,   72,   72,   72,   67,   67,   72,   72,   51,    8,    8,    8,   72,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   51,   51,   68, 
+
+
+    // block 7
+      44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,    0,   33, 
+      68,   72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    0,    0,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   67,   67,   51,   44,   44,   44,   67,    0,    0,    0,    0,    0, 
+
+
+    // block 8
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,    0,    0,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 9
+      64,   72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,   72,   72,   72,   72,   74,   74,   74,   74,    8,   64,    0, 
+      68,    8,    8,    8,    8,   64,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,   44,   44,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      44,   67,   68,    0,    0,    0,    0,    0,    0,   64,   64,   68,   68,   68,   68,   68, 
+       0,   72,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,    0,    0,    0,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,    0,    0,   74,   74,    0,    0,   74,   74,    8,   68,    0, 
+       0,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,   68,   68,    0,   68, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      68,   68,   49,   49,   18,   18,   18,   18,   18,   18,   51,    0,    0,    0,    0,    0, 
+
+
+    // block 10
+       0,   72,   72,   74,    0,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,    0,   68,   68,    0,    0,    8,    0,   74,   74, 
+      74,   72,   72,    0,    0,    0,    0,   72,   72,    0,    0,   72,   72,    8,    0,    0, 
+       0,   72,    0,    0,    0,    0,    0,    0,    0,   68,   68,   68,   68,    0,   68,    0, 
+       0,    0,    0,    0,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      72,   72,   68,   68,   68,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,   72,   72,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68, 
+      68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   74, 
+      74,   72,   72,   72,   72,   72,    0,   72,   72,   74,    0,   74,   74,    8,    0,    0, 
+      68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,   49,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 11
+       0,   72,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,   68, 
+      68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   72, 
+      74,   72,   72,   72,   72,    0,    0,   74,   74,    0,    0,   74,   74,    8,    0,    0, 
+       0,    0,    0,    0,    0,    0,   72,   74,    0,    0,    0,    0,   68,   68,    0,   68, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      51,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   72,   68,    0,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,    0,   68,   68,    0,   68,    0,   68,   68, 
+       0,    0,    0,   68,   68,    0,    0,    0,   68,   68,   68,    0,    0,    0,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   74,   74, 
+      72,   74,   74,    0,    0,    0,   74,   74,   74,    0,   74,   74,   74,    8,    0,    0, 
+      68,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      18,   18,   18,   51,   51,   51,   51,   51,   51,   49,   51,    0,    0,    0,    0,    0, 
+
+
+    // block 12
+       0,   74,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    0,   68,   72,   72, 
+      72,   74,   74,   74,   74,    0,   72,   72,   72,    0,   72,   72,   72,    8,    0,    0, 
+       0,    0,    0,    0,    0,   72,   72,    0,   68,   68,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,    0,    0,    0,    0,    0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   51, 
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,    0,    8,   68,   74,   72, 
+      74,   74,   74,   74,   74,    0,   72,   74,   74,    0,   74,   74,   72,    8,    0,    0, 
+       0,    0,    0,    0,    0,   74,   74,    0,    0,    0,    0,    0,    0,    0,   68,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+       0,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 13
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   74,   74, 
+      74,   72,   72,   72,   72,    0,   74,   74,   74,    0,   74,   74,   74,    8,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,   74,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   72,   72,    0,    0,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      18,   18,   18,   18,   18,   18,    0,    0,    0,   51,   68,   68,   68,   68,   68,   68, 
+       0,    0,   74,   74,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    8,    0,    0,    0,    0,   74, 
+      74,   74,   72,   72,   72,    0,   72,    0,   74,   74,   74,   74,   74,   74,   74,   74, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   74,   74,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 14
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   72,   68,   68,   72,   72,   72,   72,   72,   72,   72,    0,    0,    0,    0,   49, 
+      68,   68,   68,   68,   68,   68,   67,    8,    8,    8,    8,    8,    8,   72,    8,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,   68,   68,    0,   68,    0,    0,   68,   68,    0,   68,    0,    0,   68,    0,    0, 
+       0,    0,    0,    0,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+       0,   68,   68,   68,    0,   68,    0,   68,    0,    0,   68,   68,    0,   68,   68,   68, 
+      68,   72,   68,   68,   72,   72,   72,   72,   72,   72,    0,   72,   72,   68,    0,    0, 
+      68,   68,   68,   68,   68,    0,   67,    0,    8,    8,    8,    8,    8,   72,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 15
+      68,   51,   51,   51,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44, 
+      44,   44,   44,   51,   51,   51,   51,   51,    8,    8,   51,   51,   51,   51,   51,   51, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   51,    8,   51,    8,   51,    8,   41,   42,   41,   42,   10,   10, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+       0,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   74, 
+      72,   72,    8,    8,    8,   44,    8,    8,   68,   68,   68,   68,    0,    0,    0,    0, 
+      72,   72,   72,   72,   72,   72,   72,   72,    0,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,    0,   51,   51, 
+      51,   51,   51,   51,   51,   51,    8,   51,   51,   51,   51,   51,   51,    0,   51,   51, 
+      44,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 16
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   74,   74,   72,   72,   72, 
+      72,   74,   72,   72,   72,   72,   72,    8,   74,    8,    8,   74,   74,   72,   72,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   44,   44, 
+      68,   68,   68,   68,   68,   68,   74,   74,   72,   72,   68,   68,   68,   68,   72,   72, 
+      72,   68,   74,   10,   10,   68,   68,   74,   74,   10,   10,   10,   10,   10,   68,   68, 
+      68,   72,   72,   72,   72,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   74,   74,   72,   72,   10,   10,   10,   10,   10,   10,    8,   68,   10, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   64,   64,   51,   51, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   67,    0,    0,    0, 
+
+
+    // block 17
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64, 4164, 
+    4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   64,   64,   64,   64,   64,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64,   64, 
+
+
+    // block 18
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 19
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,   72, 
+      51,   44,   44,   44,   44,   44,   44,   44,   44,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 20
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 21
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 22
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   44,   68, 
+      68,   68,   68,   68,   68,   68,   68,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+     536,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   41,   42,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   44,   44,   81,   81, 
+      81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 23
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,   68,   72,   72,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,    8,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68, 
+      68,    0,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68, 4129, 4129,   74,   72,   72,   72,   72,   72,   72,   72,   74,   74, 
+      74,   74,   74,   74,   74,   74,   72,   74,   74,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   44,   44,   44,   67,   44,   44,   44,   49,   68,    8,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 24
+      44,   44,   44,   44,   44,   44,   40,   44,   44,   44,   44, 4104, 4104, 4104,  536,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   68,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 25
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      72,   72,   72,   74,   74,   74,   74,   72,   72,   74,   74,   74,    0,    0,    0,    0, 
+      74,   74,   72,   74,   74,   74,   74,   74,   74,    8,    8,    8,    0,    0,    0,    0, 
+      51,    0,    0,    0,   44,   44,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,    0,    0,    0,    0, 
+      74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74, 
+      74,   68,   68,   68,   68,   68,   68,   68,   74,   74,    0,    0,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,   44,   44, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 26
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   72,   72,   74,   74,   74,    0,    0,   44,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+       0,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,   64,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 27
+      72,   72,   72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    8,   74,   72,   72,   72,   72,   72,   74,   72,   74,   74,   74, 
+      74,   74,   72,   74,   10,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   44,   44,   44,   44,   44,   44, 
+      44,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0, 
+      72,   72,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   74,   72,   72,   72,   72,   74,   74,   72,   72,   10,    0,    0,    0,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 28
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   74,   74,   74,   74,   74,   74,   74,   74,   72,   72,   72,   72, 
+      72,   72,   72,   72,   74,   74,    8,    8,    0,    0,    0,   44,   44,   44,   44,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,   68,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   67,   67,   67,   67,   67,   67,   44,   44, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,   64,   64,   64,   64,    0,   64,   64, 
+      64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 29
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  323,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+     323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323,  323, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    8,    8,    8,    8,    8,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    8,    8, 
+
+
+    // block 30
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+
+
+    // block 31
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,    0,  192,    0,  192,    0,  192,    0,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,    0,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,  321,  321,  321,   66,   66,   66,   66,   66,   66,   66,   66, 
+     321,  321,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,  321,   50, 
+      50,   50,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,   50,   50, 
+     321,  321,  321,  321,    0,    0,  321,  321,  192,  192,  192,  192,    0,   50,   50,   50, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,   50,   50,   50, 
+       0,    0,  321,  321,  321,    0,  321,  321,  192,  192,  192,  192,   66,   50,   50,    0, 
+
+
+    // block 32
+     536,  536,  536,  536,  536,  536,  536,  536,  536,  536,  536, 4129, 4129, 4129, 4129, 4129, 
+      40,   40,   40,   40,   40,   40,   44,   44,   45,   46,   41,   45,   45,   46,   41,   45, 
+      44,   44,   44,   44,   44,   44,   44,   44,  537,  538, 4129, 4129, 4129, 4129, 4129,  536, 
+      44,   44,   44,   44,   44,   44,   44,   44,   44,   45,   46,   44,   44,   44,   44,   43, 
+      43,   44,   44,   44,   48,   41,   42,   44,   44,   44,   44,   44,   44,   44,   44,   44, 
+      44,   44,   48,   44,   43,   44,   44,   44,   44,   44,   44,   44,   44,   44,   44,  536, 
+    4129, 4129, 4129, 4129, 4129, 4096, 4096, 4096, 4096, 4096, 4129, 4129, 4129, 4129, 4129, 4129, 
+      18,   65,    0,    0,   18,   18,   18,   18,   18,   18,   48,   48,   48,   41,   42,   65, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   48,   48,   48,   41,   42,    0, 
+     323,  323,  323,  323,  323,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,   49, 
+      49,   49,   49,   49,   49,   49,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    9,    9,    9, 
+       9,    8,    9,    9,    9,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8,    8, 
+       8,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 33
+      51,   51,  192,   51,   51,   51,   51,  192,   51,   51,  321,  192,  192,  192,  321,  321, 
+     192,  192,  192,  321,   51,  192,   51,   51,   51,  192,  192,  192,  192,  192,   51,   51, 
+      51,   51,   51,   51,  192,   51,  192,   51,  192,   51,  192,  192,  192,  192,   51,  321, 
+     192,  192,  192,  192,  321,   68,   68,   68,   68,  321,   51,   51,  321,  321,  192,  192, 
+      48,   48,   48,   48,   48,  192,  321,  321,  321,  321,   51,   48,   51,   51,  321,   51, 
+       0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+     209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209,  209, 
+     337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337,  337, 
+      81,   81,   81,  192,  321,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0, 
+      48,   48,   48,   48,   48,   51,   51,   51,   51,   51,   48,   48,   51,   51,   51,   51, 
+      48,   51,   51,   48,   51,   51,   48,   51,   51,   51,   51,   51,   51,   51,   48,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48, 
+      51,   51,   48,   51,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 34
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 35
+      51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      48,   48,   51,   51,   51,   51,   51,   51,   51,   41,   42,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48, 
+      48,   48,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 36
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243, 
+     243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243,  243, 
+     371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371,  371, 
+     371,  371,  371,  371,  371,  371,  371,  371,  371,  371,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+
+
+    // block 37
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   48,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   48,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 38
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   48, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 39
+       0,   51,   51,   51,   51,    0,   51,   51,   51,   51,    0,    0,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,    0,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,   51,    0,   51, 
+      51,   51,   51,    0,    0,    0,   51,    0,   51,   51,   51,   51,   51,   51,   51,    0, 
+       0,   51,   51,   51,   51,   51,   51,   51,   41,   42,   41,   42,   41,   42,   41,   42, 
+      41,   42,   41,   42,   41,   42,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   51,    0,    0,    0,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+       0,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+      48,   48,   48,   48,   48,   41,   42,   48,   48,   48,   48,    0,   48,    0,    0,    0, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+
+
+    // block 40
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 41
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41, 
+      42,   41,   42,   41,   42,   41,   42,   41,   42,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   41,   42,   41,   42,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   41,   42,   48,   48, 
+
+
+    // block 42
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48,   48, 
+      48,   48,   48,   48,   48,   51,   51,   48,   48,   48,   48,   48,   48,    0,    0,    0, 
+      51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 43
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,    0, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,    0, 
+     192,  321,  192,  192,  192,  321,  321,  192,  321,  192,  321,  192,  321,  192,  192,  192, 
+     192,  321,  192,  321,  321,  192,  321,  321,  321,  321,  321,  321,  321,  323,  192,  192, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  321,   51,   51,   51,   51,   51,   51,  192,  320,  192,  320,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,   44,   44,   44,   44,   18,   44,   44, 
+
+
+    // block 44
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,   67, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,    0, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+
+
+    // block 45
+      44,   44,   45,   46,   45,   46,   44,   44,   44,   45,   46,   44,   45,   46,   44,   44, 
+      44,   44,   44,   44,   44,   44,   44,   40,   44,   44,   40,   44,   45,   46,   44,   44, 
+      45,   46,   41,   42,   41,   42,   41,   42,   41,   42,   44,   44,   44,   44,   44,   67, 
+      44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 46
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+
+
+    // block 47
+     536,   44,   44,   44,   51,   67,   68,   81,   41,   42,   41,   42,   41,   42,   41,   42, 
+      41,   42,   51,   51,   41,   42,   41,   42,   41,   42,   41,   42,   40,   41,   42,   42, 
+      51,   81,   81,   81,   81,   81,   81,   81,   81,   81,    8,    8,    8,    8,    8,    8, 
+      40,   67,   67,   67,   67,   67,   51,   51,   81,   81,   81,   67,   68,   44,   51,   51, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    8,    8,   50,   50,   67,   67,   68, 
+      40,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   44,   67,   67,   67,   68, 
+
+
+    // block 48
+       0,    0,    0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68, 4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+      51,   51,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 49
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0, 
+
+
+    // block 50
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+
+
+    // block 51
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 52
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 53
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0, 
+
+
+    // block 54
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   67,   44,   44,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+       0,    0,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,   68,    8, 
+       9,    9,    9,   44,    0,    0,    0,    0,    0,    0,    0,    0,    8,    8,   44,   67, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 55
+      50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50,   50, 
+      50,   50,   50,   50,   50,   50,   50,   67,   67,   67,   67,   67,   67,   67,   67,   67, 
+      50,   50,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     321,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321,  192,  321, 
+     323,  321,  321,  321,  321,  321,  321,  321,  321,  192,  321,  192,  321,  192,  192,  321, 
+     192,  321,  192,  321,  192,  321,  192,  321,   67,   50,   50,  192,  321,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   68,   68,   68,   68,   68, 
+
+
+    // block 56
+      68,   68,    8,   68,   68,   68,    8,   68,   68,   68,   68,    8,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   74,   74,   72,   72,   74,   51,   51,   51,   51,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0, 
+      74,   74,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74,   74, 
+      74,   74,   74,   74,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0,   44,   44, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   64,   64,   64,   64,   64,   64,    0,    0,    0,   64,    0,    0,    0,    0, 
+
+
+    // block 57
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,    8,    8,    8,   44,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   72,   72,   72, 
+      72,   72,   74,   10,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 58
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   72,   72,   72,   72,   72,   72,   74, 
+      74,   72,   72,   74,   74,   72,   72,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   72,   68,   68,   68,   68,   68,   68,   68,   68,   72,   74,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,   44,   44,   44,   44, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,    0,    0,    0,   64,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+      64,    0,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   64,   64,   64,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 59
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 60
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0, 
+
+
+    // block 61
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+      35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
+
+
+    // block 62
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+
+
+    // block 63
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   64,   64,   64,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 64
+     321,  321,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,  321,  321,  321,  321,  321,    0,    0,    0,    0,    0,   68,   72,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   48,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,    0,   68,    0, 
+      68,   68,    0,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+
+
+    // block 65
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   41,   42, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+       0,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0, 
+    2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
+    2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   49,   51,    0,    0, 
+
+
+    // block 66
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+      44,   44,   44,   44,   44,   44,   44,   41,   42,   44,    0,    0,    0,    0,    0,    0, 
+       8,    8,    8,    8,    8,    8,    8,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   40,   40,   43,   43,   41,   42,   41,   42,   41,   42,   41,   42,   41,   42,   41, 
+      42,   41,   42,   41,   42,   44,   44,   41,   42,   44,   44,   44,   44,   43,   43,   43, 
+      44,   44,   44,    0,   44,   44,   44,   44,   40,   41,   42,   41,   42,   41,   42,   44, 
+      44,   44,   48,   40,   48,   48,   48,    0,   44,   49,   44,   44,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 4129, 
+
+
+    // block 67
+       0,   44,   44,   44,   49,   44,   44,   44,   41,   42,   44,   48,   44,   40,   44,   44, 
+    1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,   44,   44,   48,   48,   48,   44, 
+      44, 1216, 1216, 1216, 1216, 1216, 1216,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   41,   44,   42,   50,   43, 
+      50, 1345, 1345, 1345, 1345, 1345, 1345,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   41,   48,   42,   48,   41, 
+      42,   44,   41,   42,   44,   44,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      67,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   67,   67, 
+    4164,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+       0,    0,   68,   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,   68,   68,   68, 
+       0,    0,   68,   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,    0,    0,    0, 
+      49,   49,   48,   50,   51,   49,   49,    0,   51,   48,   48,   48,   48,   51,   51,    0, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,   33,   33,   33,   51,   51, 2048, 2048, 
+
+
+    // block 68
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   68,   68,    0,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0, 
+
+
+    // block 69
+      44,   44,   51,    0,    0,    0,    0,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,   18,   18,    0,    0,    0,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   18,   18,   18,   18,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   18,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    0,    0, 
+
+
+    // block 70
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 71
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+      18,   18,   18,   18,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   81,   68,   68,   68,   68,   68,   68,   68,   68,   81,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,   68,   68,   68,   68,   68,   68,   68,   68, 
+      44,   81,   81,   81,   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 72
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 73
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 74
+      68,   68,   68,   68,   68,   68,    0,    0,   68,    0,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,    0,   68,   68,    0,    0,    0,   68,    0,    0,   68, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 75
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   18,   18,   18,   18,    0,    0,    0,    0,    0,   44, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,   44, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 76
+      68,   72,   72,   72,    0,   72,   72,    0,    0,    0,    0,    0,   72,   72,   72,   72, 
+      68,   68,   68,   68,    0,   68,   68,   68,    0,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,    0,    0,    0,    0,    8,    8,    8,    0,    0,    0,    0,    8, 
+      18,   18,   18,   18,   18,   18,   18,   18,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   44,   44,   44,   44,   44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 77
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 78
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 79
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 80
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 81
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,   81, 
+      81,   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      44,   44,   44,   44,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 82
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+
+
+    // block 83
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 84
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 85
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   10,   10,    8,    8,    8,   51,   51,   51,   10,   10,   10, 
+      10,   10,   10, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129,    8,    8,    8,    8,    8, 
+       8,    8,    8,   51,   51,    8,    8,    8,    8,    8,    8,    8,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    8,    8,    8,    8,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 86
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,    8,    8,    8,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 87
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+      18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
+      18,   18,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 88
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321, 
+     321,  321,  321,  321,  321,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,    0,  192,  192, 
+       0,    0,  192,    0,    0,  192,  192,    0,    0,  192,  192,  192,  192,    0,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,    0,  321,    0,  321,  321,  321, 
+     321,  321,  321,  321,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 89
+     321,  321,  321,  321,  192,  192,    0,  192,  192,  192,  192,    0,    0,  192,  192,  192, 
+     192,  192,  192,  192,  192,    0,  192,  192,  192,  192,  192,  192,  192,    0,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,    0,  192,  192,  192,  192,    0, 
+     192,  192,  192,  192,  192,    0,  192,    0,    0,    0,  192,  192,  192,  192,  192,  192, 
+     192,    0,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+
+
+    // block 90
+     321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,    0,    0,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,   48,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321, 
+     321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   48,  321,  321,  321,  321, 
+
+
+    // block 91
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,   48,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,   48, 
+     321,  321,  321,  321,  321,  321,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,   48, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,   48,  321,  321,  321,  321,  321,  321, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192,  192, 
+     192,  192,  192,  192,  192,  192,  192,  192,  192,   48,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321,  321, 
+     321,  321,  321,   48,  321,  321,  321,  321,  321,  321,  192,  321,    0,    0,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+      16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,   16, 
+
+
+    // block 92
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,    0,    0,    0,    0, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51, 
+      51,   51,   51,   51,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 93
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 2048, 2048, 
+
+
+    // block 94
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 95
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,   64, 
+      64,   64,   64,   64,   64,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 96
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68, 
+      68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+       0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
+
+
+    // block 97
+    4096, 4129, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 98
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 99
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+    4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 
+
+
+    // block 100
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
+      34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 2048, 2048
+    };
+
+    inline ::boost::uint16_t category_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = category_stage1[ch / 256] * 256;
+        return category_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp
new file mode 100644 (file)
index 0000000..c4b82b3
--- /dev/null
@@ -0,0 +1,584 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#include <boost/config/warning_disable.hpp>
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+#include <boost/unordered_map.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/foreach.hpp>
+#include <boost/array.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/range/iterator_range.hpp>
+
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <vector>
+#include <algorithm>
+#include <string>
+#include <map>
+
+// We place the data here. Each line comprises various fields
+typedef std::vector<std::string> ucd_line;
+typedef std::vector<ucd_line> ucd_vector;
+typedef std::vector<ucd_line>::iterator ucd_iterator;
+
+// spirit and phoenix using declarations
+using boost::spirit::qi::parse;
+using boost::spirit::qi::hex;
+using boost::spirit::qi::char_;
+using boost::spirit::qi::eol;
+using boost::spirit::qi::rule;
+using boost::spirit::qi::omit;
+using boost::spirit::qi::_1;
+using boost::spirit::qi::_val;
+using boost::phoenix::push_back;
+using boost::phoenix::ref;
+
+// basic unsigned types
+using boost::uint8_t;
+using boost::uint16_t;
+using boost::uint32_t;
+
+// a char range
+struct ucd_range
+{
+    ucd_range(uint32_t start, uint32_t finish)
+        : start(start), finish(finish) {}
+
+    // we need this so we can use ucd_range as a multimap key
+    friend bool operator<(ucd_range const& a, ucd_range const& b)
+    {
+        return a.start < b.start;
+    }
+
+    uint32_t start;
+    uint32_t finish;
+};
+
+class ucd_info
+{
+public:
+
+    ucd_info(char const* filename)
+    {
+        std::ifstream in(filename, std::ios_base::in);
+        if (!in)
+        {
+            std::cerr << "Error: Could not open input file: "
+                << filename << std::endl;
+        }
+        else
+        {
+            std::string data;               // We will read the contents here.
+            in.unsetf(std::ios::skipws);    // No white space skipping!
+            std::copy(
+                std::istream_iterator<char>(in),
+                std::istream_iterator<char>(),
+                std::back_inserter(data));
+
+            typedef std::string::const_iterator iterator_type;
+            iterator_type f = data.begin();
+            iterator_type l = data.end();
+
+            rule<iterator_type> endl = -('#' >> *(char_-eol)) >> eol;
+            rule<iterator_type, std::string()> field = *(char_-(';'|endl)) >> (';'|&endl);
+            rule<iterator_type, ucd_line()> line = +(field-endl) >> endl;
+            rule<iterator_type, std::vector<ucd_line>()> file = +(endl | line[push_back(_val, _1)]);
+
+            parse(f, l, file, info);
+        }
+    }
+
+    template <typename Array>
+    void collect(Array& data, int field, bool collect_properties = true) const
+    {
+        BOOST_ASSERT(!info.empty());
+        ucd_vector::const_iterator current = info.begin();
+        ucd_vector::const_iterator end = info.end();
+
+        while (current != end)
+        {
+            std::string range = (*current)[0];
+            boost::trim(range);
+
+            std::string::const_iterator f = range.begin();
+            std::string::const_iterator l = range.end();
+
+            // get the code-point range
+            uint32_t start;
+            uint32_t finish;
+            parse(f, l, hex[ref(start) = ref(finish) = _1] >> -(".." >> hex[ref(finish) = _1]));
+
+            // special case for UnicodeData.txt ranges:
+            if ((*current)[1].find("First>") != std::string::npos)
+            {
+                ++current;
+                BOOST_ASSERT(current != end);
+                BOOST_ASSERT((*current)[1].find("Last>") != std::string::npos);
+
+                std::string range = (*current)[0];
+                boost::trim(range);
+                f = range.begin();
+                l = range.end();
+
+                parse(f, l, hex[ref(finish) = _1]);
+            }
+
+            std::string code;
+            if (field < int(current->size()))
+                code = (*current)[field];
+            boost::trim(code);
+            // Only collect properties we are interested in
+            if (collect_properties) // code for properties
+            {
+                if (!ignore_property(code))
+                {
+                    for (uint32_t i = start; i <= finish; ++i)
+                        data[i] |= map_property(code);
+                }
+            }
+            else // code for actual numeric values
+            {
+                for (uint32_t i = start; i <= finish; ++i)
+                {
+                    if (code.empty())
+                    {
+                        data[i] = 0; // signal that this code maps to itself
+                    }
+                    else
+                    {
+                        f = code.begin();
+                        l = code.end();
+                        parse(f, l, hex, data[i]);
+                    }
+                }
+            }
+            ++current;
+        }
+    }
+
+private:
+
+    static bool ignore_property(std::string const& p)
+    {
+        // We don't handle all properties
+        std::map<std::string, int>& pm = get_property_map();
+        std::map<std::string, int>::iterator i = pm.find(p);
+        return i == pm.end();
+    }
+
+    static int
+    map_property(std::string const& p)
+    {
+        std::map<std::string, int>& pm = get_property_map();
+        std::map<std::string, int>::iterator i = pm.find(p);
+        BOOST_ASSERT(i != pm.end());
+        return i->second;
+    }
+
+    static std::map<std::string, int>&
+    get_property_map()
+    {
+        // The properties we are interested in:
+        static std::map<std::string, int> map;
+        if (map.empty())
+        {
+            // General_Category
+            map["Lu"] = 0;
+            map["Ll"] = 1;
+            map["Lt"] = 2;
+            map["Lm"] = 3;
+            map["Lo"] = 4;
+
+            map["Mn"] = 8;
+            map["Me"] = 9;
+            map["Mc"] = 10;
+
+            map["Nd"] = 16;
+            map["Nl"] = 17;
+            map["No"] = 18;
+
+            map["Zs"] = 24;
+            map["Zl"] = 25;
+            map["Zp"] = 26;
+
+            map["Cc"] = 32;
+            map["Cf"] = 33;
+            map["Co"] = 34;
+            map["Cs"] = 35;
+            map["Cn"] = 36;
+
+            map["Pd"] = 40;
+            map["Ps"] = 41;
+            map["Pe"] = 42;
+            map["Pc"] = 43;
+            map["Po"] = 44;
+            map["Pi"] = 45;
+            map["Pf"] = 46;
+
+            map["Sm"] = 48;
+            map["Sc"] = 49;
+            map["Sk"] = 50;
+            map["So"] = 51;
+
+            // Derived Properties.
+            map["Alphabetic"] = 64;
+            map["Uppercase"] = 128;
+            map["Lowercase"] = 256;
+            map["White_Space"] = 512;
+            map["Hex_Digit"] = 1024;
+            map["Noncharacter_Code_Point"] = 2048;
+            map["Default_Ignorable_Code_Point"] = 4096;
+
+            // Script
+            map["Arabic"] = 0;
+            map["Imperial_Aramaic"] = 1;
+            map["Armenian"] = 2;
+            map["Avestan"] = 3;
+            map["Balinese"] = 4;
+            map["Bamum"] = 5;
+            map["Bengali"] = 6;
+            map["Bopomofo"] = 7;
+            map["Braille"] = 8;
+            map["Buginese"] = 9;
+            map["Buhid"] = 10;
+            map["Canadian_Aboriginal"] = 11;
+            map["Carian"] = 12;
+            map["Cham"] = 13;
+            map["Cherokee"] = 14;
+            map["Coptic"] = 15;
+            map["Cypriot"] = 16;
+            map["Cyrillic"] = 17;
+            map["Devanagari"] = 18;
+            map["Deseret"] = 19;
+            map["Egyptian_Hieroglyphs"] = 20;
+            map["Ethiopic"] = 21;
+            map["Georgian"] = 22;
+            map["Glagolitic"] = 23;
+            map["Gothic"] = 24;
+            map["Greek"] = 25;
+            map["Gujarati"] = 26;
+            map["Gurmukhi"] = 27;
+            map["Hangul"] = 28;
+            map["Han"] = 29;
+            map["Hanunoo"] = 30;
+            map["Hebrew"] = 31;
+            map["Hiragana"] = 32;
+            map["Katakana_Or_Hiragana"] = 33;
+            map["Old_Italic"] = 34;
+            map["Javanese"] = 35;
+            map["Kayah_Li"] = 36;
+            map["Katakana"] = 37;
+            map["Kharoshthi"] = 38;
+            map["Khmer"] = 39;
+            map["Kannada"] = 40;
+            map["Kaithi"] = 41;
+            map["Tai_Tham"] = 42;
+            map["Lao"] = 43;
+            map["Latin"] = 44;
+            map["Lepcha"] = 45;
+            map["Limbu"] = 46;
+            map["Linear_B"] = 47;
+            map["Lisu"] = 48;
+            map["Lycian"] = 49;
+            map["Lydian"] = 50;
+            map["Malayalam"] = 51;
+            map["Mongolian"] = 52;
+            map["Meetei_Mayek"] = 53;
+            map["Myanmar"] = 54;
+            map["Nko"] = 55;
+            map["Ogham"] = 56;
+            map["Ol_Chiki"] = 57;
+            map["Old_Turkic"] = 58;
+            map["Oriya"] = 59;
+            map["Osmanya"] = 60;
+            map["Phags_Pa"] = 61;
+            map["Inscriptional_Pahlavi"] = 62;
+            map["Phoenician"] = 63;
+            map["Inscriptional_Parthian"] = 64;
+            map["Rejang"] = 65;
+            map["Runic"] = 66;
+            map["Samaritan"] = 67;
+            map["Old_South_Arabian"] = 68;
+            map["Saurashtra"] = 69;
+            map["Shavian"] = 70;
+            map["Sinhala"] = 71;
+            map["Sundanese"] = 72;
+            map["Syloti_Nagri"] = 73;
+            map["Syriac"] = 74;
+            map["Tagbanwa"] = 75;
+            map["Tai_Le"] = 76;
+            map["New_Tai_Lue"] = 77;
+            map["Tamil"] = 78;
+            map["Tai_Viet"] = 79;
+            map["Telugu"] = 80;
+            map["Tifinagh"] = 81;
+            map["Tagalog"] = 82;
+            map["Thaana"] = 83;
+            map["Thai"] = 84;
+            map["Tibetan"] = 85;
+            map["Ugaritic"] = 86;
+            map["Vai"] = 87;
+            map["Old_Persian"] = 88;
+            map["Cuneiform"] = 89;
+            map["Yi"] = 90;
+            map["Inherited"] = 91;
+            map["Common"] = 92;
+            map["Unknown"] = 93;
+        }
+        return map;
+    }
+
+    ucd_vector info;
+};
+
+template <typename T, uint32_t block_size_ = 256>
+class ucd_table_builder
+{
+public:
+
+    static uint32_t const block_size = block_size_;
+    static uint32_t const full_span = 0x110000;
+    typedef T value_type;
+
+    ucd_table_builder() : p(new T[full_span])
+    {
+        for (uint32_t i = 0; i < full_span; ++i)
+            p[i] = 0;
+    }
+
+    void collect(char const* filename, int field, bool collect_properties = true)
+    {
+        std::cout << "collecting " << filename << std::endl;
+        ucd_info info(filename);
+        info.collect(p, field, collect_properties);
+    }
+
+    void build(std::vector<uint8_t>& stage1, std::vector<T const*>& stage2)
+    {
+        std::cout << "building tables" << std::endl;
+        std::map<block_ptr, std::vector<T const*> > blocks;
+        for (T const* i = p.get(); i < (p.get() + full_span); i += block_size)
+            blocks[block_ptr(i)].push_back(i);
+
+        // Not enough bits to store the block indices.
+        BOOST_ASSERT(blocks.size() < (1 << (sizeof(uint8_t) * 8)));
+
+        typedef std::pair<block_ptr, std::vector<T const*> > blocks_value_type;
+        std::map<T const*, std::vector<T const*> > sorted_blocks;
+        BOOST_FOREACH(blocks_value_type const& val, blocks)
+        {
+            sorted_blocks[val.first.p] = val.second;
+        }
+
+        stage1.clear();
+        stage1.reserve(full_span / block_size);
+        stage1.resize(full_span / block_size);
+        stage2.clear();
+        stage2.reserve(blocks.size());
+
+        typedef std::pair<T const*, std::vector<T const*> > sorted_blocks_value_type;
+        BOOST_FOREACH(sorted_blocks_value_type const& val, sorted_blocks)
+        {
+            stage2.push_back(val.first);
+            BOOST_FOREACH(T const* val2, val.second)
+            {
+                stage1[(val2 - p.get()) / block_size] = stage2.size() - 1;
+            }
+        }
+    }
+
+private:
+
+    struct block_ptr
+    {
+        block_ptr(T const* p) : p(p) {}
+
+        friend bool operator<(block_ptr a, block_ptr b)
+        {
+            return std::lexicographical_compare(
+                a.p, a.p + block_size, b.p, b.p + block_size);
+        }
+
+        T const* p;
+    };
+
+    boost::scoped_array<T> p;
+};
+
+template <typename Out>
+void print_tab(Out& out, int tab)
+{
+    for (int i = 0; i < tab; ++i)
+        out << ' ';
+}
+
+template <typename Out, typename C>
+void print_table(Out& out, C const& c, bool trailing_comma, int width = 4, int group = 16)
+{
+    int const tab = 4;
+    typename C::size_type size = c.size();
+    BOOST_ASSERT(size > 1);
+    print_tab(out, tab);
+    out << std::setw(width) << int(c[0]);
+    for (C::size_type i = 1; i < size; ++i)
+    {
+        out << ", ";
+        if ((i % group) == 0)
+        {
+            out << std::endl;
+            print_tab(out, tab);
+        }
+        out << std::setw(width) << int(c[i]);
+    }
+
+    if (trailing_comma)
+        out << ", " << std::endl;
+}
+
+template <typename Out>
+void print_head(Out& out)
+{
+    out
+        << "/*=============================================================================\n"
+        << "    Copyright (c) 2001-2011 Joel de Guzman\n"
+        << "\n"
+        << "    Distributed under the Boost Software License, Version 1.0. (See accompanying\n"
+        << "    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n"
+        << "\n"
+        << "    AUTOGENERATED. DO NOT EDIT!!!\n"
+        << "==============================================================================*/\n"
+        << "#include <boost/cstdint.hpp>\n"
+        << "\n"
+        << "namespace boost { namespace spirit { namespace ucd { namespace detail\n"
+        << "{"
+        ;
+}
+
+template <typename Out>
+void print_tail(Out& out)
+{
+    out
+        << "\n"
+        << "}}}} // namespace boost::spirit::unicode::detail\n"
+        ;
+}
+
+char const* get_int_type_name(int size)
+{
+    switch (size)
+    {
+        case 1: return "::boost::uint8_t";
+        case 2: return "::boost::uint16_t";
+        case 4: return "::boost::uint32_t";
+        case 5: return "::boost::uint64_t";
+        default: BOOST_ASSERT(false); return 0; // invalid size
+    };
+}
+
+template <typename Out, typename Builder>
+void print_file(Out& out, Builder& builder, int field_width, char const* name)
+{
+    std::cout << "Generating " << name << " tables" << std::endl;
+
+    uint32_t const block_size = Builder::block_size;
+    typedef typename Builder::value_type value_type;
+    print_head(out);
+
+    std::vector<uint8_t> stage1;
+    std::vector<value_type const*> stage2;
+    builder.build(stage1, stage2);
+    std::cout << "Block Size: " << block_size << std::endl;
+    std::cout << "Total Bytes: "
+        << stage1.size()+(stage2.size()*block_size*sizeof(value_type))
+        << std::endl;
+
+    out
+        << "\n"
+        << "    static const ::boost::uint8_t " << name << "_stage1[] = {\n"
+        << "\n"
+        ;
+
+    print_table(out, stage1, false, 3);
+    char const* int_name = get_int_type_name(sizeof(value_type));
+
+    out
+        << "\n"
+        << "    };"
+        << "\n"
+        << "\n"
+        << "    static const " << int_name << ' ' << name << "_stage2[] = {"
+        ;
+
+    int block_n = 0;
+    for (int i = 0; i < int(stage2.size()); ++i)
+    {
+        value_type const* p = stage2[i];
+        bool last = (i+1 == stage2.size());
+        out << "\n\n    // block " << block_n++ << std::endl;
+        print_table(out,
+            boost::iterator_range<value_type const*>(p, p+block_size), !last, field_width);
+    }
+
+    out
+        << "\n"
+        << "    };"
+        << "\n"
+        ;
+
+    out
+        << "\n"
+        << "    inline " << int_name << ' ' << name << "_lookup(::boost::uint32_t ch)\n"
+        << "    {\n"
+        << "        ::boost::uint32_t block_offset = " << name << "_stage1[ch / " << block_size << "] * " << block_size << ";\n"
+        << "        return " << name << "_stage2[block_offset + ch % " << block_size << "];\n"
+        << "    }\n"
+        ;
+
+    print_tail(out);
+}
+
+int main()
+{
+    // The category tables
+    {
+        std::ofstream out("category_table.hpp");
+        ucd_table_builder<uint16_t, 256> builder;
+        builder.collect("UnicodeData.txt", 2);
+        builder.collect("DerivedCoreProperties.txt", 1);
+        builder.collect("PropList.txt", 1);
+        print_file(out, builder, 4, "category");
+    }
+
+    // The script tables
+    {
+        std::ofstream out("script_table.hpp");
+        ucd_table_builder<uint8_t, 256> builder;
+        builder.collect("Scripts.txt", 1);
+        print_file(out, builder, 3, "script");
+    }
+
+    // The lowercase tables
+    {
+        std::ofstream out("lowercase_table.hpp");
+        ucd_table_builder<uint32_t, 256> builder;
+        builder.collect("UnicodeData.txt", 13, false);
+        print_file(out, builder, 6, "lowercase");
+    }
+
+    // The uppercase tables
+    {
+        std::ofstream out("uppercase_table.hpp");
+        ucd_table_builder<uint32_t, 256> builder;
+        builder.collect("UnicodeData.txt", 12, false);
+        print_file(out, builder, 6, "uppercase");
+    }
+
+    return 0;
+}
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp
new file mode 100644 (file)
index 0000000..8ccf635
--- /dev/null
@@ -0,0 +1,620 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t lowercase_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   8,   9, 
+      6,  10,   6,   6,  11,   6,   6,   6,   6,   6,   6,   6,  12,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,  13,  14,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,  15, 
+      6,   6,   6,   6,  16,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6
+    };
+
+    static const ::boost::uint32_t lowercase_stage2[] = {
+
+    // block 0
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,     97,     98,     99,    100,    101,    102,    103,    104,    105,    106,    107,    108,    109,    110,    111, 
+       112,    113,    114,    115,    116,    117,    118,    119,    120,    121,    122,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       224,    225,    226,    227,    228,    229,    230,    231,    232,    233,    234,    235,    236,    237,    238,    239, 
+       240,    241,    242,    243,    244,    245,    246,      0,    248,    249,    250,    251,    252,    253,    254,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 1
+       257,      0,    259,      0,    261,      0,    263,      0,    265,      0,    267,      0,    269,      0,    271,      0, 
+       273,      0,    275,      0,    277,      0,    279,      0,    281,      0,    283,      0,    285,      0,    287,      0, 
+       289,      0,    291,      0,    293,      0,    295,      0,    297,      0,    299,      0,    301,      0,    303,      0, 
+       105,      0,    307,      0,    309,      0,    311,      0,      0,    314,      0,    316,      0,    318,      0,    320, 
+         0,    322,      0,    324,      0,    326,      0,    328,      0,      0,    331,      0,    333,      0,    335,      0, 
+       337,      0,    339,      0,    341,      0,    343,      0,    345,      0,    347,      0,    349,      0,    351,      0, 
+       353,      0,    355,      0,    357,      0,    359,      0,    361,      0,    363,      0,    365,      0,    367,      0, 
+       369,      0,    371,      0,    373,      0,    375,      0,    255,    378,      0,    380,      0,    382,      0,      0, 
+         0,    595,    387,      0,    389,      0,    596,    392,      0,    598,    599,    396,      0,      0,    477,    601, 
+       603,    402,      0,    608,    611,      0,    617,    616,    409,      0,      0,      0,    623,    626,      0,    629, 
+       417,      0,    419,      0,    421,      0,    640,    424,      0,    643,      0,      0,    429,      0,    648,    432, 
+         0,    650,    651,    436,      0,    438,      0,    658,    441,      0,      0,      0,    445,      0,      0,      0, 
+         0,      0,      0,      0,    454,    454,      0,    457,    457,      0,    460,    460,      0,    462,      0,    464, 
+         0,    466,      0,    468,      0,    470,      0,    472,      0,    474,      0,    476,      0,      0,    479,      0, 
+       481,      0,    483,      0,    485,      0,    487,      0,    489,      0,    491,      0,    493,      0,    495,      0, 
+         0,    499,    499,      0,    501,      0,    405,    447,    505,      0,    507,      0,    509,      0,    511,      0, 
+
+
+    // block 2
+       513,      0,    515,      0,    517,      0,    519,      0,    521,      0,    523,      0,    525,      0,    527,      0, 
+       529,      0,    531,      0,    533,      0,    535,      0,    537,      0,    539,      0,    541,      0,    543,      0, 
+       414,      0,    547,      0,    549,      0,    551,      0,    553,      0,    555,      0,    557,      0,    559,      0, 
+       561,      0,    563,      0,      0,      0,      0,      0,      0,      0,  11365,    572,      0,    410,  11366,      0, 
+         0,    578,      0,    384,    649,    652,    583,      0,    585,      0,    587,      0,    589,      0,    591,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 3
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       881,      0,    883,      0,      0,      0,    887,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,    940,      0,    941,    942,    943,      0,    972,      0,    973,    974, 
+         0,    945,    946,    947,    948,    949,    950,    951,    952,    953,    954,    955,    956,    957,    958,    959, 
+       960,    961,      0,    963,    964,    965,    966,    967,    968,    969,    970,    971,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    983, 
+         0,      0,      0,      0,      0,      0,      0,      0,    985,      0,    987,      0,    989,      0,    991,      0, 
+       993,      0,    995,      0,    997,      0,    999,      0,   1001,      0,   1003,      0,   1005,      0,   1007,      0, 
+         0,      0,      0,      0,    952,      0,      0,   1016,      0,   1010,   1019,      0,      0,    891,    892,    893, 
+
+
+    // block 4
+      1104,   1105,   1106,   1107,   1108,   1109,   1110,   1111,   1112,   1113,   1114,   1115,   1116,   1117,   1118,   1119, 
+      1072,   1073,   1074,   1075,   1076,   1077,   1078,   1079,   1080,   1081,   1082,   1083,   1084,   1085,   1086,   1087, 
+      1088,   1089,   1090,   1091,   1092,   1093,   1094,   1095,   1096,   1097,   1098,   1099,   1100,   1101,   1102,   1103, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      1121,      0,   1123,      0,   1125,      0,   1127,      0,   1129,      0,   1131,      0,   1133,      0,   1135,      0, 
+      1137,      0,   1139,      0,   1141,      0,   1143,      0,   1145,      0,   1147,      0,   1149,      0,   1151,      0, 
+      1153,      0,      0,      0,      0,      0,      0,      0,      0,      0,   1163,      0,   1165,      0,   1167,      0, 
+      1169,      0,   1171,      0,   1173,      0,   1175,      0,   1177,      0,   1179,      0,   1181,      0,   1183,      0, 
+      1185,      0,   1187,      0,   1189,      0,   1191,      0,   1193,      0,   1195,      0,   1197,      0,   1199,      0, 
+      1201,      0,   1203,      0,   1205,      0,   1207,      0,   1209,      0,   1211,      0,   1213,      0,   1215,      0, 
+      1231,   1218,      0,   1220,      0,   1222,      0,   1224,      0,   1226,      0,   1228,      0,   1230,      0,      0, 
+      1233,      0,   1235,      0,   1237,      0,   1239,      0,   1241,      0,   1243,      0,   1245,      0,   1247,      0, 
+      1249,      0,   1251,      0,   1253,      0,   1255,      0,   1257,      0,   1259,      0,   1261,      0,   1263,      0, 
+      1265,      0,   1267,      0,   1269,      0,   1271,      0,   1273,      0,   1275,      0,   1277,      0,   1279,      0, 
+
+
+    // block 5
+      1281,      0,   1283,      0,   1285,      0,   1287,      0,   1289,      0,   1291,      0,   1293,      0,   1295,      0, 
+      1297,      0,   1299,      0,   1301,      0,   1303,      0,   1305,      0,   1307,      0,   1309,      0,   1311,      0, 
+      1313,      0,   1315,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   1377,   1378,   1379,   1380,   1381,   1382,   1383,   1384,   1385,   1386,   1387,   1388,   1389,   1390,   1391, 
+      1392,   1393,   1394,   1395,   1396,   1397,   1398,   1399,   1400,   1401,   1402,   1403,   1404,   1405,   1406,   1407, 
+      1408,   1409,   1410,   1411,   1412,   1413,   1414,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 6
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 7
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11520,  11521,  11522,  11523,  11524,  11525,  11526,  11527,  11528,  11529,  11530,  11531,  11532,  11533,  11534,  11535, 
+     11536,  11537,  11538,  11539,  11540,  11541,  11542,  11543,  11544,  11545,  11546,  11547,  11548,  11549,  11550,  11551, 
+     11552,  11553,  11554,  11555,  11556,  11557,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 8
+      7681,      0,   7683,      0,   7685,      0,   7687,      0,   7689,      0,   7691,      0,   7693,      0,   7695,      0, 
+      7697,      0,   7699,      0,   7701,      0,   7703,      0,   7705,      0,   7707,      0,   7709,      0,   7711,      0, 
+      7713,      0,   7715,      0,   7717,      0,   7719,      0,   7721,      0,   7723,      0,   7725,      0,   7727,      0, 
+      7729,      0,   7731,      0,   7733,      0,   7735,      0,   7737,      0,   7739,      0,   7741,      0,   7743,      0, 
+      7745,      0,   7747,      0,   7749,      0,   7751,      0,   7753,      0,   7755,      0,   7757,      0,   7759,      0, 
+      7761,      0,   7763,      0,   7765,      0,   7767,      0,   7769,      0,   7771,      0,   7773,      0,   7775,      0, 
+      7777,      0,   7779,      0,   7781,      0,   7783,      0,   7785,      0,   7787,      0,   7789,      0,   7791,      0, 
+      7793,      0,   7795,      0,   7797,      0,   7799,      0,   7801,      0,   7803,      0,   7805,      0,   7807,      0, 
+      7809,      0,   7811,      0,   7813,      0,   7815,      0,   7817,      0,   7819,      0,   7821,      0,   7823,      0, 
+      7825,      0,   7827,      0,   7829,      0,      0,      0,      0,      0,      0,      0,      0,      0,    223,      0, 
+      7841,      0,   7843,      0,   7845,      0,   7847,      0,   7849,      0,   7851,      0,   7853,      0,   7855,      0, 
+      7857,      0,   7859,      0,   7861,      0,   7863,      0,   7865,      0,   7867,      0,   7869,      0,   7871,      0, 
+      7873,      0,   7875,      0,   7877,      0,   7879,      0,   7881,      0,   7883,      0,   7885,      0,   7887,      0, 
+      7889,      0,   7891,      0,   7893,      0,   7895,      0,   7897,      0,   7899,      0,   7901,      0,   7903,      0, 
+      7905,      0,   7907,      0,   7909,      0,   7911,      0,   7913,      0,   7915,      0,   7917,      0,   7919,      0, 
+      7921,      0,   7923,      0,   7925,      0,   7927,      0,   7929,      0,   7931,      0,   7933,      0,   7935,      0, 
+
+
+    // block 9
+         0,      0,      0,      0,      0,      0,      0,      0,   7936,   7937,   7938,   7939,   7940,   7941,   7942,   7943, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7952,   7953,   7954,   7955,   7956,   7957,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7968,   7969,   7970,   7971,   7972,   7973,   7974,   7975, 
+         0,      0,      0,      0,      0,      0,      0,      0,   7984,   7985,   7986,   7987,   7988,   7989,   7990,   7991, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8000,   8001,   8002,   8003,   8004,   8005,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,   8017,      0,   8019,      0,   8021,      0,   8023, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8032,   8033,   8034,   8035,   8036,   8037,   8038,   8039, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8064,   8065,   8066,   8067,   8068,   8069,   8070,   8071, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8080,   8081,   8082,   8083,   8084,   8085,   8086,   8087, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8096,   8097,   8098,   8099,   8100,   8101,   8102,   8103, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8112,   8113,   8048,   8049,   8115,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8050,   8051,   8052,   8053,   8131,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8144,   8145,   8054,   8055,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8160,   8161,   8058,   8059,   8165,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,   8056,   8057,   8060,   8061,   8179,      0,      0,      0, 
+
+
+    // block 10
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,    969,      0,      0,      0,    107,    229,      0,      0,      0,      0, 
+         0,      0,   8526,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8560,   8561,   8562,   8563,   8564,   8565,   8566,   8567,   8568,   8569,   8570,   8571,   8572,   8573,   8574,   8575, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,   8580,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 11
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,   9424,   9425,   9426,   9427,   9428,   9429,   9430,   9431,   9432,   9433, 
+      9434,   9435,   9436,   9437,   9438,   9439,   9440,   9441,   9442,   9443,   9444,   9445,   9446,   9447,   9448,   9449, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 12
+     11312,  11313,  11314,  11315,  11316,  11317,  11318,  11319,  11320,  11321,  11322,  11323,  11324,  11325,  11326,  11327, 
+     11328,  11329,  11330,  11331,  11332,  11333,  11334,  11335,  11336,  11337,  11338,  11339,  11340,  11341,  11342,  11343, 
+     11344,  11345,  11346,  11347,  11348,  11349,  11350,  11351,  11352,  11353,  11354,  11355,  11356,  11357,  11358,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11361,      0,    619,   7549,    637,      0,      0,  11368,      0,  11370,      0,  11372,      0,    593,    625,    592, 
+         0,      0,  11379,      0,      0,  11382,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11393,      0,  11395,      0,  11397,      0,  11399,      0,  11401,      0,  11403,      0,  11405,      0,  11407,      0, 
+     11409,      0,  11411,      0,  11413,      0,  11415,      0,  11417,      0,  11419,      0,  11421,      0,  11423,      0, 
+     11425,      0,  11427,      0,  11429,      0,  11431,      0,  11433,      0,  11435,      0,  11437,      0,  11439,      0, 
+     11441,      0,  11443,      0,  11445,      0,  11447,      0,  11449,      0,  11451,      0,  11453,      0,  11455,      0, 
+     11457,      0,  11459,      0,  11461,      0,  11463,      0,  11465,      0,  11467,      0,  11469,      0,  11471,      0, 
+     11473,      0,  11475,      0,  11477,      0,  11479,      0,  11481,      0,  11483,      0,  11485,      0,  11487,      0, 
+     11489,      0,  11491,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 13
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     42561,      0,  42563,      0,  42565,      0,  42567,      0,  42569,      0,  42571,      0,  42573,      0,  42575,      0, 
+     42577,      0,  42579,      0,  42581,      0,  42583,      0,  42585,      0,  42587,      0,  42589,      0,  42591,      0, 
+         0,      0,  42595,      0,  42597,      0,  42599,      0,  42601,      0,  42603,      0,  42605,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     42625,      0,  42627,      0,  42629,      0,  42631,      0,  42633,      0,  42635,      0,  42637,      0,  42639,      0, 
+     42641,      0,  42643,      0,  42645,      0,  42647,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 14
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,  42787,      0,  42789,      0,  42791,      0,  42793,      0,  42795,      0,  42797,      0,  42799,      0, 
+         0,      0,  42803,      0,  42805,      0,  42807,      0,  42809,      0,  42811,      0,  42813,      0,  42815,      0, 
+     42817,      0,  42819,      0,  42821,      0,  42823,      0,  42825,      0,  42827,      0,  42829,      0,  42831,      0, 
+     42833,      0,  42835,      0,  42837,      0,  42839,      0,  42841,      0,  42843,      0,  42845,      0,  42847,      0, 
+     42849,      0,  42851,      0,  42853,      0,  42855,      0,  42857,      0,  42859,      0,  42861,      0,  42863,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,  42874,      0,  42876,      0,   7545,  42879,      0, 
+     42881,      0,  42883,      0,  42885,      0,  42887,      0,      0,      0,      0,  42892,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 15
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  65345,  65346,  65347,  65348,  65349,  65350,  65351,  65352,  65353,  65354,  65355,  65356,  65357,  65358,  65359, 
+     65360,  65361,  65362,  65363,  65364,  65365,  65366,  65367,  65368,  65369,  65370,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 16
+     66600,  66601,  66602,  66603,  66604,  66605,  66606,  66607,  66608,  66609,  66610,  66611,  66612,  66613,  66614,  66615, 
+     66616,  66617,  66618,  66619,  66620,  66621,  66622,  66623,  66624,  66625,  66626,  66627,  66628,  66629,  66630,  66631, 
+     66632,  66633,  66634,  66635,  66636,  66637,  66638,  66639,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0
+    };
+
+    inline ::boost::uint32_t lowercase_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = lowercase_stage1[ch / 256] * 256;
+        return lowercase_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/query.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/query.hpp
new file mode 100644 (file)
index 0000000..370ab67
--- /dev/null
@@ -0,0 +1,305 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    Autogenerated by MultiStageTable.py (Unicode multi-stage
+    table builder) (c) Peter Kankowski, 2008
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UNICODE_QUERY_FEBRUARY_2_2010)
+#define BOOST_SPIRIT_UNICODE_QUERY_FEBRUARY_2_2010
+
+#include <boost/cstdint.hpp>
+
+# include "category_table.hpp"
+# include "script_table.hpp"
+# include "lowercase_table.hpp"
+# include "uppercase_table.hpp"
+
+namespace boost { namespace spirit { namespace ucd
+{
+    // This header provides Basic (Level 1) Unicode Support
+    // See http://unicode.org/reports/tr18/ for details
+
+    struct properties
+    {
+        // bit pattern: xxMMMCCC
+        // MMM: major_category
+        // CCC: category
+
+        enum major_category
+        {
+            letter,
+            mark,
+            number,
+            separator,
+            other,
+            punctuation,
+            symbol
+        };
+
+        enum category
+        {
+            uppercase_letter = 0,   // [Lu] an uppercase letter
+            lowercase_letter,       // [Ll] a lowercase letter
+            titlecase_letter,       // [Lt] a digraphic character, with first part uppercase
+            modifier_letter,        // [Lm] a modifier letter
+            other_letter,           // [Lo] other letters, including syllables and ideographs
+
+            nonspacing_mark = 8,    // [Mn] a nonspacing combining mark (zero advance width)
+            enclosing_mark,         // [Me] an enclosing combining mark
+            spacing_mark,           // [Mc] a spacing combining mark (positive advance width)
+
+            decimal_number = 16,    // [Nd] a decimal digit
+            letter_number,          // [Nl] a letterlike numeric character
+            other_number,           // [No] a numeric character of other type
+
+            space_separator = 24,   // [Zs] a space character (of various non-zero widths)
+            line_separator,         // [Zl] U+2028 LINE SEPARATOR only
+            paragraph_separator,    // [Zp] U+2029 PARAGRAPH SEPARATOR only
+
+            control = 32,           // [Cc] a C0 or C1 control code
+            format,                 // [Cf] a format control character
+            private_use,            // [Co] a private-use character
+            surrogate,              // [Cs] a surrogate code point
+            unassigned,             // [Cn] a reserved unassigned code point or a noncharacter
+
+            dash_punctuation = 40,  // [Pd] a dash or hyphen punctuation mark
+            open_punctuation,       // [Ps] an opening punctuation mark (of a pair)
+            close_punctuation,      // [Pe] a closing punctuation mark (of a pair)
+            connector_punctuation,  // [Pc] a connecting punctuation mark, like a tie
+            other_punctuation,      // [Po] a punctuation mark of other type
+            initial_punctuation,    // [Pi] an initial quotation mark
+            final_punctuation,      // [Pf] a final quotation mark
+
+            math_symbol = 48,       // [Sm] a symbol of primarily mathematical use
+            currency_symbol,        // [Sc] a currency sign
+            modifier_symbol,        // [Sk] a non-letterlike modifier symbol
+            other_symbol            // [So] a symbol of other type
+        };
+
+        enum derived_properties
+        {
+            alphabetic = 64,
+            uppercase = 128,
+            lowercase = 256,
+            white_space = 512,
+            hex_digit = 1024,
+            noncharacter_code_point = 2048,
+            default_ignorable_code_point = 4096
+        };
+
+        enum script
+        {
+            arabic = 0,
+            imperial_aramaic = 1,
+            armenian = 2,
+            avestan = 3,
+            balinese = 4,
+            bamum = 5,
+            bengali = 6,
+            bopomofo = 7,
+            braille = 8,
+            buginese = 9,
+            buhid = 10,
+            canadian_aboriginal = 11,
+            carian = 12,
+            cham = 13,
+            cherokee = 14,
+            coptic = 15,
+            cypriot = 16,
+            cyrillic = 17,
+            devanagari = 18,
+            deseret = 19,
+            egyptian_hieroglyphs = 20,
+            ethiopic = 21,
+            georgian = 22,
+            glagolitic = 23,
+            gothic = 24,
+            greek = 25,
+            gujarati = 26,
+            gurmukhi = 27,
+            hangul = 28,
+            han = 29,
+            hanunoo = 30,
+            hebrew = 31,
+            hiragana = 32,
+            katakana_or_hiragana = 33,
+            old_italic = 34,
+            javanese = 35,
+            kayah_li = 36,
+            katakana = 37,
+            kharoshthi = 38,
+            khmer = 39,
+            kannada = 40,
+            kaithi = 41,
+            tai_tham = 42,
+            lao = 43,
+            latin = 44,
+            lepcha = 45,
+            limbu = 46,
+            linear_b = 47,
+            lisu = 48,
+            lycian = 49,
+            lydian = 50,
+            malayalam = 51,
+            mongolian = 52,
+            meetei_mayek = 53,
+            myanmar = 54,
+            nko = 55,
+            ogham = 56,
+            ol_chiki = 57,
+            old_turkic = 58,
+            oriya = 59,
+            osmanya = 60,
+            phags_pa = 61,
+            inscriptional_pahlavi = 62,
+            phoenician = 63,
+            inscriptional_parthian = 64,
+            rejang = 65,
+            runic = 66,
+            samaritan = 67,
+            old_south_arabian = 68,
+            saurashtra = 69,
+            shavian = 70,
+            sinhala = 71,
+            sundanese = 72,
+            syloti_nagri = 73,
+            syriac = 74,
+            tagbanwa = 75,
+            tai_le = 76,
+            new_tai_lue = 77,
+            tamil = 78,
+            tai_viet = 79,
+            telugu = 80,
+            tifinagh = 81,
+            tagalog = 82,
+            thaana = 83,
+            thai = 84,
+            tibetan = 85,
+            ugaritic = 86,
+            vai = 87,
+            old_persian = 88,
+            cuneiform = 89,
+            yi = 90,
+            inherited = 91,
+            common = 92,
+            unknown = 93
+        };
+    };
+
+    inline properties::category get_category(::boost::uint32_t ch)
+    {
+        return static_cast<properties::category>(detail::category_lookup(ch) & 0x3F);
+    }
+
+    inline properties::major_category get_major_category(::boost::uint32_t ch)
+    {
+        return static_cast<properties::major_category>(get_category(ch) >> 3);
+    }
+
+    inline bool is_punctuation(::boost::uint32_t ch)
+    {
+        return get_major_category(ch) == properties::punctuation;
+    }
+
+    inline bool is_decimal_number(::boost::uint32_t ch)
+    {
+        return get_category(ch) == properties::decimal_number;
+    }
+
+    inline bool is_hex_digit(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::hex_digit) != 0;
+    }
+
+    inline bool is_control(::boost::uint32_t ch)
+    {
+        return get_category(ch) == properties::control;
+    }
+
+    inline bool is_alphabetic(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::alphabetic) != 0;
+    }
+
+    inline bool is_alphanumeric(::boost::uint32_t ch)
+    {
+        return is_decimal_number(ch) || is_alphabetic(ch);
+    }
+
+    inline bool is_uppercase(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::uppercase) != 0;
+    }
+
+    inline bool is_lowercase(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::lowercase) != 0;
+    }
+
+    inline bool is_white_space(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::white_space) != 0;
+    }
+
+    inline bool is_blank(::boost::uint32_t ch)
+    {
+        switch (ch)
+        {
+            case '\n': case '\v': case '\f': case '\r':
+                return false;
+            default:
+                return is_white_space(ch)
+                && !(   get_category(ch) == properties::line_separator
+                    ||  get_category(ch) == properties::paragraph_separator
+                    );
+        }
+    }
+
+    inline bool is_graph(::boost::uint32_t ch)
+    {
+        return !(   is_white_space(ch)
+                ||  get_category(ch) == properties::control
+                ||  get_category(ch) == properties::surrogate
+                ||  get_category(ch) == properties::unassigned
+                );
+    }
+
+    inline bool is_print(::boost::uint32_t ch)
+    {
+        return (is_graph(ch) || is_blank(ch)) && !is_control(ch);
+    }
+
+    inline bool is_noncharacter_code_point(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::noncharacter_code_point) != 0;
+    }
+
+    inline bool is_default_ignorable_code_point(::boost::uint32_t ch)
+    {
+        return (detail::category_lookup(ch) & properties::default_ignorable_code_point) != 0;
+    }
+
+    inline properties::script get_script(::boost::uint32_t ch)
+    {
+        return static_cast<properties::script>(detail::script_lookup(ch) & 0x7F);
+    }
+
+    inline ::boost::uint32_t to_lowercase(::boost::uint32_t ch)
+    {
+        // The table returns 0 to signal that this code maps to itself
+        ::boost::uint32_t r = detail::lowercase_lookup(ch);
+        return (r == 0)? ch : r;
+    }
+
+    inline ::boost::uint32_t to_uppercase(::boost::uint32_t ch)
+    {
+        // The table returns 0 to signal that this code maps to itself
+        ::boost::uint32_t r = detail::uppercase_lookup(ch);
+        return (r == 0)? ch : r;
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/script_table.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/script_table.hpp
new file mode 100644 (file)
index 0000000..a4c117c
--- /dev/null
@@ -0,0 +1,2159 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t script_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15, 
+     16,  17,  18,  19,  20,  20,  21,  22,  23,  24,  25,  26,  27,  28,   1,  29, 
+     30,  31,  32,  33,  34,  32,  35,  36,  37,  32,  32,  38,  39,  40,  41,  42, 
+     43,  44,  45,  46,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  48,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  49, 
+     50,  50,  50,  50,  51,  52,  53,  54,  55,  56,  57,  58,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  59,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  47,  61,  62,  60,  63,  64,  65, 
+     66,  67,  68,  69,  70,  60,  60,  60,  71,  72,  73,  74,  75,  60,  60,  60, 
+     76,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     77,  77,  77,  78,  79,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     80,  80,  80,  80,  81,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     82,  83,  84,  85,  86,  87,  88,  89,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     90,  91,  92,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  93,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  94,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  47,  47,  95,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     96,  97,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60
+    };
+
+    static const ::boost::uint8_t script_stage2[] = {
+
+    // block 0
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  92,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  92,  44,  44,  44,  44,  44,  44,  44,  44, 
+
+
+    // block 1
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+
+
+    // block 2
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 3
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     25,  25,  25,  25,  92,  25,  25,  25,   0,   0,  25,  25,  25,  25,  92,   0, 
+      0,   0,   0,   0,  25,  92,  25,  92,  25,  25,  25,   0,  25,   0,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+
+
+    // block 4
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  91,  91,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+
+
+    // block 5
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   0,   0,   2,   2,   2,   2,   2,   2,   2, 
+      0,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2, 
+      2,   2,   2,   2,   2,   2,   2,   2,   0,  92,   2,   0,   0,   0,   0,   0, 
+      0,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,   0,   0,   0,   0,   0,   0,   0,   0, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,   0,   0,   0,   0,   0, 
+     31,  31,  31,  31,  31,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 6
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 7
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,   0,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74, 
+     74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,   0,   0,  74,  74,  74, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83, 
+     83,  83,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55, 
+     55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,   0,   0,   0,   0,   0, 
+
+
+    // block 8
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,   0,   0, 
+     67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 9
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0,   0,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0, 
+     18,  91,  91,  18,  18,  18,   0,   0,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  92,  92,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     92,  18,  18,   0,   0,   0,   0,   0,   0,  18,  18,  18,  18,  18,  18,  18, 
+      0,   6,   6,   6,   0,   6,   6,   6,   6,   6,   6,   6,   6,   0,   0,   6, 
+      6,   0,   0,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   0,   6,   6,   6,   6,   6,   6, 
+      6,   0,   6,   0,   0,   0,   6,   6,   6,   6,   0,   0,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   0,   0,   6,   6,   0,   0,   6,   6,   6,   6,   0, 
+      0,   0,   0,   0,   0,   0,   0,   6,   0,   0,   0,   0,   6,   6,   0,   6, 
+      6,   6,   6,   6,   0,   0,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   0,   0,   0,   0, 
+
+
+    // block 10
+      0,  27,  27,  27,   0,  27,  27,  27,  27,  27,  27,   0,   0,   0,   0,  27, 
+     27,   0,   0,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27, 
+     27,  27,  27,  27,  27,  27,  27,  27,  27,   0,  27,  27,  27,  27,  27,  27, 
+     27,   0,  27,  27,   0,  27,  27,   0,  27,  27,   0,   0,  27,   0,  27,  27, 
+     27,  27,  27,   0,   0,   0,   0,  27,  27,   0,   0,  27,  27,  27,   0,   0, 
+      0,  27,   0,   0,   0,   0,   0,   0,   0,  27,  27,  27,  27,   0,  27,   0, 
+      0,   0,   0,   0,   0,   0,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27, 
+     27,  27,  27,  27,  27,  27,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,  26,  26,  26,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,   0,  26, 
+     26,  26,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26, 
+     26,  26,  26,  26,  26,  26,  26,  26,  26,   0,  26,  26,  26,  26,  26,  26, 
+     26,   0,  26,  26,   0,  26,  26,  26,  26,  26,   0,   0,  26,  26,  26,  26, 
+     26,  26,  26,  26,  26,  26,   0,  26,  26,  26,   0,  26,  26,  26,   0,   0, 
+     26,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     26,  26,  26,  26,   0,   0,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26, 
+      0,  26,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 11
+      0,  59,  59,  59,   0,  59,  59,  59,  59,  59,  59,  59,  59,   0,   0,  59, 
+     59,   0,   0,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59, 
+     59,  59,  59,  59,  59,  59,  59,  59,  59,   0,  59,  59,  59,  59,  59,  59, 
+     59,   0,  59,  59,   0,  59,  59,  59,  59,  59,   0,   0,  59,  59,  59,  59, 
+     59,  59,  59,  59,  59,   0,   0,  59,  59,   0,   0,  59,  59,  59,   0,   0, 
+      0,   0,   0,   0,   0,   0,  59,  59,   0,   0,   0,   0,  59,  59,   0,  59, 
+     59,  59,  59,  59,   0,   0,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59, 
+     59,  59,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,  78,  78,   0,  78,  78,  78,  78,  78,  78,   0,   0,   0,  78,  78, 
+     78,   0,  78,  78,  78,  78,   0,   0,   0,  78,  78,   0,  78,   0,  78,  78, 
+      0,   0,   0,  78,  78,   0,   0,   0,  78,  78,  78,   0,   0,   0,  78,  78, 
+     78,  78,  78,  78,  78,  78,  78,  78,  78,  78,   0,   0,   0,   0,  78,  78, 
+     78,  78,  78,   0,   0,   0,  78,  78,  78,   0,  78,  78,  78,  78,   0,   0, 
+     78,   0,   0,   0,   0,   0,   0,  78,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78, 
+     78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,   0,   0,   0,   0,   0, 
+
+
+    // block 12
+      0,  80,  80,  80,   0,  80,  80,  80,  80,  80,  80,  80,  80,   0,  80,  80, 
+     80,   0,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80, 
+     80,  80,  80,  80,  80,  80,  80,  80,  80,   0,  80,  80,  80,  80,  80,  80, 
+     80,  80,  80,  80,   0,  80,  80,  80,  80,  80,   0,   0,   0,  80,  80,  80, 
+     80,  80,  80,  80,  80,   0,  80,  80,  80,   0,  80,  80,  80,  80,   0,   0, 
+      0,   0,   0,   0,   0,  80,  80,   0,  80,  80,   0,   0,   0,   0,   0,   0, 
+     80,  80,  80,  80,   0,   0,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80, 
+      0,   0,   0,   0,   0,   0,   0,   0,  80,  80,  80,  80,  80,  80,  80,  80, 
+      0,   0,  40,  40,   0,  40,  40,  40,  40,  40,  40,  40,  40,   0,  40,  40, 
+     40,   0,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40, 
+     40,  40,  40,  40,  40,  40,  40,  40,  40,   0,  40,  40,  40,  40,  40,  40, 
+     40,  40,  40,  40,   0,  40,  40,  40,  40,  40,   0,   0,  40,  40,  40,  40, 
+     40,  40,  40,  40,  40,   0,  40,  40,  40,   0,  40,  40,  40,  40,   0,   0, 
+      0,   0,   0,   0,   0,  40,  40,   0,   0,   0,   0,   0,   0,   0,  40,   0, 
+     40,  40,  40,  40,   0,   0,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40, 
+      0,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 13
+      0,   0,  51,  51,   0,  51,  51,  51,  51,  51,  51,  51,  51,   0,  51,  51, 
+     51,   0,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,  51,  51,  51,   0,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,  51,  51,  51,  51,   0,   0,   0,  51,  51,  51, 
+     51,  51,  51,  51,  51,   0,  51,  51,  51,   0,  51,  51,  51,  51,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,  51,   0,   0,   0,   0,   0,   0,   0,   0, 
+     51,  51,  51,  51,   0,   0,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51, 
+     51,  51,  51,  51,  51,  51,   0,   0,   0,  51,  51,  51,  51,  51,  51,  51, 
+      0,   0,  71,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71, 
+     71,  71,  71,  71,  71,  71,  71,   0,   0,   0,  71,  71,  71,  71,  71,  71, 
+     71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71, 
+     71,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71,  71,   0,  71,   0,   0, 
+     71,  71,  71,  71,  71,  71,  71,   0,   0,   0,  71,   0,   0,   0,   0,  71, 
+     71,  71,  71,  71,  71,   0,  71,   0,  71,  71,  71,  71,  71,  71,  71,  71, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,  71,  71,  71,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 14
+      0,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,   0,   0,   0,   0,  92, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84, 
+     84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,  43,  43,   0,  43,   0,   0,  43,  43,   0,  43,   0,   0,  43,   0,   0, 
+      0,   0,   0,   0,  43,  43,  43,  43,   0,  43,  43,  43,  43,  43,  43,  43, 
+      0,  43,  43,  43,   0,  43,   0,  43,   0,   0,  43,  43,   0,  43,  43,  43, 
+     43,  43,  43,  43,  43,  43,  43,  43,  43,  43,   0,  43,  43,  43,   0,   0, 
+     43,  43,  43,  43,  43,   0,  43,   0,  43,  43,  43,  43,  43,  43,   0,   0, 
+     43,  43,  43,  43,  43,  43,  43,  43,  43,  43,   0,   0,  43,  43,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 15
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,   0,   0, 
+      0,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,   0,   0,   0, 
+     85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85, 
+     85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,   0,  85,  85, 
+     85,  85,  85,  85,  85,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 16
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  92,  22,   0,   0,   0, 
+
+
+    // block 17
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+
+
+    // block 18
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+
+
+    // block 19
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,   0,  21,  21,  21,  21,   0,   0,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,   0,   0, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14, 
+     14,  14,  14,  14,  14,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 20
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+
+
+    // block 21
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56, 
+     56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,   0,   0,   0, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66, 
+     66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  92,  92,  92,  66,  66, 
+     66,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 22
+     82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,   0,  82,  82, 
+     82,  82,  82,  82,  82,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30, 
+     30,  30,  30,  30,  30,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10, 
+     10,  10,  10,  10,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,   0,  75,  75, 
+     75,   0,  75,  75,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0,   0,   0,   0,   0, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 23
+     52,  52,  92,  92,  52,  92,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0,   0,   0,   0, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52, 
+     52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,   0,   0,   0,   0,   0, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11, 
+     11,  11,  11,  11,  11,  11,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 24
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0,   0, 
+     46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,   0,   0,   0,   0, 
+     46,   0,   0,   0,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46, 
+     76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76, 
+     76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,   0,   0, 
+     76,  76,  76,  76,  76,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,   0,   0,   0, 
+     77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,   0,   0,   0,  77,  77, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+     39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39, 
+
+
+    // block 25
+      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9, 
+      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   0,   0,   9,   9, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,  42, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,   0,   0,   0,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0,   0,   0,   0,   0, 
+     42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 26
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   0,   0,   0,   0, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4, 
+      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   0,   0,   0, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,   0,   0,   0,  72,  72, 
+     72,  72,  72,  72,  72,  72,  72,  72,  72,  72,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 27
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,   0,   0,   0,  45,  45,  45,  45,  45, 
+     45,  45,  45,  45,  45,  45,  45,  45,  45,  45,   0,   0,   0,  45,  45,  45, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+     57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  92,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  92,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92,  91,  92,  92, 
+     92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 28
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  25,  25,  25,  25,  25,  17,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  25,  25,  25, 
+     25,  25,  44,  44,  44,  44,  25,  25,  25,  25,  25,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  17,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  25, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  91,  91,  91, 
+
+
+    // block 29
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,   0,  25,   0,  25,   0,  25,   0,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0,   0, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,   0,   0,  25,  25,  25,  25,  25,  25,   0,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+      0,   0,  25,  25,  25,   0,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0, 
+
+
+    // block 30
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92, 
+     92,  44,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+     44,  44,  44,  44,  44,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 31
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  25,  92,  92,  92,  44,  44,  92,  92,  92,  92, 
+     92,  92,  44,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  44,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  92,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 32
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 33
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 34
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 35
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,  92,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 36
+      0,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,  92, 
+     92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 37
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+      8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8, 
+
+
+    // block 38
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 39
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,   0, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23, 
+     23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,   0, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15, 
+     15,  15,   0,   0,   0,   0,   0,   0,   0,  15,  15,  15,  15,  15,  15,  15, 
+
+
+    // block 40
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22, 
+     22,  22,  22,  22,  22,  22,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81, 
+     81,  81,  81,  81,  81,  81,   0,   0,   0,   0,   0,   0,   0,   0,   0,  81, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21, 
+     21,  21,  21,  21,  21,  21,  21,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     21,  21,  21,  21,  21,  21,  21,   0,  21,  21,  21,  21,  21,  21,  21,   0, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+
+
+    // block 41
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 42
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+
+
+    // block 43
+     92,  92,  92,  92,  92,  29,  92,  29,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  29,  29,  29,  29,  29,  29,  29,  29,  29,  91,  91,  91,  91,  91,  91, 
+     92,  92,  92,  92,  92,  92,  92,  92,  29,  29,  29,  29,  92,  92,  92,  92, 
+      0,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32,  32,   0,   0,  91,  91,  92,  92,  32,  32,  32, 
+     92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  92,  92,  37,  37,  37, 
+
+
+    // block 44
+      0,   0,   0,   0,   0,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   0,   0, 
+      0,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7, 
+      7,   7,   7,   7,   7,   7,   7,   7,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+
+
+    // block 45
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,   0, 
+
+
+    // block 46
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 47
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+
+
+    // block 48
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 49
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 50
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+
+
+    // block 51
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,   0,   0,   0, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90, 
+     90,  90,  90,  90,  90,  90,  90,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+     48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48, 
+
+
+    // block 52
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+
+
+    // block 53
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87, 
+     87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+      0,   0,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17, 
+     17,  17,  17,  17,  17,  17,  17,  17,   0,   0,   0,   0,   0,   0,   0,   0, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5, 
+      5,   5,   5,   5,   5,   5,   5,   5,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 54
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  44,  44,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  44,  44,  44,  44,  44, 
+
+
+    // block 55
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73, 
+     73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61, 
+     61,  61,  61,  61,  61,  61,  61,  61,   0,   0,   0,   0,   0,   0,   0,   0, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69, 
+     69,  69,  69,  69,  69,   0,   0,   0,   0,   0,   0,   0,   0,   0,  69,  69, 
+     69,  69,  69,  69,  69,  69,  69,  69,  69,  69,   0,   0,   0,   0,   0,   0, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18, 
+     18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,   0,   0,   0,   0, 
+
+
+    // block 56
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36, 
+     65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65, 
+     65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65, 
+     65,  65,  65,  65,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  65, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0,   0,   0, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,   0,  35, 
+     35,  35,  35,  35,  35,  35,  35,  35,  35,  35,   0,   0,   0,   0,  35,  35, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 57
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13, 
+     13,  13,  13,  13,  13,  13,  13,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,   0,   0, 
+     13,  13,  13,  13,  13,  13,  13,  13,  13,  13,   0,   0,  13,  13,  13,  13, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54, 
+     54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,   0,   0,   0,   0, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79, 
+     79,  79,  79,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  79,  79,  79,  79,  79, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 58
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,   0,   0, 
+     53,  53,  53,  53,  53,  53,  53,  53,  53,  53,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 59
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,   0,   0,   0,   0,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0,   0,   0,   0, 
+
+
+    // block 60
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 61
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 62
+     44,  44,  44,  44,  44,  44,  44,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   2,   2,   2,   2,   2,   0,   0,   0,   0,   0,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+     31,  31,  31,  31,  31,  31,  31,   0,  31,  31,  31,  31,  31,   0,  31,   0, 
+     31,  31,   0,  31,  31,   0,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 63
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,   0, 
+
+
+    // block 64
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0, 
+     91,  91,  91,  91,  91,  91,  91,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92, 
+
+
+    // block 65
+      0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44, 
+     44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     92,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37, 
+     37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  92,  92, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28, 
+     28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,   0, 
+      0,   0,  28,  28,  28,  28,  28,  28,   0,   0,  28,  28,  28,  28,  28,  28, 
+      0,   0,  28,  28,  28,  28,  28,  28,   0,   0,  28,  28,  28,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92,  92,  92,  92,   0,   0, 
+
+
+    // block 66
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,   0,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,  47,  47,   0,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,   0,   0,   0,   0,   0, 
+
+
+    // block 67
+     92,  92,  92,   0,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,   0,   0, 
+
+
+    // block 68
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49, 
+     49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,   0,   0,   0, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12, 
+     12,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 69
+     34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34, 
+     34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,   0, 
+     34,  34,  34,  34,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24, 
+     24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86, 
+     86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,   0,  86, 
+     88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,   0,   0,   0,   0,  88,  88,  88,  88,  88,  88,  88,  88, 
+     88,  88,  88,  88,  88,  88,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 70
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,   0,   0, 
+     60,  60,  60,  60,  60,  60,  60,  60,  60,  60,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 71
+     16,  16,  16,  16,  16,  16,   0,   0,  16,   0,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16, 
+     16,  16,  16,  16,  16,  16,   0,  16,  16,   0,   0,   0,  16,   0,   0,  16, 
+      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1, 
+      1,   1,   1,   1,   1,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 72
+     63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63, 
+     63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,   0,   0,   0,  63, 
+     50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50, 
+     50,  50,  50,  50,  50,  50,  50,  50,  50,  50,   0,   0,   0,   0,   0,  50, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 73
+     38,  38,  38,  38,   0,  38,  38,   0,   0,   0,   0,   0,  38,  38,  38,  38, 
+     38,  38,  38,  38,   0,  38,  38,  38,   0,  38,  38,  38,  38,  38,  38,  38, 
+     38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38, 
+     38,  38,  38,  38,   0,   0,   0,   0,  38,  38,  38,   0,   0,   0,   0,  38, 
+     38,  38,  38,  38,  38,  38,  38,  38,   0,   0,   0,   0,   0,   0,   0,   0, 
+     38,  38,  38,  38,  38,  38,  38,  38,  38,   0,   0,   0,   0,   0,   0,   0, 
+     68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68, 
+     68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 74
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3, 
+      3,   3,   3,   3,   3,   3,   0,   0,   0,   3,   3,   3,   3,   3,   3,   3, 
+     64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64, 
+     64,  64,  64,  64,  64,  64,   0,   0,  64,  64,  64,  64,  64,  64,  64,  64, 
+     62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62, 
+     62,  62,  62,   0,   0,   0,   0,   0,  62,  62,  62,  62,  62,  62,  62,  62, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 75
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58, 
+     58,  58,  58,  58,  58,  58,  58,  58,  58,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 76
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41, 
+     41,  41,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 77
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+
+
+    // block 78
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 79
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89, 
+     89,  89,  89,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     89,  89,  89,  89,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 80
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+
+
+    // block 81
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20, 
+     20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 82
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 83
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  91,  91, 
+     91,  91,  91,  92,  92,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  91,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 84
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25, 
+     25,  25,  25,  25,  25,  25,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 85
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 86
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92, 
+      0,   0,  92,   0,   0,  92,  92,   0,   0,  92,  92,  92,  92,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,   0,  92,  92,  92, 
+     92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 87
+     92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0,   0,  92,  92,  92, 
+     92,  92,  92,  92,  92,   0,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,  92,  92,  92,  92,   0, 
+     92,  92,  92,  92,  92,   0,  92,   0,   0,   0,  92,  92,  92,  92,  92,  92, 
+     92,   0,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 88
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,   0,   0,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 89
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+
+
+    // block 90
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 91
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,   0, 
+      0,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,  92, 
+      0,   0,  92,   0,   0,   0,  92,   0,   0,   0,  92,  92,  92,  92,  92,   0, 
+      0,   0,   0,   0,   0,   0,   0,  92,   0,   0,   0,   0,   0,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,  92,   0,  92,  92,   0,   0,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  92,  92,  92,  92,   0,   0, 
+     92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 92
+     32,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 93
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 94
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 95
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29, 
+     29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 96
+      0,  92,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+     92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+
+
+    // block 97
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+     91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91, 
+      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
+    };
+
+    inline ::boost::uint8_t script_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = script_stage1[ch / 256] * 256;
+        return script_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp
new file mode 100644 (file)
index 0000000..5ecae7c
--- /dev/null
@@ -0,0 +1,639 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    AUTOGENERATED. DO NOT EDIT!!!
+==============================================================================*/
+#include <boost/cstdint.hpp>
+
+namespace boost { namespace spirit { namespace ucd { namespace detail
+{
+    static const ::boost::uint8_t uppercase_stage1[] = {
+
+      0,   1,   2,   3,   4,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   8,   9, 
+      6,  10,   6,   6,  11,   6,   6,   6,   6,   6,   6,   6,  12,  13,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,  14,  15,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,  16, 
+      6,   6,   6,   6,  17,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6, 
+      6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6
+    };
+
+    static const ::boost::uint32_t uppercase_stage2[] = {
+
+    // block 0
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,     65,     66,     67,     68,     69,     70,     71,     72,     73,     74,     75,     76,     77,     78,     79, 
+        80,     81,     82,     83,     84,     85,     86,     87,     88,     89,     90,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,    924,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+       192,    193,    194,    195,    196,    197,    198,    199,    200,    201,    202,    203,    204,    205,    206,    207, 
+       208,    209,    210,    211,    212,    213,    214,      0,    216,    217,    218,    219,    220,    221,    222,    376, 
+
+
+    // block 1
+         0,    256,      0,    258,      0,    260,      0,    262,      0,    264,      0,    266,      0,    268,      0,    270, 
+         0,    272,      0,    274,      0,    276,      0,    278,      0,    280,      0,    282,      0,    284,      0,    286, 
+         0,    288,      0,    290,      0,    292,      0,    294,      0,    296,      0,    298,      0,    300,      0,    302, 
+         0,     73,      0,    306,      0,    308,      0,    310,      0,      0,    313,      0,    315,      0,    317,      0, 
+       319,      0,    321,      0,    323,      0,    325,      0,    327,      0,      0,    330,      0,    332,      0,    334, 
+         0,    336,      0,    338,      0,    340,      0,    342,      0,    344,      0,    346,      0,    348,      0,    350, 
+         0,    352,      0,    354,      0,    356,      0,    358,      0,    360,      0,    362,      0,    364,      0,    366, 
+         0,    368,      0,    370,      0,    372,      0,    374,      0,      0,    377,      0,    379,      0,    381,     83, 
+       579,      0,      0,    386,      0,    388,      0,      0,    391,      0,      0,      0,    395,      0,      0,      0, 
+         0,      0,    401,      0,      0,    502,      0,      0,      0,    408,    573,      0,      0,      0,    544,      0, 
+         0,    416,      0,    418,      0,    420,      0,      0,    423,      0,      0,      0,      0,    428,      0,      0, 
+       431,      0,      0,      0,    435,      0,    437,      0,      0,    440,      0,      0,      0,    444,      0,    503, 
+         0,      0,      0,      0,      0,    452,    452,      0,    455,    455,      0,    458,    458,      0,    461,      0, 
+       463,      0,    465,      0,    467,      0,    469,      0,    471,      0,    473,      0,    475,    398,      0,    478, 
+         0,    480,      0,    482,      0,    484,      0,    486,      0,    488,      0,    490,      0,    492,      0,    494, 
+         0,      0,    497,    497,      0,    500,      0,      0,      0,    504,      0,    506,      0,    508,      0,    510, 
+
+
+    // block 2
+         0,    512,      0,    514,      0,    516,      0,    518,      0,    520,      0,    522,      0,    524,      0,    526, 
+         0,    528,      0,    530,      0,    532,      0,    534,      0,    536,      0,    538,      0,    540,      0,    542, 
+         0,      0,      0,    546,      0,    548,      0,    550,      0,    552,      0,    554,      0,    556,      0,    558, 
+         0,    560,      0,    562,      0,      0,      0,      0,      0,      0,      0,      0,    571,      0,      0,      0, 
+         0,      0,    577,      0,      0,      0,      0,    582,      0,    584,      0,    586,      0,    588,      0,    590, 
+     11375,  11373,      0,    385,    390,      0,    393,    394,      0,    399,      0,    400,      0,      0,      0,      0, 
+       403,      0,      0,    404,      0,      0,      0,      0,    407,    406,      0,  11362,      0,      0,      0,    412, 
+         0,  11374,    413,      0,      0,    415,      0,      0,      0,      0,      0,      0,      0,  11364,      0,      0, 
+       422,      0,      0,    425,      0,      0,      0,      0,    430,    580,    433,    434,    581,      0,      0,      0, 
+         0,      0,    439,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 3
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,    921,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,    880,      0,    882,      0,      0,      0,    886,      0,      0,      0,   1021,   1022,   1023,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    902,    904,    905,    906, 
+         0,    913,    914,    915,    916,    917,    918,    919,    920,    921,    922,    923,    924,    925,    926,    927, 
+       928,    929,    931,    931,    932,    933,    934,    935,    936,    937,    938,    939,    908,    910,    911,      0, 
+       914,    920,      0,      0,      0,    934,    928,    975,      0,    984,      0,    986,      0,    988,      0,    990, 
+         0,    992,      0,    994,      0,    996,      0,    998,      0,   1000,      0,   1002,      0,   1004,      0,   1006, 
+       922,    929,   1017,      0,      0,    917,      0,      0,   1015,      0,      0,   1018,      0,      0,      0,      0, 
+
+
+    // block 4
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      1040,   1041,   1042,   1043,   1044,   1045,   1046,   1047,   1048,   1049,   1050,   1051,   1052,   1053,   1054,   1055, 
+      1056,   1057,   1058,   1059,   1060,   1061,   1062,   1063,   1064,   1065,   1066,   1067,   1068,   1069,   1070,   1071, 
+      1024,   1025,   1026,   1027,   1028,   1029,   1030,   1031,   1032,   1033,   1034,   1035,   1036,   1037,   1038,   1039, 
+         0,   1120,      0,   1122,      0,   1124,      0,   1126,      0,   1128,      0,   1130,      0,   1132,      0,   1134, 
+         0,   1136,      0,   1138,      0,   1140,      0,   1142,      0,   1144,      0,   1146,      0,   1148,      0,   1150, 
+         0,   1152,      0,      0,      0,      0,      0,      0,      0,      0,      0,   1162,      0,   1164,      0,   1166, 
+         0,   1168,      0,   1170,      0,   1172,      0,   1174,      0,   1176,      0,   1178,      0,   1180,      0,   1182, 
+         0,   1184,      0,   1186,      0,   1188,      0,   1190,      0,   1192,      0,   1194,      0,   1196,      0,   1198, 
+         0,   1200,      0,   1202,      0,   1204,      0,   1206,      0,   1208,      0,   1210,      0,   1212,      0,   1214, 
+         0,      0,   1217,      0,   1219,      0,   1221,      0,   1223,      0,   1225,      0,   1227,      0,   1229,   1216, 
+         0,   1232,      0,   1234,      0,   1236,      0,   1238,      0,   1240,      0,   1242,      0,   1244,      0,   1246, 
+         0,   1248,      0,   1250,      0,   1252,      0,   1254,      0,   1256,      0,   1258,      0,   1260,      0,   1262, 
+         0,   1264,      0,   1266,      0,   1268,      0,   1270,      0,   1272,      0,   1274,      0,   1276,      0,   1278, 
+
+
+    // block 5
+         0,   1280,      0,   1282,      0,   1284,      0,   1286,      0,   1288,      0,   1290,      0,   1292,      0,   1294, 
+         0,   1296,      0,   1298,      0,   1300,      0,   1302,      0,   1304,      0,   1306,      0,   1308,      0,   1310, 
+         0,   1312,      0,   1314,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   1329,   1330,   1331,   1332,   1333,   1334,   1335,   1336,   1337,   1338,   1339,   1340,   1341,   1342,   1343, 
+      1344,   1345,   1346,   1347,   1348,   1349,   1350,   1351,   1352,   1353,   1354,   1355,   1356,   1357,   1358,   1359, 
+      1360,   1361,   1362,   1363,   1364,   1365,   1366,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 6
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 7
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,  42877,      0,      0,      0,  11363,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 8
+         0,   7680,      0,   7682,      0,   7684,      0,   7686,      0,   7688,      0,   7690,      0,   7692,      0,   7694, 
+         0,   7696,      0,   7698,      0,   7700,      0,   7702,      0,   7704,      0,   7706,      0,   7708,      0,   7710, 
+         0,   7712,      0,   7714,      0,   7716,      0,   7718,      0,   7720,      0,   7722,      0,   7724,      0,   7726, 
+         0,   7728,      0,   7730,      0,   7732,      0,   7734,      0,   7736,      0,   7738,      0,   7740,      0,   7742, 
+         0,   7744,      0,   7746,      0,   7748,      0,   7750,      0,   7752,      0,   7754,      0,   7756,      0,   7758, 
+         0,   7760,      0,   7762,      0,   7764,      0,   7766,      0,   7768,      0,   7770,      0,   7772,      0,   7774, 
+         0,   7776,      0,   7778,      0,   7780,      0,   7782,      0,   7784,      0,   7786,      0,   7788,      0,   7790, 
+         0,   7792,      0,   7794,      0,   7796,      0,   7798,      0,   7800,      0,   7802,      0,   7804,      0,   7806, 
+         0,   7808,      0,   7810,      0,   7812,      0,   7814,      0,   7816,      0,   7818,      0,   7820,      0,   7822, 
+         0,   7824,      0,   7826,      0,   7828,      0,      0,      0,      0,      0,   7776,      0,      0,      0,      0, 
+         0,   7840,      0,   7842,      0,   7844,      0,   7846,      0,   7848,      0,   7850,      0,   7852,      0,   7854, 
+         0,   7856,      0,   7858,      0,   7860,      0,   7862,      0,   7864,      0,   7866,      0,   7868,      0,   7870, 
+         0,   7872,      0,   7874,      0,   7876,      0,   7878,      0,   7880,      0,   7882,      0,   7884,      0,   7886, 
+         0,   7888,      0,   7890,      0,   7892,      0,   7894,      0,   7896,      0,   7898,      0,   7900,      0,   7902, 
+         0,   7904,      0,   7906,      0,   7908,      0,   7910,      0,   7912,      0,   7914,      0,   7916,      0,   7918, 
+         0,   7920,      0,   7922,      0,   7924,      0,   7926,      0,   7928,      0,   7930,      0,   7932,      0,   7934, 
+
+
+    // block 9
+      7944,   7945,   7946,   7947,   7948,   7949,   7950,   7951,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7960,   7961,   7962,   7963,   7964,   7965,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7976,   7977,   7978,   7979,   7980,   7981,   7982,   7983,      0,      0,      0,      0,      0,      0,      0,      0, 
+      7992,   7993,   7994,   7995,   7996,   7997,   7998,   7999,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8008,   8009,   8010,   8011,   8012,   8013,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,   8025,      0,   8027,      0,   8029,      0,   8031,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8040,   8041,   8042,   8043,   8044,   8045,   8046,   8047,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8122,   8123,   8136,   8137,   8138,   8139,   8154,   8155,   8184,   8185,   8170,   8171,   8186,   8187,      0,      0, 
+      8072,   8073,   8074,   8075,   8076,   8077,   8078,   8079,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8088,   8089,   8090,   8091,   8092,   8093,   8094,   8095,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8104,   8105,   8106,   8107,   8108,   8109,   8110,   8111,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8120,   8121,      0,   8124,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,    921,      0, 
+         0,      0,      0,   8140,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8152,   8153,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8168,   8169,      0,      0,      0,   8172,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,   8188,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 10
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,   8498,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      8544,   8545,   8546,   8547,   8548,   8549,   8550,   8551,   8552,   8553,   8554,   8555,   8556,   8557,   8558,   8559, 
+         0,      0,      0,      0,   8579,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 11
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+      9398,   9399,   9400,   9401,   9402,   9403,   9404,   9405,   9406,   9407,   9408,   9409,   9410,   9411,   9412,   9413, 
+      9414,   9415,   9416,   9417,   9418,   9419,   9420,   9421,   9422,   9423,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 12
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+     11264,  11265,  11266,  11267,  11268,  11269,  11270,  11271,  11272,  11273,  11274,  11275,  11276,  11277,  11278,  11279, 
+     11280,  11281,  11282,  11283,  11284,  11285,  11286,  11287,  11288,  11289,  11290,  11291,  11292,  11293,  11294,  11295, 
+     11296,  11297,  11298,  11299,  11300,  11301,  11302,  11303,  11304,  11305,  11306,  11307,  11308,  11309,  11310,      0, 
+         0,  11360,      0,      0,      0,    570,    574,      0,  11367,      0,  11369,      0,  11371,      0,      0,      0, 
+         0,      0,      0,  11378,      0,      0,  11381,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  11392,      0,  11394,      0,  11396,      0,  11398,      0,  11400,      0,  11402,      0,  11404,      0,  11406, 
+         0,  11408,      0,  11410,      0,  11412,      0,  11414,      0,  11416,      0,  11418,      0,  11420,      0,  11422, 
+         0,  11424,      0,  11426,      0,  11428,      0,  11430,      0,  11432,      0,  11434,      0,  11436,      0,  11438, 
+         0,  11440,      0,  11442,      0,  11444,      0,  11446,      0,  11448,      0,  11450,      0,  11452,      0,  11454, 
+         0,  11456,      0,  11458,      0,  11460,      0,  11462,      0,  11464,      0,  11466,      0,  11468,      0,  11470, 
+         0,  11472,      0,  11474,      0,  11476,      0,  11478,      0,  11480,      0,  11482,      0,  11484,      0,  11486, 
+         0,  11488,      0,  11490,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 13
+      4256,   4257,   4258,   4259,   4260,   4261,   4262,   4263,   4264,   4265,   4266,   4267,   4268,   4269,   4270,   4271, 
+      4272,   4273,   4274,   4275,   4276,   4277,   4278,   4279,   4280,   4281,   4282,   4283,   4284,   4285,   4286,   4287, 
+      4288,   4289,   4290,   4291,   4292,   4293,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 14
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  42560,      0,  42562,      0,  42564,      0,  42566,      0,  42568,      0,  42570,      0,  42572,      0,  42574, 
+         0,  42576,      0,  42578,      0,  42580,      0,  42582,      0,  42584,      0,  42586,      0,  42588,      0,  42590, 
+         0,      0,      0,  42594,      0,  42596,      0,  42598,      0,  42600,      0,  42602,      0,  42604,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  42624,      0,  42626,      0,  42628,      0,  42630,      0,  42632,      0,  42634,      0,  42636,      0,  42638, 
+         0,  42640,      0,  42642,      0,  42644,      0,  42646,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 15
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,  42786,      0,  42788,      0,  42790,      0,  42792,      0,  42794,      0,  42796,      0,  42798, 
+         0,      0,      0,  42802,      0,  42804,      0,  42806,      0,  42808,      0,  42810,      0,  42812,      0,  42814, 
+         0,  42816,      0,  42818,      0,  42820,      0,  42822,      0,  42824,      0,  42826,      0,  42828,      0,  42830, 
+         0,  42832,      0,  42834,      0,  42836,      0,  42838,      0,  42840,      0,  42842,      0,  42844,      0,  42846, 
+         0,  42848,      0,  42850,      0,  42852,      0,  42854,      0,  42856,      0,  42858,      0,  42860,      0,  42862, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,  42873,      0,  42875,      0,      0,  42878, 
+         0,  42880,      0,  42882,      0,  42884,      0,  42886,      0,      0,      0,      0,  42891,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 16
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,  65313,  65314,  65315,  65316,  65317,  65318,  65319,  65320,  65321,  65322,  65323,  65324,  65325,  65326,  65327, 
+     65328,  65329,  65330,  65331,  65332,  65333,  65334,  65335,  65336,  65337,  65338,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+
+
+    // block 17
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,  66560,  66561,  66562,  66563,  66564,  66565,  66566,  66567, 
+     66568,  66569,  66570,  66571,  66572,  66573,  66574,  66575,  66576,  66577,  66578,  66579,  66580,  66581,  66582,  66583, 
+     66584,  66585,  66586,  66587,  66588,  66589,  66590,  66591,  66592,  66593,  66594,  66595,  66596,  66597,  66598,  66599, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 
+         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0
+    };
+
+    inline ::boost::uint32_t uppercase_lookup(::boost::uint32_t ch)
+    {
+        ::boost::uint32_t block_offset = uppercase_stage1[ch / 256] * 256;
+        return uppercase_stage2[block_offset + ch % 256];
+    }
+
+}}}} // namespace boost::spirit::unicode::detail
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/basic_chset.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/basic_chset.hpp
new file mode 100644 (file)
index 0000000..f716ad0
--- /dev/null
@@ -0,0 +1,249 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2009 Daniel Nuffer
+    http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_BASIC_CHSET_APRIL_17_2008
+#define BOOST_SPIRIT_BASIC_CHSET_APRIL_17_2008
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <climits> 
+#include <boost/spirit/home/support/char_set/range_run.hpp>
+
+namespace boost { namespace spirit { namespace support { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  basic_chset: basic character set implementation using range_run
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    struct basic_chset
+    {
+        basic_chset() {}
+        basic_chset(basic_chset const& arg_)
+          : rr(arg_.rr) {}
+
+        bool
+        test(Char v) const
+        {
+            return rr.test(v);
+        }
+
+        void
+        set(Char from, Char to)
+        {
+            rr.set(range<Char>(from, to));
+        }
+
+        void
+        set(Char c)
+        {
+            rr.set(range<Char>(c, c));
+        }
+
+        void
+        clear(Char from, Char to)
+        {
+            rr.clear(range<Char>(from, to));
+        }
+
+        void
+        clear(Char c)
+        {
+            rr.clear(range<Char>(c, c));
+        }
+
+        void
+        clear()
+        {
+            rr.clear();
+        }
+
+        void
+        inverse()
+        {
+            basic_chset inv;
+            inv.set(
+                (std::numeric_limits<Char>::min)(),
+                (std::numeric_limits<Char>::max)()
+            );
+            inv -= *this;
+            swap(inv);
+        }
+
+        void
+        swap(basic_chset& x)
+        {
+            rr.swap(x.rr);
+        }
+
+
+        basic_chset&
+        operator|=(basic_chset const& x)
+        {
+            typedef typename range_run<Char>::const_iterator const_iterator;
+            for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+                rr.set(*iter);
+            return *this;
+        }
+
+        basic_chset&
+        operator&=(basic_chset const& x)
+        {
+            basic_chset inv;
+            inv.set(
+                (std::numeric_limits<Char>::min)(),
+                (std::numeric_limits<Char>::max)()
+            );
+            inv -= x;
+            *this -= inv;
+            return *this;
+        }
+
+        basic_chset&
+        operator-=(basic_chset const& x)
+        {
+            typedef typename range_run<Char>::const_iterator const_iterator;
+            for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+                rr.clear(*iter);
+            return *this;
+        }
+
+        basic_chset&
+        operator^=(basic_chset const& x)
+        {
+            basic_chset bma = x;
+            bma -= *this;
+            *this -= x;
+            *this |= bma;
+            return *this;
+        }
+
+        private: range_run<Char> rr;
+    };
+
+#if (CHAR_BIT == 8)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  basic_chset: specializations for 8 bit chars using std::bitset
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    struct basic_chset_8bit
+    {
+        basic_chset_8bit() {}
+        basic_chset_8bit(basic_chset_8bit const& arg_)
+          : bset(arg_.bset) {}
+
+        bool
+        test(Char v) const
+        {
+            return bset.test((unsigned char)v);
+        }
+
+        void
+        set(Char from, Char to)
+        {
+            for (int i = from; i <= to; ++i)
+                bset.set((unsigned char)i);
+        }
+
+        void
+        set(Char c)
+        {
+            bset.set((unsigned char)c);
+        }
+
+        void
+        clear(Char from, Char to)
+        {
+            for (int i = from; i <= to; ++i)
+                bset.reset((unsigned char)i);
+        }
+
+        void
+        clear(Char c)
+        {
+            bset.reset((unsigned char)c);
+        }
+
+        void
+        clear()
+        {
+            bset.reset();
+        }
+
+        void
+        inverse()
+        {
+            bset.flip();
+        }
+
+        void
+        swap(basic_chset_8bit& x)
+        {
+            std::swap(bset, x.bset);
+        }
+
+        basic_chset_8bit&
+        operator|=(basic_chset_8bit const& x)
+        {
+            bset |= x.bset;
+            return *this;
+        }
+
+        basic_chset_8bit&
+        operator&=(basic_chset_8bit const& x)
+        {
+            bset &= x.bset;
+            return *this;
+        }
+
+        basic_chset_8bit&
+        operator-=(basic_chset_8bit const& x)
+        {
+            bset &= ~x.bset;
+            return *this;
+        }
+
+        basic_chset_8bit&
+        operator^=(basic_chset_8bit const& x)
+        {
+            bset ^= x.bset;
+            return *this;
+        }
+
+        private: std::bitset<256> bset;
+    };
+
+    /////////////////////////////////
+    template <>
+    struct basic_chset<char>
+      : basic_chset_8bit<char> {};
+
+    /////////////////////////////////
+    template <>
+    struct basic_chset<signed char>
+      : basic_chset_8bit<signed char> {};
+
+    /////////////////////////////////
+    template <>
+    struct basic_chset<unsigned char>
+      : basic_chset_8bit<unsigned char> {};
+
+#endif // #if (CHAR_BIT == 8)
+
+}}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range.hpp
new file mode 100644 (file)
index 0000000..1973889
--- /dev/null
@@ -0,0 +1,32 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RANGE_MAY_16_2006_0720_PM)
+#define BOOST_SPIRIT_RANGE_MAY_16_2006_0720_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace support { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  A closed range (first, last)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct range
+    {
+        typedef T value_type;
+
+        range() : first(), last() {}
+        range(T first_, T last_) : first(first_), last(last_) {}
+
+        T first;
+        T last;
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_functions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_functions.hpp
new file mode 100644 (file)
index 0000000..9afde6f
--- /dev/null
@@ -0,0 +1,98 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RANGE_FUNCTIONS_MAY_16_2006_0720_PM)
+#define BOOST_SPIRIT_RANGE_FUNCTIONS_MAY_16_2006_0720_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/integer_traits.hpp>
+
+namespace boost { namespace spirit { namespace support { namespace detail
+{
+    template <typename Range>
+    inline bool
+    is_valid(Range const& range)
+    {
+        // test for valid ranges
+        return range.first <= range.last;
+    }
+
+    template <typename Range>
+    inline bool
+    includes(Range const& range, Range const& other)
+    {
+        // see if two ranges intersect
+        return (range.first <= other.first) && (range.last >= other.last);
+    }
+
+    template <typename Range>
+    inline bool
+    includes(Range const& range, typename Range::value_type val)
+    {
+        // see if val is in range
+        return (range.first <= val) && (range.last >= val);
+    }
+
+    template <typename Range>
+    inline bool
+    can_merge(Range const& range, Range const& other)
+    {
+        // see if a 'range' overlaps, or is adjacent to
+        // another range 'other', so we can merge them
+
+        typedef typename Range::value_type value_type;
+        typedef integer_traits<value_type> integer_traits;
+
+        value_type decr_first =
+            range.first == integer_traits::const_min
+            ? range.first : range.first-1;
+
+        value_type incr_last =
+            range.last == integer_traits::const_max
+            ? range.last : range.last+1;
+
+        return (decr_first <= other.last) && (incr_last >= other.first);
+    }
+
+    template <typename Range>
+    inline void
+    merge(Range& result, Range const& other)
+    {
+        // merge two ranges
+        if (result.first > other.first)
+            result.first = other.first;
+        if (result.last < other.last)
+            result.last = other.last;
+    }
+
+    template <typename Range>
+    struct range_compare
+    {
+        // compare functor with a value or another range
+
+        typedef typename Range::value_type value_type;
+
+        bool operator()(Range const& x, const value_type y) const
+        {
+            return x.first < y;
+        }
+
+        bool operator()(value_type const x, Range const& y) const
+        {
+            return x < y.first;
+        }
+
+        bool operator()(Range const& x, Range const& y) const
+        {
+            return x.first < y.first;
+        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run.hpp
new file mode 100644 (file)
index 0000000..8c1bb59
--- /dev/null
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RANGE_RUN_MAY_16_2006_0801_PM)
+#define BOOST_SPIRIT_RANGE_RUN_MAY_16_2006_0801_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_set/range.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace support { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  range_run
+    //
+    //      An implementation of a sparse bit (boolean) set. The set uses
+    //      a sorted vector of disjoint ranges. This class implements the
+    //      bare minimum essentials from which the full range of set
+    //      operators can be implemented. The set is constructed from
+    //      ranges. Internally, adjacent or overlapping ranges are
+    //      coalesced.
+    //
+    //      range_runs are very space-economical in situations where there
+    //      are lots of ranges and a few individual disjoint values.
+    //      Searching is O(log n) where n is the number of ranges.
+    //
+    //      { Low level interface }
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    class range_run
+    {
+    public:
+
+        typedef range<Char> range_type;
+        typedef std::vector<range_type> storage_type;
+
+        void swap(range_run& other);
+        bool test(Char v) const;
+        void set(range_type const& range);
+        void clear(range_type const& range);
+        void clear();
+
+    private:
+
+        storage_type run;
+    };
+}}}}
+
+#include <boost/spirit/home/support/char_set/range_run_impl.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run_impl.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/char_set/range_run_impl.hpp
new file mode 100644 (file)
index 0000000..9dd2064
--- /dev/null
@@ -0,0 +1,185 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_RANGE_RUN_MAY_16_2006_0807_PM)
+#define BOOST_SPIRIT_RANGE_RUN_MAY_16_2006_0807_PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_set/range_functions.hpp>
+#include <boost/assert.hpp>
+#include <algorithm>
+
+namespace boost { namespace spirit { namespace support { namespace detail
+{
+    template <typename Run, typename Iterator, typename Range>
+    inline bool
+    try_merge(Run& run, Iterator iter, Range const& range)
+    {
+        // if *iter intersects with, or is adjacent to, 'range'...
+        if (can_merge(*iter, range))
+        {
+            // merge range and *iter
+            merge(*iter, range);
+
+            // collapse all subsequent ranges that can merge with *iter:
+            Iterator i = iter+1;
+            // 1. skip subsequent ranges completely included in *iter
+            while (i != run.end() && i->last <= iter->last)
+                ++i;
+            // 2. collapse next range if adjacent or overlapping with *iter
+            if (i != run.end() && i->first-1 <= iter->last)
+            {
+                iter->last = i->last;
+                ++i;
+            }
+
+            // erase all ranges that were collapsed
+            run.erase(iter+1, i);
+            return true;
+        }
+        return false;
+    }
+
+    template <typename Char>
+    inline bool
+    range_run<Char>::test(Char val) const
+    {
+        if (run.empty())
+            return false;
+
+        // search the ranges for one that potentially includes val
+        typename storage_type::const_iterator iter =
+            std::upper_bound(
+                run.begin(), run.end(), val,
+                range_compare<range_type>()
+            );
+
+        // return true if *(iter-1) includes val
+        return iter != run.begin() && includes(*(--iter), val);
+    }
+
+    template <typename Char>
+    inline void
+    range_run<Char>::swap(range_run& other)
+    {
+        run.swap(other.run);
+    }
+
+    template <typename Char>
+    void
+    range_run<Char>::set(range_type const& range)
+    {
+        BOOST_ASSERT(is_valid(range));
+        if (run.empty())
+        {
+            // the vector is empty, insert 'range'
+            run.push_back(range);
+            return;
+        }
+
+        // search the ranges for one that potentially includes 'range'
+        typename storage_type::iterator iter =
+            std::upper_bound(
+                run.begin(), run.end(), range,
+                range_compare<range_type>()
+            );
+
+        if (iter != run.begin())
+        {
+            // if *(iter-1) includes 'range', return early
+            if (includes(*(iter-1), range))
+            {
+                return;
+            }
+
+            // if *(iter-1) can merge with 'range', merge them and return
+            if (try_merge(run, iter-1, range))
+            {
+                return;
+            }
+        }
+
+        // if *iter can merge with with 'range', merge them
+        if (iter == run.end() || !try_merge(run, iter, range))
+        {
+            // no overlap, insert 'range'
+            run.insert(iter, range);
+        }
+    }
+
+    template <typename Char>
+    void
+    range_run<Char>::clear(range_type const& range)
+    {
+        BOOST_ASSERT(is_valid(range));
+        if (!run.empty())
+        {
+            // search the ranges for one that potentially includes 'range'
+            typename storage_type::iterator iter =
+                std::upper_bound(
+                    run.begin(), run.end(), range,
+                    range_compare<range_type>()
+                );
+
+            // 'range' starts with or after another range:
+            if (iter != run.begin())
+            {
+                typename storage_type::iterator const left_iter = iter-1;
+
+                // 'range' starts after '*left_iter':
+                if (left_iter->first < range.first)
+                {
+                    // if 'range' is completely included inside '*left_iter':
+                    // need to break it apart into two ranges (punch a hole),
+                    if (left_iter->last > range.last)
+                    {
+                        Char save_last = left_iter->last;
+                        left_iter->last = range.first-1;
+                        run.insert(iter, range_type(range.last+1, save_last));
+                        return;
+                    }
+                    // if 'range' contains 'left_iter->last':
+                    // truncate '*left_iter' (clip its right)
+                    else if (left_iter->last >= range.first)
+                    {
+                        left_iter->last = range.first-1;
+                    }
+                }
+
+                // 'range' has the same left bound as '*left_iter': it
+                // must be removed or truncated by the code below
+                else
+                {
+                    iter = left_iter;
+                }
+            }
+
+            // remove or truncate subsequent ranges that overlap with 'range':
+            typename storage_type::iterator i = iter;
+            // 1. skip subsequent ranges completely included in 'range'
+            while (i != run.end() && i->last <= range.last)
+                ++i;
+            // 2. clip left of next range if overlapping with 'range'
+            if (i != run.end() && i->first <= range.last)
+                i->first = range.last+1;
+
+            // erase all ranges that 'range' contained
+            run.erase(iter, i);
+        }
+    }
+
+    template <typename Char>
+    inline void
+    range_run<Char>::clear()
+    {
+        run.clear();
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/common_terminals.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/common_terminals.hpp
new file mode 100644 (file)
index 0000000..2c7772d
--- /dev/null
@@ -0,0 +1,437 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_COMMON_PLACEHOLDERS_OCTOBER_16_2008_0102PM
+#define BOOST_SPIRIT_COMMON_PLACEHOLDERS_OCTOBER_16_2008_0102PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
+#include <boost/spirit/home/support/char_class.hpp>
+#include <boost/mpl/vector.hpp>
+
+#if defined(BOOST_SPIRIT_UNICODE)
+# include <boost/spirit/home/support/char_encoding/unicode.hpp>
+#endif
+
+namespace boost { namespace spirit
+{
+    typedef mpl::vector<
+            spirit::char_encoding::ascii
+          , spirit::char_encoding::iso8859_1
+          , spirit::char_encoding::standard
+          , spirit::char_encoding::standard_wide
+#if defined(BOOST_SPIRIT_UNICODE)
+          , spirit::char_encoding::unicode
+#endif
+        >
+    char_encodings;
+
+    template <typename T>
+    struct is_char_encoding : mpl::false_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::ascii> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::iso8859_1> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::standard> : mpl::true_ {};
+
+    template <>
+    struct is_char_encoding<spirit::char_encoding::standard_wide> : mpl::true_ {};
+
+#if defined(BOOST_SPIRIT_UNICODE)
+    template <>
+    struct is_char_encoding<spirit::char_encoding::unicode> : mpl::true_ {};
+#endif
+
+    template <typename Encoding>
+    struct encoding
+        : proto::terminal<tag::char_code<tag::encoding, Encoding> >::type
+    {};
+
+    // Our basic terminals
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME(
+        ( verbatim, verbatim_type )
+        ( no_delimit, no_delimit_type )
+        ( lexeme, lexeme_type )
+        ( no_skip, no_skip_type )
+        ( omit, omit_type )
+        ( raw, raw_type )
+        ( as_string, as_string_type )
+        ( as_wstring, as_wstring_type )
+        ( inf, inf_type )
+        ( eol, eol_type )
+        ( eoi, eoi_type )
+        ( buffer, buffer_type )
+        ( true_, true_type )
+        ( false_, false_type )
+        ( matches, matches_type )
+        ( hold, hold_type )
+        ( strict, strict_type )
+        ( relaxed, relaxed_type )
+        ( duplicate, duplicate_type )
+    )
+
+    // Our extended terminals
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX(
+        ( lit, lit_type )
+        ( bin, bin_type )
+        ( oct, oct_type )
+        ( hex, hex_type )
+        ( bool_, bool_type )
+        ( ushort_, ushort_type )
+        ( ulong_, ulong_type )
+        ( uint_, uint_type )
+        ( short_, short_type )
+        ( long_, long_type )
+        ( int_, int_type )
+        ( ulong_long, ulong_long_type )
+        ( long_long, long_long_type )
+        ( float_, float_type )
+        ( double_, double_type )
+        ( long_double, long_double_type )
+        ( repeat, repeat_type )
+        ( eps, eps_type )
+        ( pad, pad_type )
+        ( byte_, byte_type )
+        ( word, word_type )
+        ( big_word, big_word_type )
+        ( little_word, little_word_type )
+        ( dword, dword_type )
+        ( big_dword, big_dword_type )
+        ( little_dword, little_dword_type )
+        ( qword, qword_type )
+        ( big_qword, big_qword_type )
+        ( little_qword, little_qword_type )
+        ( bin_float, bin_float_type )
+        ( big_bin_float, big_bin_float_type )
+        ( little_bin_float, little_bin_float_type )
+        ( bin_double, bin_double_type )
+        ( big_bin_double, big_bin_double_type )
+        ( little_bin_double, little_bin_double_type )
+        ( skip, skip_type )
+        ( delimit, delimit_type )
+        ( stream, stream_type )
+        ( wstream, wstream_type )
+        ( left_align, left_align_type )
+        ( right_align, right_align_type )
+        ( center, center_type )
+        ( maxwidth, maxwidth_type )
+        ( set_state, set_state_type )
+        ( in_state, in_state_type )
+        ( token, token_type )
+        ( tokenid, tokenid_type )
+        ( raw_token, raw_token_type )
+        ( tokenid_mask, tokenid_mask_type )
+        ( attr, attr_type )
+        ( columns, columns_type )
+        ( auto_, auto_type )
+    )
+
+    // special tags (used mainly for stateful tag types)
+    namespace tag
+    {
+        struct attr_cast { BOOST_SPIRIT_IS_TAG() };
+        struct as { BOOST_SPIRIT_IS_TAG() };
+    }
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// Here we place the character-set sensitive placeholders. We have one set
+// each for ascii, iso8859_1, standard and standard_wide and unicode. These
+// placeholders are placed in its char-set namespace. For example, there exist
+// a placeholder spirit::ascii::alnum for ascii versions of alnum.
+
+#define BOOST_SPIRIT_TAG_CHAR_SPEC(charset)                                     \
+    typedef tag::char_code<tag::char_, charset> char_;                          \
+    typedef tag::char_code<tag::string, charset> string;                        \
+    /***/
+
+#ifdef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define BOOST_SPIRIT_CHAR_SPEC(charset)                                         \
+    typedef spirit::terminal<tag::charset::char_> char_type;                    \
+    typedef spirit::terminal<tag::charset::string> string_type;                 \
+    /***/
+
+#else
+
+#define BOOST_SPIRIT_CHAR_SPEC(charset)                                         \
+    typedef spirit::terminal<tag::charset::char_> char_type;                    \
+    char_type const char_ = char_type();                                        \
+                                                                                \
+    inline void silence_unused_warnings_##char_() { (void) char_; }             \
+                                                                                \
+    typedef spirit::terminal<tag::charset::string> string_type;                 \
+    string_type const string = string_type();                                   \
+                                                                                \
+    inline void silence_unused_warnings_##string() { (void) string; }           \
+    /***/
+
+#endif
+
+#ifdef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define BOOST_SPIRIT_CHAR_CODE(name, charset)                                   \
+    typedef proto::terminal<tag::char_code<tag::name, charset> >::type          \
+        name##_type;                                                            \
+    /***/
+
+#else
+
+#define BOOST_SPIRIT_CHAR_CODE(name, charset)                                   \
+    typedef proto::terminal<tag::char_code<tag::name, charset> >::type          \
+        name##_type;                                                            \
+    name##_type const name = name##_type();                                     \
+                                                                                \
+    inline void silence_unused_warnings_##name() { (void) name; }               \
+    /***/
+
+
+#endif
+
+#define BOOST_SPIRIT_DEFINE_CHAR_CODES(charset)                                 \
+    namespace boost { namespace spirit { namespace tag { namespace charset      \
+    {                                                                           \
+        BOOST_SPIRIT_TAG_CHAR_SPEC(spirit::char_encoding::charset)              \
+    }}}}                                                                        \
+    namespace boost { namespace spirit { namespace charset                      \
+    {                                                                           \
+        BOOST_SPIRIT_CHAR_SPEC(charset)                                         \
+                                                                                \
+        BOOST_SPIRIT_CHAR_CODE(alnum, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(alpha, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(blank, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(cntrl, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(digit, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(graph, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(print, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(punct, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(space, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(xdigit, spirit::char_encoding::charset)          \
+                                                                                \
+        BOOST_SPIRIT_CHAR_CODE(no_case, spirit::char_encoding::charset)         \
+        BOOST_SPIRIT_CHAR_CODE(lower, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(upper, spirit::char_encoding::charset)           \
+        BOOST_SPIRIT_CHAR_CODE(lowernum, spirit::char_encoding::charset)        \
+        BOOST_SPIRIT_CHAR_CODE(uppernum, spirit::char_encoding::charset)        \
+    }}}                                                                         \
+    /***/
+
+BOOST_SPIRIT_DEFINE_CHAR_CODES(ascii)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(iso8859_1)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(standard)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(standard_wide)
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Char>
+    struct char_encoding_from_char;
+
+    template <>
+    struct char_encoding_from_char<char>
+      : mpl::identity<spirit::char_encoding::standard>
+    {};
+
+    template <>
+    struct char_encoding_from_char<wchar_t>
+      : mpl::identity<spirit::char_encoding::standard_wide>
+    {};
+
+    template <typename T>
+    struct char_encoding_from_char<T const>
+      : char_encoding_from_char<T>
+    {};
+}}}
+
+#if defined(BOOST_SPIRIT_UNICODE)
+BOOST_SPIRIT_DEFINE_CHAR_CODES(unicode)
+
+    namespace boost { namespace spirit { namespace tag { namespace unicode
+    {
+        BOOST_SPIRIT_TAG_CHAR_SPEC(spirit::char_encoding::unicode)
+    }}}}
+
+    namespace boost { namespace spirit { namespace unicode
+    {
+#define BOOST_SPIRIT_UNICODE_CHAR_CODE(name)                                    \
+    BOOST_SPIRIT_CHAR_CODE(name, spirit::char_encoding::unicode)                \
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode General Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(uppercase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lowercase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(titlecase_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(modifier_letter)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_letter)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(nonspacing_mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(enclosing_mark)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(spacing_mark)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(decimal_number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(letter_number)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_number)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(space_separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(line_separator)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(paragraph_separator)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(control)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(format)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(private_use)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(surrogate)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(unassigned)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(dash_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(open_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(close_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(connector_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(initial_punctuation)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(final_punctuation)
+
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(math_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(currency_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(modifier_symbol)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(alphabetic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(uppercase)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lowercase)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(white_space)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hex_digit)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(noncharacter_code_point)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Scripts
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(arabic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(imperial_aramaic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(armenian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(avestan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(balinese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bamum)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bengali)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(bopomofo)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(braille)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(buginese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(buhid)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(canadian_aboriginal)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(carian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cherokee)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(coptic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cypriot)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cyrillic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(devanagari)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(deseret)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(egyptian_hieroglyphs)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ethiopic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(georgian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(glagolitic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gothic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(greek)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gujarati)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(gurmukhi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hangul)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(han)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hanunoo)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hebrew)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(hiragana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(katakana_or_hiragana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_italic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(javanese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kayah_li)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(katakana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kharoshthi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(khmer)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kannada)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(kaithi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_tham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lao)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(latin)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lepcha)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(limbu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(linear_b)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lisu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lycian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(lydian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(malayalam)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(mongolian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(meetei_mayek)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(myanmar)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(nko)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ogham)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ol_chiki)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_turkic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(oriya)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(osmanya)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(phags_pa)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inscriptional_pahlavi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(phoenician)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inscriptional_parthian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(rejang)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(runic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(samaritan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_south_arabian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(saurashtra)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(shavian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(sinhala)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(sundanese)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(syloti_nagri)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(syriac)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tagbanwa)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_le)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(new_tai_lue)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tamil)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tai_viet)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(telugu)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tifinagh)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tagalog)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(thaana)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(thai)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(tibetan)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(ugaritic)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(vai)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(old_persian)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(cuneiform)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(yi)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(inherited)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(common)
+        BOOST_SPIRIT_UNICODE_CHAR_CODE(unknown)
+
+#undef BOOST_SPIRIT_UNICODE_CHAR_CODE
+    }}}
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/container.hpp
new file mode 100644 (file)
index 0000000..5e154cd
--- /dev/null
@@ -0,0 +1,589 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONTAINER_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_CONTAINER_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/optional.hpp>
+#include <boost/variant.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains some container utils for stl containers. The
+    //  utilities provided also accept spirit's unused_type; all no-ops.
+    //  Compiler optimization will easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+    }
+
+    template <typename T, typename Enable/* = void*/>
+    struct is_container
+      : mpl::bool_<
+            detail::has_value_type<T>::value &&
+            detail::has_iterator<T>::value &&
+            detail::has_size_type<T>::value &&
+            detail::has_reference<T>::value>
+    {};
+
+    template <typename T>
+    struct is_container<T&>
+      : is_container<T>
+    {};
+
+    template <typename T>
+    struct is_container<boost::optional<T> >
+      : is_container<T>
+    {};
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+    template<typename T>
+    struct is_container<boost::variant<T> >
+      : is_container<T>
+    {};
+
+    template<typename T0, typename T1, typename ...TN>
+    struct is_container<boost::variant<T0, T1, TN...> >
+      : mpl::bool_<is_container<T0>::value ||
+            is_container<boost::variant<T1, TN...> >::value>
+    {};
+
+#else
+#define BOOST_SPIRIT_IS_CONTAINER(z, N, data)                                 \
+        is_container<BOOST_PP_CAT(T, N)>::value ||                            \
+    /***/
+
+    // make sure unused variant parameters do not affect the outcome
+    template <>
+    struct is_container<boost::detail::variant::void_>
+      : mpl::false_
+    {};
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct is_container<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+       : mpl::bool_<BOOST_PP_REPEAT(BOOST_VARIANT_LIMIT_TYPES
+            , BOOST_SPIRIT_IS_CONTAINER, _) false>
+    {};
+
+#undef BOOST_SPIRIT_IS_CONTAINER
+#endif
+
+    template <typename T, typename Enable/* = void*/>
+    struct is_iterator_range
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct is_iterator_range<iterator_range<T> >
+      : mpl::true_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct remove_value_const
+        {
+            typedef T type;
+        };
+
+        template <typename T>
+        struct remove_value_const<T const>
+          : remove_value_const<T>
+        {};
+
+        template <typename F, typename S>
+        struct remove_value_const<std::pair<F, S> >
+        {
+            typedef typename remove_value_const<F>::type first_type;
+            typedef typename remove_value_const<S>::type second_type;
+            typedef std::pair<first_type, second_type> type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    //[customization_container_value_default
+    template <typename Container, typename Enable/* = void*/>
+    struct container_value
+      : detail::remove_value_const<typename Container::value_type>
+    {};
+    //]
+
+    template <typename T>
+    struct container_value<T&>
+      : container_value<T>
+    {};
+
+    // this will be instantiated if the optional holds a container
+    template <typename T>
+    struct container_value<boost::optional<T> >
+      : container_value<T>
+    {};
+
+    // this will be instantiated if the variant holds a container
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct container_value<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        typedef typename
+            variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types
+        types;
+        typedef typename
+            mpl::find_if<types, is_container<mpl::_1> >::type
+        iter;
+
+        typedef typename container_value<
+            typename mpl::if_<
+                is_same<iter, typename mpl::end<types>::type>
+              , unused_type, typename mpl::deref<iter>::type
+            >::type
+        >::type type;
+    };
+
+    //[customization_container_value_unused
+    template <>
+    struct container_value<unused_type>
+    {
+        typedef unused_type type;
+    };
+    //]
+
+    template <>
+    struct container_value<unused_type const>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct container_iterator
+    {
+        typedef typename Container::iterator type;
+    };
+
+    template <typename Container>
+    struct container_iterator<Container&>
+      : container_iterator<Container>
+    {};
+
+    template <typename Container>
+    struct container_iterator<Container const>
+    {
+        typedef typename Container::const_iterator type;
+    };
+
+    template <typename T>
+    struct container_iterator<optional<T> >
+      : container_iterator<T>
+    {};
+
+    template <typename T>
+    struct container_iterator<optional<T> const>
+      : container_iterator<T const>
+    {};
+
+    template <typename Iterator>
+    struct container_iterator<iterator_range<Iterator> >
+    {
+        typedef typename range_const_iterator<
+              iterator_range<Iterator> >::type type;
+    };
+
+    template <>
+    struct container_iterator<unused_type>
+    {
+        typedef unused_type const* type;
+    };
+
+    template <>
+    struct container_iterator<unused_type const>
+    {
+        typedef unused_type const* type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable/* = void*/>
+    struct optional_attribute
+    {
+        typedef T const& type;
+
+        static type call(T const& val)
+        {
+            return val;
+        }
+
+        static bool is_valid(T const&)
+        {
+            return true;
+        }
+    };
+
+    template <typename T>
+    struct optional_attribute<boost::optional<T> >
+    {
+        typedef T const& type;
+
+        static type call(boost::optional<T> const& val)
+        {
+            return boost::get<T>(val);
+        }
+
+        static bool is_valid(boost::optional<T> const& val)
+        {
+            return !!val;
+        }
+    };
+
+    template <typename T>
+    typename optional_attribute<T>::type
+    optional_value(T const& val)
+    {
+        return optional_attribute<T>::call(val);
+    }
+
+    inline unused_type optional_value(unused_type)
+    {
+        return unused;
+    }
+
+    template <typename T>
+    bool has_optional_value(T const& val)
+    {
+        return optional_attribute<T>::is_valid(val);
+    }
+
+    inline bool has_optional_value(unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename T>
+    bool push_back(Container& c, T const& val);
+
+    //[customization_push_back_default
+    template <typename Container, typename T, typename Enable/* = void*/>
+    struct push_back_container
+    {
+        static bool call(Container& c, T const& val)
+        {
+            c.insert(c.end(), val);
+            return true;
+        }
+    };
+    //]
+
+    template <typename Container, typename T>
+    struct push_back_container<optional<Container>, T>
+    {
+        static bool call(boost::optional<Container>& c, T const& val)
+        {
+            if (!c)
+                c = Container();
+            return push_back(boost::get<Container>(c), val);
+        }
+    };
+
+    namespace detail
+    {
+        template <typename T>
+        struct push_back_visitor : public static_visitor<>
+        {
+            typedef bool result_type;
+
+            push_back_visitor(T const& t) : t_(t) {}
+
+            template <typename Container>
+            bool push_back_impl(Container& c, mpl::true_) const
+            {
+                return push_back(c, t_);
+            }
+
+            template <typename T_>
+            bool push_back_impl(T_&, mpl::false_) const
+            {
+                // this variant doesn't hold a container
+                BOOST_ASSERT(false && "This variant doesn't hold a container");
+                return false;
+            }
+
+            template <typename T_>
+            bool operator()(T_& c) const
+            {
+                return push_back_impl(c, typename is_container<T_>::type());
+            }
+
+            T const& t_;
+        };
+    }
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T_), typename T>
+    struct push_back_container<variant<BOOST_VARIANT_ENUM_PARAMS(T_)>, T>
+    {
+        static bool call(variant<BOOST_VARIANT_ENUM_PARAMS(T_)>& c, T const& val)
+        {
+            return apply_visitor(detail::push_back_visitor<T>(val), c);
+        }
+    };
+
+    template <typename Container, typename T>
+    bool push_back(Container& c, T const& val)
+    {
+        return push_back_container<Container, T>::call(c, val);
+    }
+
+    //[customization_push_back_unused
+    template <typename Container>
+    bool push_back(Container&, unused_type)
+    {
+        return true;
+    }
+    //]
+
+    template <typename T>
+    bool push_back(unused_type, T const&)
+    {
+        return true;
+    }
+
+    inline bool push_back(unused_type, unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct is_empty_container
+    {
+        static bool call(Container const& c)
+        {
+            return c.empty();
+        }
+    };
+
+    template <typename Container>
+    bool is_empty(Container const& c)
+    {
+        return is_empty_container<Container>::call(c);
+    }
+
+    inline bool is_empty(unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Ensure the attribute is actually a container type
+    template <typename Container, typename Enable/* = void*/>
+    struct make_container_attribute
+    {
+        static void call(Container&)
+        {
+            // for static types this function does nothing
+        }
+    };
+
+    template <typename T>
+    void make_container(T& t)
+    {
+        make_container_attribute<T>::call(t);
+    }
+
+    inline void make_container(unused_type)
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct begin_container
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.begin();
+        }
+    };
+
+    template <typename Container>
+    typename spirit::result_of::begin<Container>::type
+    begin(Container& c)
+    {
+        return begin_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    begin(unused_type)
+    {
+        return &unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable/* = void*/>
+    struct end_container
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.end();
+        }
+    };
+
+    template <typename Container>
+    inline typename spirit::result_of::end<Container>::type
+    end(Container& c)
+    {
+        return end_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    end(unused_type)
+    {
+        return &unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct deref_iterator
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::reference type;
+        static type call(Iterator& it)
+        {
+            return *it;
+        }
+    };
+
+    template <typename Iterator>
+    typename deref_iterator<Iterator>::type
+    deref(Iterator& it)
+    {
+        return deref_iterator<Iterator>::call(it);
+    }
+
+    inline unused_type
+    deref(unused_type const*)
+    {
+        return unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct next_iterator
+    {
+        static void call(Iterator& it)
+        {
+            ++it;
+        }
+    };
+
+    template <typename Iterator>
+    void next(Iterator& it)
+    {
+        next_iterator<Iterator>::call(it);
+    }
+
+    inline void next(unused_type const*)
+    {
+        // do nothing
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable/* = void*/>
+    struct compare_iterators
+    {
+        static bool call(Iterator const& it1, Iterator const& it2)
+        {
+            return it1 == it2;
+        }
+    };
+
+    template <typename Iterator>
+    bool compare(Iterator& it1, Iterator& it2)
+    {
+        return compare_iterators<Iterator>::call(it1, it2);
+    }
+
+    inline bool compare(unused_type const*, unused_type const*)
+    {
+        return false;
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct optional_value
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct optional_value<boost::optional<T> >
+    {
+        typedef T type;
+    };
+
+    template <typename T>
+    struct optional_value<boost::optional<T> const>
+    {
+        typedef T const type;
+    };
+
+    template <>
+    struct optional_value<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    template <>
+    struct optional_value<unused_type const>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container>
+    struct begin
+      : traits::container_iterator<Container>
+    {};
+
+    template <typename Container>
+    struct end
+      : traits::container_iterator<Container>
+    {};
+
+    template <typename Iterator>
+    struct deref
+      : traits::deref_iterator<Iterator>
+    {};
+
+    template <>
+    struct deref<unused_type const*>
+    {
+        typedef unused_type type;
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/context.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/context.hpp
new file mode 100644 (file)
index 0000000..ada873a
--- /dev/null
@@ -0,0 +1,299 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_CONTEXT_OCTOBER_31_2008_0654PM)
+#define BOOST_SPIRIT_CONTEXT_OCTOBER_31_2008_0654PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/home/support/nonterminal/expand_arg.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/limits.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/transform.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/at.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define SPIRIT_DECLARE_ATTRIBUTE(z, n, data)                                   \
+    typedef phoenix::actor<attribute<n> >                                      \
+        BOOST_PP_CAT(BOOST_PP_CAT(_r, n), _type);                              \
+    phoenix::actor<attribute<n> > const                                        \
+        BOOST_PP_CAT(_r, n) = BOOST_PP_CAT(BOOST_PP_CAT(_r, n), _type)();
+    /***/
+#define SPIRIT_USING_ATTRIBUTE(z, n, data)                                     \
+    using spirit::BOOST_PP_CAT(BOOST_PP_CAT(_r, n), _type);                    \
+    using spirit::BOOST_PP_CAT(_r, n);                                         \
+    /***/
+
+#else
+
+#define SPIRIT_DECLARE_ATTRIBUTE(z, n, data)                                   \
+    typedef phoenix::actor<attribute<n> >                                      \
+        BOOST_PP_CAT(BOOST_PP_CAT(_r, n), _type);                              \
+    /***/
+#define SPIRIT_USING_ATTRIBUTE(z, n, data)                                     \
+    using spirit::BOOST_PP_CAT(BOOST_PP_CAT(_r, n), _type);                    \
+    /***/
+
+#endif
+
+namespace boost { namespace spirit
+{
+    template <int>
+    struct attribute;
+
+    template <int>
+    struct local_variable;
+}}
+
+BOOST_PHOENIX_DEFINE_CUSTOM_TERMINAL(
+    template <int N>
+  , boost::spirit::attribute<N>
+  , mpl::false_                 // is not nullary
+  , v2_eval(
+        proto::make<
+            boost::spirit::attribute<N>()
+        >
+      , proto::call<
+            functional::env(proto::_state)
+        >
+    )
+)
+
+BOOST_PHOENIX_DEFINE_CUSTOM_TERMINAL(
+    template <int N>
+  , boost::spirit::local_variable<N>
+  , mpl::false_                 // is not nullary
+  , v2_eval(
+        proto::make<
+            boost::spirit::local_variable<N>()
+        >
+      , proto::call<
+            functional::env(proto::_state)
+        >
+    )
+)
+
+namespace boost { namespace spirit
+{
+    template <typename Attributes, typename Locals>
+    struct context
+    {
+        typedef Attributes attributes_type;
+        typedef Locals locals_type;
+
+        context(typename Attributes::car_type attribute)
+          : attributes(attribute, fusion::nil_()), locals() {}
+
+        template <typename Args, typename Context>
+        context(
+            typename Attributes::car_type attribute
+          , Args const& args
+          , Context& caller_context
+        ) : attributes(
+                attribute
+              , fusion::as_list(
+                    fusion::transform(
+                        args
+                      , detail::expand_arg<Context>(caller_context)
+                    )
+                )
+            )
+          , locals() {}
+
+        context(Attributes const& attributes_)
+          : attributes(attributes_), locals() {}
+
+        Attributes attributes;  // The attributes
+        Locals locals;          // Local variables
+    };
+
+    template <typename Context>
+    struct attributes_of
+    {
+        typedef typename Context::attributes_type type;
+    };
+
+    template <typename Context>
+    struct attributes_of<Context const>
+    {
+        typedef typename Context::attributes_type const type;
+    };
+
+    template <typename Context>
+    struct attributes_of<Context &>
+      : attributes_of<Context>
+    {};
+
+    template <typename Context>
+    struct locals_of
+    {
+        typedef typename Context::locals_type type;
+    };
+
+    template <typename Context>
+    struct locals_of<Context const>
+    {
+        typedef typename Context::locals_type const type;
+    };
+
+    template <typename Context>
+    struct locals_of<Context &>
+    {
+        typedef typename Context::locals_type type;
+    };
+
+    template <int N>
+    struct attribute
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                attributes_of<typename
+                    mpl::at_c<typename Env::args_type, 1>::type
+                >::type
+            attributes_type;
+
+            typedef typename
+                fusion::result_of::size<attributes_type>::type
+            attributes_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < attributes_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<attributes_type, N>::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return fusion::at_c<N>((fusion::at_c<1>(env.args())).attributes);
+        }
+    };
+
+    template <int N>
+    struct local_variable
+    {
+        typedef mpl::true_ no_nullary;
+
+        template <typename Env>
+        struct result
+        {
+            typedef typename
+                locals_of<typename
+                    mpl::at_c<typename Env::args_type, 1>::type
+                >::type
+            locals_type;
+
+            typedef typename
+                fusion::result_of::size<locals_type>::type
+            locals_size;
+
+            // report invalid argument not found (N is out of bounds)
+            BOOST_SPIRIT_ASSERT_MSG(
+                (N < locals_size::value),
+                index_is_out_of_bounds, ());
+
+            typedef typename
+                fusion::result_of::at_c<locals_type, N>::type
+            type;
+        };
+
+        template <typename Env>
+        typename result<Env>::type
+        eval(Env const& env) const
+        {
+            return get_arg<N>((fusion::at_c<1>(env.args())).locals);
+        }
+    };
+    
+    typedef phoenix::actor<attribute<0> > _val_type;
+    typedef phoenix::actor<attribute<0> > _r0_type;
+    typedef phoenix::actor<attribute<1> > _r1_type;
+    typedef phoenix::actor<attribute<2> > _r2_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    // _val refers to the 'return' value of a rule (same as _r0)
+    // _r1, _r2, ... refer to the rule arguments
+    _val_type const _val = _val_type();
+    _r0_type const _r0 = _r0_type();
+    _r1_type const _r1 = _r1_type();
+    _r2_type const _r2 = _r2_type();
+#endif
+
+    //  Bring in the rest of the attributes (_r4 .. _rN+1), using PP
+    BOOST_PP_REPEAT_FROM_TO(
+        3, SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_DECLARE_ATTRIBUTE, _)
+
+    typedef phoenix::actor<local_variable<0> > _a_type;
+    typedef phoenix::actor<local_variable<1> > _b_type;
+    typedef phoenix::actor<local_variable<2> > _c_type;
+    typedef phoenix::actor<local_variable<3> > _d_type;
+    typedef phoenix::actor<local_variable<4> > _e_type;
+    typedef phoenix::actor<local_variable<5> > _f_type;
+    typedef phoenix::actor<local_variable<6> > _g_type;
+    typedef phoenix::actor<local_variable<7> > _h_type;
+    typedef phoenix::actor<local_variable<8> > _i_type;
+    typedef phoenix::actor<local_variable<9> > _j_type;
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    // _a, _b, ... refer to the local variables of a rule
+    _a_type const _a = _a_type();
+    _b_type const _b = _b_type();
+    _c_type const _c = _c_type();
+    _d_type const _d = _d_type();
+    _e_type const _e = _e_type();
+    _f_type const _f = _f_type();
+    _g_type const _g = _g_type();
+    _h_type const _h = _h_type();
+    _i_type const _i = _i_type();
+    _j_type const _j = _j_type();
+#endif
+
+    // You can bring these in with the using directive
+    // without worrying about bringing in too much.
+    namespace labels
+    {
+        BOOST_PP_REPEAT(SPIRIT_ARGUMENTS_LIMIT, SPIRIT_USING_ARGUMENT, _)
+        BOOST_PP_REPEAT(SPIRIT_ATTRIBUTES_LIMIT, SPIRIT_USING_ATTRIBUTE, _)
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+        using spirit::_val;
+        using spirit::_a;
+        using spirit::_b;
+        using spirit::_c;
+        using spirit::_d;
+        using spirit::_e;
+        using spirit::_f;
+        using spirit::_g;
+        using spirit::_h;
+        using spirit::_i;
+        using spirit::_j;
+#endif
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/as_variant.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/as_variant.hpp
new file mode 100644 (file)
index 0000000..9312042
--- /dev/null
@@ -0,0 +1,114 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(BOOST_SPIRIT_AS_VARIANT_NOVEMBER_16_2007_0420PM)
+#define BOOST_SPIRIT_AS_VARIANT_NOVEMBER_16_2007_0420PM
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/variant/variant_fwd.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/next.hpp>
+#include <boost/fusion/include/value_of.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/limits/list.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <int size>
+    struct as_variant_impl;
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#else
+    template <>
+    struct as_variant_impl<0>
+    {
+        template <typename Iterator>
+        struct apply
+        {
+            typedef variant<> type;
+        };
+    };
+#endif
+
+#define BOOST_FUSION_NEXT_ITERATOR(z, n, data)                                  \
+    typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type          \
+        BOOST_PP_CAT(I, BOOST_PP_INC(n));
+
+#define BOOST_FUSION_NEXT_CALL_ITERATOR(z, n, data)                             \
+    typename gen::BOOST_PP_CAT(I, BOOST_PP_INC(n))                              \
+        BOOST_PP_CAT(i, BOOST_PP_INC(n)) = fusion::next(BOOST_PP_CAT(i, n));
+
+#define BOOST_FUSION_VALUE_OF_ITERATOR(z, n, data)                              \
+    typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type      \
+        BOOST_PP_CAT(T, n);
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/support/detail/as_variant.hpp>
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#define BOOST_PP_ITERATION_LIMITS (1, BOOST_MPL_LIMIT_LIST_SIZE)
+#else
+#define BOOST_PP_ITERATION_LIMITS (1, BOOST_VARIANT_LIMIT_TYPES)
+#endif
+
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_NEXT_ITERATOR
+#undef BOOST_FUSION_NEXT_CALL_ITERATOR
+#undef BOOST_FUSION_VALUE_OF_ITERATOR
+
+    template <typename Sequence>
+    struct as_variant
+    {
+        // build a variant generator being able to generate a variant holding
+        // all of the types as given in the typelist
+        typedef typename
+            detail::as_variant_impl<fusion::result_of::size<Sequence>::value>
+        gen;
+
+        // use this generator to create the actual variant
+        typedef typename gen::template apply<
+                typename fusion::result_of::begin<Sequence>::type
+            >::type
+        type;
+    };
+}}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    template <>
+    struct as_variant_impl<N>
+    {
+        template <typename I0>
+        struct apply
+        {
+            BOOST_PP_REPEAT(N, BOOST_FUSION_NEXT_ITERATOR, _)
+            BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _)
+            typedef variant<BOOST_PP_ENUM_PARAMS(N, T)> type;
+        };
+    };
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian.hpp
new file mode 100644 (file)
index 0000000..489bb4c
--- /dev/null
@@ -0,0 +1,29 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_ENDIAN_MAR_21_2009_0349PM)
+#define SPIRIT_ENDIAN_MAR_21_2009_0349PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/version.hpp>
+
+// We need to treat the endian number types as PODs
+#if !defined(BOOST_ENDIAN_FORCE_PODNESS)
+#define BOOST_ENDIAN_FORCE_PODNESS 1
+#endif
+
+// If Boost has the endian library, use it, otherwise use an adapted version
+// included with Spirit
+// #if BOOST_VERSION >= 105100
+// #include <boost/endian/integers.hpp>
+// #else
+#include <boost/spirit/home/support/detail/endian/endian.hpp>
+// #endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/cover_operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/cover_operators.hpp
new file mode 100644 (file)
index 0000000..68e0db8
--- /dev/null
@@ -0,0 +1,115 @@
+//  boost/integer/cover_operators.hpp ----------------------------------------//
+
+//  Copyright Darin Adler 2000
+//  Copyright Beman Dawes 2008
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//----------------------------------------------------------------------------//
+
+//  If the class being covered has a non-explicit conversion to an integer type
+//  then a smaller number of cover operations are needed. Define the macro
+//  BOOST_MINIMAL_INTEGER_COVER_OPERATORS to indicate this.
+
+//  Define BOOST_NO_IO_COVER_OPERATORS if I/O cover operations are not desired.
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_SPIRIT_INTEGER_COVER_OPERATORS_HPP
+#define BOOST_SPIRIT_INTEGER_COVER_OPERATORS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+# ifndef BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+#   include <boost/operators.hpp>
+# endif
+
+#include <iosfwd>
+
+namespace boost { namespace spirit
+{
+  namespace endian
+  {
+
+  // A class that adds integer operators to an integer cover class
+
+    template <typename T, typename IntegerType>
+    class cover_operators
+#    ifndef BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+      : boost::operators<T>
+#    endif
+    {
+      // The other operations take advantage of the type conversion that's
+      // built into unary +.
+
+      // Unary operations.
+      friend IntegerType operator+(const T& x) { return x; }
+#   ifndef BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+      friend IntegerType operator-(const T& x) { return -+x; }
+      friend IntegerType operator~(const T& x) { return ~+x; }
+      friend IntegerType operator!(const T& x) { return !+x; }
+
+      // The basic ordering operations.
+      friend bool operator==(const T& x, IntegerType y) { return +x == y; }
+      friend bool operator<(const T& x, IntegerType y) { return +x < y; }
+#   endif
+      
+      // The basic arithmetic operations.
+      friend T& operator+=(T& x, IntegerType y) { return x = +x + y; }
+      friend T& operator-=(T& x, IntegerType y) { return x = +x - y; }
+      friend T& operator*=(T& x, IntegerType y) { return x = +x * y; }
+      friend T& operator/=(T& x, IntegerType y) { return x = +x / y; }
+      friend T& operator%=(T& x, IntegerType y) { return x = +x % y; }
+      friend T& operator&=(T& x, IntegerType y) { return x = +x & y; }
+      friend T& operator|=(T& x, IntegerType y) { return x = +x | y; }
+      friend T& operator^=(T& x, IntegerType y) { return x = +x ^ y; }
+      friend T& operator<<=(T& x, IntegerType y) { return x = +x << y; }
+      friend T& operator>>=(T& x, IntegerType y) { return x = +x >> y; }
+      
+      // A few binary arithmetic operations not covered by operators base class.
+      friend IntegerType operator<<(const T& x, IntegerType y) { return +x << y; }
+      friend IntegerType operator>>(const T& x, IntegerType y) { return +x >> y; }
+      
+      // Auto-increment and auto-decrement can be defined in terms of the
+      // arithmetic operations.
+      friend T& operator++(T& x) { return x += 1; }
+      friend T& operator--(T& x) { return x -= 1; }
+
+#   ifdef BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+      friend T operator++(T& x, int)
+      { 
+        T tmp(x);
+        x += 1;
+        return tmp;
+      }
+      friend T operator--(T& x, int)
+      { 
+        T tmp(x);
+        x -= 1;
+        return tmp;
+      }
+#   endif
+
+#   ifndef BOOST_NO_IO_COVER_OPERATORS
+  // TODO: stream I/O needs to be templatized on the stream type, so will
+  // work with wide streams, etc.
+
+      // Stream input and output.
+      friend std::ostream& operator<<(std::ostream& s, const T& x)
+        { return s << +x; }
+      friend std::istream& operator>>(std::istream& s, T& x)
+        {
+          IntegerType i;
+          if (s >> i)
+            x = i;
+          return s;
+        }
+#   endif
+    };
+  } // namespace endian
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_INTEGER_COVER_OPERATORS_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/endian.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/endian/endian.hpp
new file mode 100644 (file)
index 0000000..c806b58
--- /dev/null
@@ -0,0 +1,568 @@
+//  Boost endian.hpp header file -------------------------------------------------------//
+
+//  (C) Copyright Darin Adler 2000
+//  (C) Copyright Beman Dawes 2006, 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See library home page at http://www.boost.org/libs/endian
+
+//--------------------------------------------------------------------------------------//
+
+//  Original design developed by Darin Adler based on classes developed by Mark
+//  Borgerding. Four original class templates were combined into a single endian
+//  class template by Beman Dawes, who also added the unrolled_byte_loops sign
+//  partial specialization to correctly extend the sign when cover integer size
+//  differs from endian representation size.
+
+// TODO: When a compiler supporting constexpr becomes available, try possible uses.
+
+#ifndef BOOST_SPIRIT_ENDIAN_HPP
+#define BOOST_SPIRIT_ENDIAN_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#ifdef BOOST_ENDIAN_LOG
+# include <iostream>
+#endif
+
+#if defined(__BORLANDC__) || defined( __CODEGEARC__)
+# pragma pack(push, 1)
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/endian.hpp>
+#define BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+#define BOOST_NO_IO_COVER_OPERATORS
+#include <boost/spirit/home/support/detail/endian/cover_operators.hpp>
+#undef  BOOST_NO_IO_COVER_OPERATORS
+#undef  BOOST_MINIMAL_INTEGER_COVER_OPERATORS
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+#include <iosfwd>
+#include <climits>
+
+# if CHAR_BIT != 8
+#   error Platforms with CHAR_BIT != 8 are not supported
+# endif
+
+# define BOOST_ENDIAN_DEFAULT_CONSTRUCT {}          // C++03
+
+# if defined(BOOST_ENDIAN_FORCE_PODNESS)
+#   define BOOST_ENDIAN_NO_CTORS
+# endif
+
+
+namespace boost { namespace spirit
+{
+  namespace detail
+  {
+    // Unrolled loops for loading and storing streams of bytes.
+
+    template <typename T, std::size_t n_bytes,
+      bool sign=boost::is_signed<T>::value >
+    struct unrolled_byte_loops
+    {
+      typedef unrolled_byte_loops<T, n_bytes - 1, sign> next;
+
+      static T load_big(const unsigned char* bytes)
+        { return *(bytes - 1) | (next::load_big(bytes - 1) << 8); }
+      static T load_little(const unsigned char* bytes)
+        { return *bytes | (next::load_little(bytes + 1) << 8); }
+
+      static void store_big(char* bytes, T value)
+        {
+          *(bytes - 1) = static_cast<char>(value);
+          next::store_big(bytes - 1, value >> 8);
+        }
+      static void store_little(char* bytes, T value)
+        {
+          *bytes = static_cast<char>(value);
+          next::store_little(bytes + 1, value >> 8);
+        }
+    };
+
+    template <typename T>
+    struct unrolled_byte_loops<T, 1, false>
+    {
+      static T load_big(const unsigned char* bytes)
+        { return *(bytes - 1); }
+      static T load_little(const unsigned char* bytes)
+        { return *bytes; }
+      static void store_big(char* bytes, T value)
+        { *(bytes - 1) = static_cast<char>(value); }
+      static void store_little(char* bytes, T value)
+        { *bytes = static_cast<char>(value); }
+
+    };
+
+    template <typename T>
+    struct unrolled_byte_loops<T, 1, true>
+    {
+      static T load_big(const unsigned char* bytes)
+        { return *reinterpret_cast<const signed char*>(bytes - 1); }
+      static T load_little(const unsigned char* bytes)
+        { return *reinterpret_cast<const signed char*>(bytes); }
+      static void store_big(char* bytes, T value)
+        { *(bytes - 1) = static_cast<char>(value); }
+      static void store_little(char* bytes, T value)
+        { *bytes = static_cast<char>(value); }
+    };
+
+    template <typename T, std::size_t n_bytes>
+    inline
+    T load_big_endian(const void* bytes)
+    {
+      return unrolled_byte_loops<T, n_bytes>::load_big
+        (static_cast<const unsigned char*>(bytes) + n_bytes);
+    }
+
+    template <>
+    inline
+    float load_big_endian<float, 4>(const void* bytes)
+    {
+        const unsigned char *b = reinterpret_cast<const unsigned char *>(
+            bytes);
+        b += 3;
+
+        float value;
+        unsigned char *v = reinterpret_cast<unsigned char *>(&value);
+
+        for(std::size_t i = 0; i < 4; ++i)
+        {
+            *v++ = *b--;
+        }
+
+        return value;
+    }
+
+    template <>
+    inline
+    double load_big_endian<double, 8>(const void* bytes)
+    {
+        const unsigned char *b = reinterpret_cast<const unsigned char *>(
+            bytes);
+        b += 7;
+
+        double value;
+        unsigned char *v = reinterpret_cast<unsigned char *>(&value);
+
+        for(std::size_t i = 0; i < 8; ++i)
+        {
+            *v++ = *b--;
+        }
+
+        return value;
+    }
+
+    template <typename T, std::size_t n_bytes>
+    inline
+    T load_little_endian(const void* bytes)
+    {
+      return unrolled_byte_loops<T, n_bytes>::load_little
+        (static_cast<const unsigned char*>(bytes));
+    }
+
+    template <>
+    inline
+    float load_little_endian<float, 4>(const void* bytes)
+    {
+        const unsigned char *b = reinterpret_cast<const unsigned char *>(
+            bytes);
+
+        float value;
+        unsigned char *v = reinterpret_cast<unsigned char *>(&value);
+
+        for(std::size_t i = 0; i < 4; ++i)
+        {
+            *v++ = *b++;
+        }
+
+        return value;
+    }
+
+    template <>
+    inline
+    double load_little_endian<double, 8>(const void* bytes)
+    {
+        const unsigned char *b = reinterpret_cast<const unsigned char *>(
+            bytes);
+
+        double value;
+        unsigned char *v = reinterpret_cast<unsigned char *>(&value);
+
+        for(std::size_t i = 0; i < 8; ++i)
+        {
+            *v++ = *b++;
+        }
+
+        return value;
+    }
+
+    template <typename T, std::size_t n_bytes>
+    inline
+    void store_big_endian(void* bytes, T value)
+    {
+      unrolled_byte_loops<T, n_bytes>::store_big
+        (static_cast<char*>(bytes) + n_bytes, value);
+    }
+
+    template <>
+    inline
+    void store_big_endian<float, 4>(void* bytes, float value)
+    {
+        unsigned char *b = reinterpret_cast<unsigned char *>(bytes);
+        b += 3;
+
+        const unsigned char *v = reinterpret_cast<const unsigned char *>(
+            &value);
+
+        for(std::size_t i = 0; i < 4; ++i)
+        {
+            *b-- = *v++;
+        }
+    }
+
+    template <>
+    inline
+    void store_big_endian<double, 8>(void* bytes, double value)
+    {
+        unsigned char *b = reinterpret_cast<unsigned char *>(bytes);
+        b += 7;
+
+        const unsigned char *v = reinterpret_cast<const unsigned char *>(
+            &value);
+
+        for(std::size_t i = 0; i < 8; ++i)
+        {
+            *b-- = *v++;
+        }
+    }
+
+    template <typename T, std::size_t n_bytes>
+    inline
+    void store_little_endian(void* bytes, T value)
+    {
+      unrolled_byte_loops<T, n_bytes>::store_little
+        (static_cast<char*>(bytes), value);
+    }
+
+    template <>
+    inline
+    void store_little_endian<float, 4>(void* bytes, float value)
+    {
+        unsigned char *b = reinterpret_cast<unsigned char *>(bytes);
+
+        const unsigned char *v = reinterpret_cast<const unsigned char *>(
+            &value);
+
+        for(std::size_t i = 0; i < 4; ++i)
+        {
+            *b++ = *v++;
+        }
+    }
+
+    template <>
+    inline
+    void store_little_endian<double, 8>(void* bytes, double value)
+    {
+        unsigned char *b = reinterpret_cast<unsigned char *>(bytes);
+
+        const unsigned char *v = reinterpret_cast<const unsigned char *>(
+            &value);
+
+        for(std::size_t i = 0; i < 8; ++i)
+        {
+            *b++ = *v++;
+        }
+    }
+
+  } // namespace detail
+
+  namespace endian
+  {
+
+# ifdef BOOST_ENDIAN_LOG
+    bool endian_log(true);
+# endif
+
+
+  //  endian class template and specializations  ---------------------------------------//
+
+  BOOST_SCOPED_ENUM_START(endianness) { big, little, native }; BOOST_SCOPED_ENUM_END
+  BOOST_SCOPED_ENUM_START(alignment) { unaligned, aligned }; BOOST_SCOPED_ENUM_END
+
+  template <BOOST_SCOPED_ENUM(endianness) E, typename T, std::size_t n_bits,
+    BOOST_SCOPED_ENUM(alignment) A = alignment::unaligned>
+    class endian;
+
+    //  Specializations that represent unaligned bytes.
+    //  Taking an integer type as a parameter provides a nice way to pass both
+    //  the size and signedness of the desired integer and get the appropriate
+    //  corresponding integer type for the interface.
+
+    //  unaligned big endian specialization
+    template <typename T, std::size_t n_bits>
+    class endian< endianness::big, T, n_bits, alignment::unaligned >
+      : cover_operators< endian< endianness::big, T, n_bits >, T >
+    {
+        BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
+      public:
+        typedef T value_type;
+#     ifndef BOOST_ENDIAN_NO_CTORS
+        endian() BOOST_ENDIAN_DEFAULT_CONSTRUCT
+        explicit endian(T val)
+        {
+#       ifdef BOOST_ENDIAN_LOG
+          if ( endian_log )
+            std::clog << "big, unaligned, " << n_bits << "-bits, construct(" << val << ")\n";
+#       endif
+          detail::store_big_endian<T, n_bits/8>(m_value, val);
+        }
+#     endif
+        endian & operator=(T val) { detail::store_big_endian<T, n_bits/8>(m_value, val); return *this; }
+        operator T() const
+        {
+#       ifdef BOOST_ENDIAN_LOG
+          if ( endian_log )
+            std::clog << "big, unaligned, " << n_bits << "-bits, convert(" << detail::load_big_endian<T, n_bits/8>(m_value) << ")\n";
+#       endif
+          return detail::load_big_endian<T, n_bits/8>(m_value);
+        }
+      private:
+        char m_value[n_bits/8];
+    };
+
+    //  unaligned little endian specialization
+    template <typename T, std::size_t n_bits>
+    class endian< endianness::little, T, n_bits, alignment::unaligned >
+      : cover_operators< endian< endianness::little, T, n_bits >, T >
+    {
+        BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
+      public:
+        typedef T value_type;
+#     ifndef BOOST_ENDIAN_NO_CTORS
+        endian() BOOST_ENDIAN_DEFAULT_CONSTRUCT
+        explicit endian(T val)
+        {
+#       ifdef BOOST_ENDIAN_LOG
+          if ( endian_log )
+            std::clog << "little, unaligned, " << n_bits << "-bits, construct(" << val << ")\n";
+#       endif
+          detail::store_little_endian<T, n_bits/8>(m_value, val);
+        }
+#     endif
+        endian & operator=(T val) { detail::store_little_endian<T, n_bits/8>(m_value, val); return *this; }
+        operator T() const
+        {
+#       ifdef BOOST_ENDIAN_LOG
+          if ( endian_log )
+            std::clog << "little, unaligned, " << n_bits << "-bits, convert(" << detail::load_little_endian<T, n_bits/8>(m_value) << ")\n";
+#       endif
+          return detail::load_little_endian<T, n_bits/8>(m_value);
+        }
+      private:
+        char m_value[n_bits/8];
+    };
+
+    //  unaligned native endian specialization
+    template <typename T, std::size_t n_bits>
+    class endian< endianness::native, T, n_bits, alignment::unaligned >
+      : cover_operators< endian< endianness::native, T, n_bits >, T >
+    {
+        BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
+      public:
+        typedef T value_type;
+#   ifndef BOOST_ENDIAN_NO_CTORS
+        endian() BOOST_ENDIAN_DEFAULT_CONSTRUCT
+#     ifdef BOOST_BIG_ENDIAN
+        explicit endian(T val)    { detail::store_big_endian<T, n_bits/8>(m_value, val); }
+#     else
+        explicit endian(T val)    { detail::store_little_endian<T, n_bits/8>(m_value, val); }
+#     endif
+#   endif
+#   ifdef BOOST_BIG_ENDIAN
+        endian & operator=(T val) { detail::store_big_endian<T, n_bits/8>(m_value, val); return *this; }
+        operator T() const        { return detail::load_big_endian<T, n_bits/8>(m_value); }
+#   else
+        endian & operator=(T val) { detail::store_little_endian<T, n_bits/8>(m_value, val); return *this; }
+        operator T() const        { return detail::load_little_endian<T, n_bits/8>(m_value); }
+#   endif
+      private:
+        char m_value[n_bits/8];
+    };
+
+    //  Specializations that mimic built-in integer types.
+    //  These typically have the same alignment as the underlying types.
+
+    //  aligned big endian specialization
+    template <typename T, std::size_t n_bits>
+    class endian< endianness::big, T, n_bits, alignment::aligned  >
+      : cover_operators< endian< endianness::big, T, n_bits, alignment::aligned >, T >
+    {
+        BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
+        BOOST_STATIC_ASSERT( sizeof(T) == n_bits/8 );
+      public:
+        typedef T value_type;
+#   ifndef BOOST_ENDIAN_NO_CTORS
+        endian() BOOST_ENDIAN_DEFAULT_CONSTRUCT
+#     ifdef BOOST_BIG_ENDIAN
+        endian(T val) : m_value(val) { }
+#     else
+        explicit endian(T val)    { detail::store_big_endian<T, sizeof(T)>(&m_value, val); }
+#     endif
+#   endif
+#   ifdef BOOST_BIG_ENDIAN
+        endian & operator=(T val) { m_value = val; return *this; }
+        operator T() const        { return m_value; }
+#   else
+        endian & operator=(T val) { detail::store_big_endian<T, sizeof(T)>(&m_value, val); return *this; }
+        operator T() const        { return detail::load_big_endian<T, sizeof(T)>(&m_value); }
+#   endif
+      private:
+        T m_value;
+    };
+
+    //  aligned little endian specialization
+    template <typename T, std::size_t n_bits>
+    class endian< endianness::little, T, n_bits, alignment::aligned  >
+      : cover_operators< endian< endianness::little, T, n_bits, alignment::aligned >, T >
+    {
+        BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
+        BOOST_STATIC_ASSERT( sizeof(T) == n_bits/8 );
+      public:
+        typedef T value_type;
+#   ifndef BOOST_ENDIAN_NO_CTORS
+        endian() BOOST_ENDIAN_DEFAULT_CONSTRUCT
+#     ifdef BOOST_LITTLE_ENDIAN
+        endian(T val) : m_value(val) { }
+#     else
+        explicit endian(T val)    { detail::store_little_endian<T, sizeof(T)>(&m_value, val); }
+#     endif
+#   endif
+#   ifdef BOOST_LITTLE_ENDIAN
+        endian & operator=(T val) { m_value = val; return *this; }
+        operator T() const        { return m_value; }
+    #else
+        endian & operator=(T val) { detail::store_little_endian<T, sizeof(T)>(&m_value, val); return *this; }
+        operator T() const        { return detail::load_little_endian<T, sizeof(T)>(&m_value); }
+    #endif
+      private:
+        T m_value;
+    };
+
+  //  naming convention typedefs  ------------------------------------------------------//
+
+    // unaligned big endian signed integer types
+    typedef endian< endianness::big, int_least8_t, 8 >           big8_t;
+    typedef endian< endianness::big, int_least16_t, 16 >         big16_t;
+    typedef endian< endianness::big, int_least32_t, 24 >         big24_t;
+    typedef endian< endianness::big, int_least32_t, 32 >         big32_t;
+    typedef endian< endianness::big, int_least64_t, 40 >         big40_t;
+    typedef endian< endianness::big, int_least64_t, 48 >         big48_t;
+    typedef endian< endianness::big, int_least64_t, 56 >         big56_t;
+    typedef endian< endianness::big, int_least64_t, 64 >         big64_t;
+
+    // unaligned big endian unsigned integer types
+    typedef endian< endianness::big, uint_least8_t, 8 >          ubig8_t;
+    typedef endian< endianness::big, uint_least16_t, 16 >        ubig16_t;
+    typedef endian< endianness::big, uint_least32_t, 24 >        ubig24_t;
+    typedef endian< endianness::big, uint_least32_t, 32 >        ubig32_t;
+    typedef endian< endianness::big, uint_least64_t, 40 >        ubig40_t;
+    typedef endian< endianness::big, uint_least64_t, 48 >        ubig48_t;
+    typedef endian< endianness::big, uint_least64_t, 56 >        ubig56_t;
+    typedef endian< endianness::big, uint_least64_t, 64 >        ubig64_t;
+
+    // unaligned little endian signed integer types
+    typedef endian< endianness::little, int_least8_t, 8 >        little8_t;
+    typedef endian< endianness::little, int_least16_t, 16 >      little16_t;
+    typedef endian< endianness::little, int_least32_t, 24 >      little24_t;
+    typedef endian< endianness::little, int_least32_t, 32 >      little32_t;
+    typedef endian< endianness::little, int_least64_t, 40 >      little40_t;
+    typedef endian< endianness::little, int_least64_t, 48 >      little48_t;
+    typedef endian< endianness::little, int_least64_t, 56 >      little56_t;
+    typedef endian< endianness::little, int_least64_t, 64 >      little64_t;
+
+    // unaligned little endian unsigned integer types
+    typedef endian< endianness::little, uint_least8_t, 8 >       ulittle8_t;
+    typedef endian< endianness::little, uint_least16_t, 16 >     ulittle16_t;
+    typedef endian< endianness::little, uint_least32_t, 24 >     ulittle24_t;
+    typedef endian< endianness::little, uint_least32_t, 32 >     ulittle32_t;
+    typedef endian< endianness::little, uint_least64_t, 40 >     ulittle40_t;
+    typedef endian< endianness::little, uint_least64_t, 48 >     ulittle48_t;
+    typedef endian< endianness::little, uint_least64_t, 56 >     ulittle56_t;
+    typedef endian< endianness::little, uint_least64_t, 64 >     ulittle64_t;
+
+    // unaligned native endian signed integer types
+    typedef endian< endianness::native, int_least8_t, 8 >        native8_t;
+    typedef endian< endianness::native, int_least16_t, 16 >      native16_t;
+    typedef endian< endianness::native, int_least32_t, 24 >      native24_t;
+    typedef endian< endianness::native, int_least32_t, 32 >      native32_t;
+    typedef endian< endianness::native, int_least64_t, 40 >      native40_t;
+    typedef endian< endianness::native, int_least64_t, 48 >      native48_t;
+    typedef endian< endianness::native, int_least64_t, 56 >      native56_t;
+    typedef endian< endianness::native, int_least64_t, 64 >      native64_t;
+
+    // unaligned native endian unsigned integer types
+    typedef endian< endianness::native, uint_least8_t, 8 >       unative8_t;
+    typedef endian< endianness::native, uint_least16_t, 16 >     unative16_t;
+    typedef endian< endianness::native, uint_least32_t, 24 >     unative24_t;
+    typedef endian< endianness::native, uint_least32_t, 32 >     unative32_t;
+    typedef endian< endianness::native, uint_least64_t, 40 >     unative40_t;
+    typedef endian< endianness::native, uint_least64_t, 48 >     unative48_t;
+    typedef endian< endianness::native, uint_least64_t, 56 >     unative56_t;
+    typedef endian< endianness::native, uint_least64_t, 64 >     unative64_t;
+
+#define BOOST_HAS_INT16_T
+#define BOOST_HAS_INT32_T
+#define BOOST_HAS_INT64_T
+
+  //  These types only present if platform has exact size integers:
+  //     aligned big endian signed integer types
+  //     aligned big endian unsigned integer types
+  //     aligned little endian signed integer types
+  //     aligned little endian unsigned integer types
+
+  //     aligned native endian typedefs are not provided because
+  //     <cstdint> types are superior for this use case
+
+# if defined(BOOST_HAS_INT16_T)
+    typedef endian< endianness::big, int16_t, 16, alignment::aligned >      aligned_big16_t;
+    typedef endian< endianness::big, uint16_t, 16, alignment::aligned >     aligned_ubig16_t;
+    typedef endian< endianness::little, int16_t, 16, alignment::aligned >   aligned_little16_t;
+    typedef endian< endianness::little, uint16_t, 16, alignment::aligned >  aligned_ulittle16_t;
+# endif
+
+# if defined(BOOST_HAS_INT32_T)
+    typedef endian< endianness::big, int32_t, 32, alignment::aligned >      aligned_big32_t;
+    typedef endian< endianness::big, uint32_t, 32, alignment::aligned >     aligned_ubig32_t;
+    typedef endian< endianness::little, int32_t, 32, alignment::aligned >   aligned_little32_t;
+    typedef endian< endianness::little, uint32_t, 32, alignment::aligned >  aligned_ulittle32_t;
+# endif
+
+# if defined(BOOST_HAS_INT64_T)
+    typedef endian< endianness::big, int64_t, 64, alignment::aligned >      aligned_big64_t;
+    typedef endian< endianness::big, uint64_t, 64, alignment::aligned >     aligned_ubig64_t;
+    typedef endian< endianness::little, int64_t, 64, alignment::aligned >   aligned_little64_t;
+    typedef endian< endianness::little, uint64_t, 64, alignment::aligned >  aligned_ulittle64_t;
+# endif
+
+  } // namespace endian
+}} // namespace boost::spirit
+
+// import the namespace above into boost::endian
+namespace boost { namespace endian
+{
+    using namespace boost::spirit::endian;
+}}
+
+#if defined(__BORLANDC__) || defined( __CODEGEARC__)
+# pragma pack(pop)
+#endif
+
+#endif // BOOST_SPIRIT_ENDIAN_HPP
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/get_encoding.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/get_encoding.hpp
new file mode 100644 (file)
index 0000000..ac514a9
--- /dev/null
@@ -0,0 +1,75 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_GET_ENCODING_JANUARY_13_2009_1255PM)
+#define BOOST_SPIRIT_GET_ENCODING_JANUARY_13_2009_1255PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename Modifiers, typename Encoding>
+    struct get_implicit_encoding
+    {
+        // Extract the implicit encoding from the Modifiers
+        // If one is not found, Encoding is used. The explicit
+        // encoding is the first viable encoding that can be
+        // extracted from the Modifiers (there can be more than one).
+
+        typedef typename
+            mpl::find_if<
+                char_encodings,
+                has_modifier<Modifiers, tag::char_encoding_base<mpl::_1> >
+            >::type
+        iter;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter, typename mpl::end<char_encodings>::type>,
+                mpl::identity<Encoding>,
+                mpl::deref<iter>
+            >::type
+        type;
+    };
+
+    template <typename Modifiers, typename Encoding>
+    struct get_encoding
+    {
+        // Extract the explicit encoding from the Modifiers
+        // If one is not found, get implicit encoding (see above).
+        // Explicit encoding is the encoding explicitly declared
+        // using the encoding[c] directive.
+
+        typedef typename
+            mpl::find_if<
+                char_encodings,
+                has_modifier<Modifiers, tag::char_code<tag::encoding, mpl::_1> >
+            >::type
+        iter;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter, typename mpl::end<char_encodings>::type>,
+                get_implicit_encoding<Modifiers, Encoding>,
+                mpl::deref<iter>
+            >::type
+        type;
+    };
+
+    template <typename Modifiers, typename Encoding, bool case_modifier = false>
+    struct get_encoding_with_case : mpl::identity<Encoding> {};
+
+    template <typename Modifiers, typename Encoding>
+    struct get_encoding_with_case<Modifiers, Encoding, true>
+        : get_encoding<Modifiers, Encoding> {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/hold_any.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/hold_any.hpp
new file mode 100644 (file)
index 0000000..f9a3ff1
--- /dev/null
@@ -0,0 +1,457 @@
+/*=============================================================================
+    Copyright (c) 2007-2011 Hartmut Kaiser
+    Copyright (c) Christopher Diggins 2005
+    Copyright (c) Pablo Aguilar 2005
+    Copyright (c) Kevlin Henney 2001
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+    The class boost::spirit::hold_any is built based on the any class
+    published here: http://www.codeproject.com/cpp/dynamic_typing.asp. It adds
+    support for std streaming operator<<() and operator>>().
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HOLD_ANY_MAY_02_2007_0857AM)
+#define BOOST_SPIRIT_HOLD_ANY_MAY_02_2007_0857AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/sp_typeinfo.hpp>
+
+#include <stdexcept>
+#include <typeinfo>
+#include <algorithm>
+#include <iosfwd>
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100)   // 'x': unreferenced formal parameter
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    struct bad_any_cast
+      : std::bad_cast
+    {
+        bad_any_cast(boost::detail::sp_typeinfo const& src, boost::detail::sp_typeinfo const& dest)
+          : from(src.name()), to(dest.name())
+        {}
+
+        virtual const char* what() const throw() { return "bad any cast"; }
+
+        const char* from;
+        const char* to;
+    };
+
+    namespace detail
+    {
+        // function pointer table
+        template <typename Char>
+        struct fxn_ptr_table
+        {
+            boost::detail::sp_typeinfo const& (*get_type)();
+            void (*static_delete)(void**);
+            void (*destruct)(void**);
+            void (*clone)(void* const*, void**);
+            void (*move)(void* const*, void**);
+            std::basic_istream<Char>& (*stream_in)(std::basic_istream<Char>&, void**);
+            std::basic_ostream<Char>& (*stream_out)(std::basic_ostream<Char>&, void* const*);
+        };
+
+        // static functions for small value-types
+        template <typename Small>
+        struct fxns;
+
+        template <>
+        struct fxns<mpl::true_>
+        {
+            template<typename T, typename Char>
+            struct type
+            {
+                static boost::detail::sp_typeinfo const& get_type()
+                {
+                    return BOOST_SP_TYPEID(T);
+                }
+                static void static_delete(void** x)
+                {
+                    reinterpret_cast<T*>(x)->~T();
+                }
+                static void destruct(void** x)
+                {
+                    reinterpret_cast<T*>(x)->~T();
+                }
+                static void clone(void* const* src, void** dest)
+                {
+                    new (dest) T(*reinterpret_cast<T const*>(src));
+                }
+                static void move(void* const* src, void** dest)
+                {
+                    *reinterpret_cast<T*>(dest) =
+                        *reinterpret_cast<T const*>(src);
+                }
+                static std::basic_istream<Char>& 
+                stream_in (std::basic_istream<Char>& i, void** obj)
+                {
+                    i >> *reinterpret_cast<T*>(obj);
+                    return i;
+                }
+                static std::basic_ostream<Char>& 
+                stream_out(std::basic_ostream<Char>& o, void* const* obj)
+                {
+                    o << *reinterpret_cast<T const*>(obj);
+                    return o;
+                }
+            };
+        };
+
+        // static functions for big value-types (bigger than a void*)
+        template <>
+        struct fxns<mpl::false_>
+        {
+            template<typename T, typename Char>
+            struct type
+            {
+                static boost::detail::sp_typeinfo const& get_type()
+                {
+                    return BOOST_SP_TYPEID(T);
+                }
+                static void static_delete(void** x)
+                {
+                    // destruct and free memory
+                    delete (*reinterpret_cast<T**>(x));
+                }
+                static void destruct(void** x)
+                {
+                    // destruct only, we'll reuse memory
+                    (*reinterpret_cast<T**>(x))->~T();
+                }
+                static void clone(void* const* src, void** dest)
+                {
+                    *dest = new T(**reinterpret_cast<T* const*>(src));
+                }
+                static void move(void* const* src, void** dest)
+                {
+                    **reinterpret_cast<T**>(dest) =
+                        **reinterpret_cast<T* const*>(src);
+                }
+                static std::basic_istream<Char>& 
+                stream_in(std::basic_istream<Char>& i, void** obj)
+                {
+                    i >> **reinterpret_cast<T**>(obj);
+                    return i;
+                }
+                static std::basic_ostream<Char>& 
+                stream_out(std::basic_ostream<Char>& o, void* const* obj)
+                {
+                    o << **reinterpret_cast<T* const*>(obj);
+                    return o;
+                }
+            };
+        };
+
+        template <typename T>
+        struct get_table
+        {
+            typedef mpl::bool_<(sizeof(T) <= sizeof(void*))> is_small;
+
+            template <typename Char>
+            static fxn_ptr_table<Char>* get()
+            {
+                static fxn_ptr_table<Char> static_table =
+                {
+                    fxns<is_small>::template type<T, Char>::get_type,
+                    fxns<is_small>::template type<T, Char>::static_delete,
+                    fxns<is_small>::template type<T, Char>::destruct,
+                    fxns<is_small>::template type<T, Char>::clone,
+                    fxns<is_small>::template type<T, Char>::move,
+                    fxns<is_small>::template type<T, Char>::stream_in,
+                    fxns<is_small>::template type<T, Char>::stream_out
+                };
+                return &static_table;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        struct empty {};
+
+        template <typename Char>
+        inline std::basic_istream<Char>&
+        operator>> (std::basic_istream<Char>& i, empty&)
+        {
+            // If this assertion fires you tried to insert from a std istream
+            // into an empty hold_any instance. This simply can't work, because
+            // there is no way to figure out what type to extract from the
+            // stream.
+            // The only way to make this work is to assign an arbitrary
+            // value of the required type to the hold_any instance you want to
+            // stream to. This assignment has to be executed before the actual
+            // call to the operator>>().
+            BOOST_ASSERT(false && 
+                "Tried to insert from a std istream into an empty "
+                "hold_any instance");
+            return i;
+        }
+
+        template <typename Char>
+        inline std::basic_ostream<Char>&
+        operator<< (std::basic_ostream<Char>& o, empty const&)
+        {
+            return o;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Char>
+    class basic_hold_any
+    {
+    public:
+        // constructors
+        template <typename T>
+        explicit basic_hold_any(T const& x)
+          : table(spirit::detail::get_table<T>::template get<Char>()), object(0)
+        {
+            if (spirit::detail::get_table<T>::is_small::value)
+                new (&object) T(x);
+            else
+                object = new T(x);
+        }
+
+        basic_hold_any()
+          : table(spirit::detail::get_table<spirit::detail::empty>::template get<Char>()),
+            object(0)
+        {
+        }
+
+        basic_hold_any(basic_hold_any const& x)
+          : table(spirit::detail::get_table<spirit::detail::empty>::template get<Char>()),
+            object(0)
+        {
+            assign(x);
+        }
+
+        ~basic_hold_any()
+        {
+            table->static_delete(&object);
+        }
+
+        // assignment
+        basic_hold_any& assign(basic_hold_any const& x)
+        {
+            if (&x != this) {
+                // are we copying between the same type?
+                if (table == x.table) {
+                    // if so, we can avoid reallocation
+                    table->move(&x.object, &object);
+                }
+                else {
+                    reset();
+                    x.table->clone(&x.object, &object);
+                    table = x.table;
+                }
+            }
+            return *this;
+        }
+
+        template <typename T>
+        basic_hold_any& assign(T const& x)
+        {
+            // are we copying between the same type?
+            spirit::detail::fxn_ptr_table<Char>* x_table =
+                spirit::detail::get_table<T>::template get<Char>();
+            if (table == x_table) {
+            // if so, we can avoid deallocating and re-use memory
+                table->destruct(&object);    // first destruct the old content
+                if (spirit::detail::get_table<T>::is_small::value) {
+                    // create copy on-top of object pointer itself
+                    new (&object) T(x);
+                }
+                else {
+                    // create copy on-top of old version
+                    new (object) T(x);
+                }
+            }
+            else {
+                if (spirit::detail::get_table<T>::is_small::value) {
+                    // create copy on-top of object pointer itself
+                    table->destruct(&object); // first destruct the old content
+                    new (&object) T(x);
+                }
+                else {
+                    reset();                  // first delete the old content
+                    object = new T(x);
+                }
+                table = x_table;      // update table pointer
+            }
+            return *this;
+        }
+
+        // assignment operator
+#ifdef BOOST_HAS_RVALUE_REFS
+        template <typename T>
+        basic_hold_any& operator=(T&& x)
+        {
+            return assign(std::forward<T>(x));
+        }
+#else
+        template <typename T>
+        basic_hold_any& operator=(T& x)
+        {
+            return assign(x);
+        }
+
+        template <typename T>
+        basic_hold_any& operator=(T const& x)
+        {
+            return assign(x);
+        }
+#endif
+
+        // utility functions
+        basic_hold_any& swap(basic_hold_any& x)
+        {
+            std::swap(table, x.table);
+            std::swap(object, x.object);
+            return *this;
+        }
+
+        boost::detail::sp_typeinfo const& type() const
+        {
+            return table->get_type();
+        }
+
+        template <typename T>
+        T const& cast() const
+        {
+            if (type() != BOOST_SP_TYPEID(T))
+              throw bad_any_cast(type(), BOOST_SP_TYPEID(T));
+
+            return spirit::detail::get_table<T>::is_small::value ?
+                *reinterpret_cast<T const*>(&object) :
+                *reinterpret_cast<T const*>(object);
+        }
+
+// implicit casting is disabled by default for compatibility with boost::any
+#ifdef BOOST_SPIRIT_ANY_IMPLICIT_CASTING
+        // automatic casting operator
+        template <typename T>
+        operator T const& () const { return cast<T>(); }
+#endif // implicit casting
+
+        bool empty() const
+        {
+            return table == spirit::detail::get_table<spirit::detail::empty>::template get<Char>();
+        }
+
+        void reset()
+        {
+            if (!empty())
+            {
+                table->static_delete(&object);
+                table = spirit::detail::get_table<spirit::detail::empty>::template get<Char>();
+                object = 0;
+            }
+        }
+
+    // these functions have been added in the assumption that the embedded
+    // type has a corresponding operator defined, which is completely safe
+    // because spirit::hold_any is used only in contexts where these operators
+    // do exist
+        template <typename Char_>
+        friend inline std::basic_istream<Char_>& 
+        operator>> (std::basic_istream<Char_>& i, basic_hold_any<Char_>& obj)
+        {
+            return obj.table->stream_in(i, &obj.object);
+        }
+
+        template <typename Char_>
+        friend inline std::basic_ostream<Char_>& 
+        operator<< (std::basic_ostream<Char_>& o, basic_hold_any<Char_> const& obj)
+        {
+            return obj.table->stream_out(o, &obj.object);
+        }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    private: // types
+        template <typename T, typename Char_>
+        friend T* any_cast(basic_hold_any<Char_> *);
+#else
+    public: // types (public so any_cast can be non-friend)
+#endif
+        // fields
+        spirit::detail::fxn_ptr_table<Char>* table;
+        void* object;
+    };
+
+    // boost::any-like casting
+    template <typename T, typename Char>
+    inline T* any_cast (basic_hold_any<Char>* operand)
+    {
+        if (operand && operand->type() == BOOST_SP_TYPEID(T)) {
+            return spirit::detail::get_table<T>::is_small::value ?
+                reinterpret_cast<T*>(&operand->object) :
+                reinterpret_cast<T*>(operand->object);
+        }
+        return 0;
+    }
+
+    template <typename T, typename Char>
+    inline T const* any_cast(basic_hold_any<Char> const* operand)
+    {
+        return any_cast<T>(const_cast<basic_hold_any<Char>*>(operand));
+    }
+
+    template <typename T, typename Char>
+    T any_cast(basic_hold_any<Char>& operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
+
+
+        nonref* result = any_cast<nonref>(&operand);
+        if(!result)
+            boost::throw_exception(bad_any_cast(operand.type(), BOOST_SP_TYPEID(T)));
+        return *result;
+    }
+
+    template <typename T, typename Char>
+    T const& any_cast(basic_hold_any<Char> const& operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type nonref;
+
+
+        return any_cast<nonref const&>(const_cast<basic_hold_any<Char> &>(operand));
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // backwards compatibility
+    typedef basic_hold_any<char> hold_any;
+    typedef basic_hold_any<wchar_t> whold_any;
+
+    namespace traits
+    {
+        template <typename T>
+        struct is_hold_any : mpl::false_ {};
+
+        template <typename Char>
+        struct is_hold_any<basic_hold_any<Char> > : mpl::true_ {};
+    }
+
+}}    // namespace boost::spirit
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/is_spirit_tag.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/is_spirit_tag.hpp
new file mode 100644 (file)
index 0000000..e8f9f6d
--- /dev/null
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SUPPORT_DETAIL_IS_SPIRIT_TAG_MAR_28_2011_0341PM)
+#define BOOST_SPIRIT_SUPPORT_DETAIL_IS_SPIRIT_TAG_MAR_28_2011_0341PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#define BOOST_SPIRIT_IS_TAG() typedef void is_spirit_tag;
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/char_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/char_traits.hpp
new file mode 100644 (file)
index 0000000..6b112ad
--- /dev/null
@@ -0,0 +1,54 @@
+// char_traits.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHAR_TRAITS_H
+#define BOOST_LEXER_CHAR_TRAITS_H
+
+// Make sure wchar_t is defined
+#include <string>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+struct char_traits
+{
+    typedef CharT char_type;
+    typedef CharT index_type;
+
+    static index_type call (CharT ch)
+    {
+       return ch;
+    }
+};
+
+template<>
+struct char_traits<char>
+{
+    typedef char char_type;
+    typedef unsigned char index_type;
+        
+    static index_type call (char ch)
+    {
+        return static_cast<index_type>(ch);
+    }
+};
+
+template<>
+struct char_traits<wchar_t>
+{
+    typedef wchar_t char_type;
+    typedef wchar_t index_type;
+
+    static index_type call (wchar_t ch)
+    {
+        return ch;
+    }
+};
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/consts.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/consts.hpp
new file mode 100644 (file)
index 0000000..a8a8cce
--- /dev/null
@@ -0,0 +1,39 @@
+// consts.h
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CONSTS_H
+#define BOOST_LEXER_CONSTS_H
+
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+#include "size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+    enum regex_flags {none = 0, icase = 1, dot_not_newline = 2};
+    // 0 = end state, 1 = id, 2 = unique_id, 3 = lex state, 4 = bol, 5 = eol,
+    // 6 = dead_state_index
+    enum {end_state_index, id_index, unique_id_index, state_index, bol_index,
+        eol_index, dead_state_index, dfa_offset};
+
+    const std::size_t max_macro_len = 30;
+    const std::size_t num_chars = 256;
+    // If sizeof(wchar_t) == sizeof(size_t) then don't overflow to 0
+    // by adding one to comparison.
+    const std::size_t num_wchar_ts =
+        (boost::integer_traits<wchar_t>::const_max < 0x110000) ?
+        boost::integer_traits<wchar_t>::const_max +
+        static_cast<std::size_t> (1) : 0x110000;
+    const std::size_t null_token = static_cast<std::size_t> (~0);
+    const std::size_t bol_token = static_cast<std::size_t> (~1);
+    const std::size_t eol_token = static_cast<std::size_t> (~2);
+    const std::size_t end_state = 1;
+    const std::size_t npos = static_cast<std::size_t> (~0);
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp
new file mode 100644 (file)
index 0000000..5995849
--- /dev/null
@@ -0,0 +1,71 @@
+// ptr_list.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PTR_LIST_HPP
+#define BOOST_LEXER_PTR_LIST_HPP
+
+#include <list>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename Type>
+class ptr_list
+{
+public:
+    typedef std::list<Type *> list;
+
+    ptr_list ()
+    {
+    }
+
+    ~ptr_list ()
+    {
+        clear ();
+    }
+
+    list *operator -> ()
+    {
+        return &_list;
+    }
+
+    const list *operator -> () const
+    {
+        return &_list;
+    }
+
+    list &operator * ()
+    {
+        return _list;
+    }
+
+    const list &operator * () const
+    {
+        return _list;
+    }
+
+    void clear ()
+    {
+        while (!_list.empty ())
+        {
+            delete _list.front ();
+            _list.pop_front ();
+        }
+    }
+
+private:
+    list _list;
+
+    ptr_list (const ptr_list &); // No copy construction.
+    ptr_list &operator = (const ptr_list &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp
new file mode 100644 (file)
index 0000000..98411e6
--- /dev/null
@@ -0,0 +1,108 @@
+// ptr_vector.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PTR_VECTOR_HPP
+#define BOOST_LEXER_PTR_VECTOR_HPP
+
+#include "../size_t.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename Type>
+class ptr_vector
+{
+public:
+    typedef std::vector<Type *> vector;
+
+    ptr_vector ()
+    {
+    }
+
+    ~ptr_vector ()
+    {
+        clear ();
+    }
+
+    vector *operator -> ()
+    {
+        return &_vector;
+    }
+
+    const vector *operator -> () const
+    {
+        return &_vector;
+    }
+
+    vector &operator * ()
+    {
+        return _vector;
+    }
+
+    const vector &operator * () const
+    {
+        return _vector;
+    }
+
+    Type * &operator [] (const std::size_t index_)
+    {
+        return _vector[index_];
+    }
+
+    Type * const &operator [] (const std::size_t index_) const
+    {
+        return _vector[index_];
+    }
+
+    bool operator == (const ptr_vector &rhs_) const
+    {
+        bool equal_ = _vector.size () == rhs_._vector.size ();
+
+        if (equal_)
+        {
+            typename vector::const_iterator lhs_iter_ = _vector.begin ();
+            typename vector::const_iterator end_ = _vector.end ();
+            typename vector::const_iterator rhs_iter_ = rhs_._vector.begin ();
+
+            for (; equal_ && lhs_iter_ != end_; ++lhs_iter_, ++rhs_iter_)
+            {
+                equal_ = **lhs_iter_ == **rhs_iter_;
+            }
+        }
+
+        return  equal_;
+    }
+
+    void clear ()
+    {
+        if (!_vector.empty ())
+        {
+            Type **iter_ = &_vector.front ();
+            Type **end_ = iter_ + _vector.size ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                delete *iter_;
+            }
+        }
+
+        _vector.clear ();
+    }
+
+private:
+    vector _vector;
+
+    ptr_vector (const ptr_vector &); // No copy construction.
+    ptr_vector &operator = (const ptr_vector &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp
new file mode 100644 (file)
index 0000000..38c70b5
--- /dev/null
@@ -0,0 +1,77 @@
+// char_state_machine.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHAR_STATE_MACHINE_HPP
+#define BOOST_LEXER_CHAR_STATE_MACHINE_HPP
+
+#include "../consts.hpp"
+#include <map>
+#include "../size_t.hpp"
+#include "../string_token.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_char_state_machine
+{
+    struct state
+    {
+        typedef basic_string_token<CharT> string_token;
+        typedef std::map<std::size_t, string_token> size_t_string_token_map;
+        typedef std::pair<std::size_t, string_token> size_t_string_token_pair;
+
+        bool _end_state;
+        std::size_t _id;
+        std::size_t _unique_id;
+        std::size_t _state;
+        std::size_t _bol_index;
+        std::size_t _eol_index;
+        size_t_string_token_map _transitions;
+
+        state () :
+            _end_state (false),
+            _id (0),
+            _unique_id (npos),
+            _state (0),
+            _bol_index (npos),
+            _eol_index (npos)
+        {
+        }
+    };
+
+    typedef std::vector<state> state_vector;
+    typedef std::vector<state_vector> state_vector_vector;
+
+    state_vector_vector _sm_vector;
+
+    bool empty () const
+    {
+        return _sm_vector.empty ();
+    }
+
+    void clear ()
+    {
+        _sm_vector.clear ();
+    }
+
+    void swap (basic_char_state_machine &csm_)
+    {
+        _sm_vector.swap (csm_._sm_vector);
+    }
+};
+
+typedef basic_char_state_machine<char> char_state_machine;
+typedef basic_char_state_machine<wchar_t> wchar_state_machine;
+
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/debug.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/debug.hpp
new file mode 100644 (file)
index 0000000..36ee1bb
--- /dev/null
@@ -0,0 +1,281 @@
+// debug.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_DEBUG_HPP
+#define BOOST_LEXER_DEBUG_HPP
+
+#include <map>
+#include <ostream>
+#include "rules.hpp"
+#include "size_t.hpp"
+#include "state_machine.hpp"
+#include "string_token.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+class basic_debug
+{
+public:
+    typedef std::basic_ostream<CharT> ostream;
+    typedef std::basic_string<CharT> string;
+    typedef std::vector<std::size_t> size_t_vector;
+
+    static void escape_control_chars (const string &in_, string &out_)
+    {
+        const CharT *ptr_ = in_.c_str ();
+        std::size_t size_ = in_.size ();
+
+        out_.clear ();
+
+        while (size_)
+        {
+            basic_string_token<CharT>::escape_char (*ptr_, out_);
+            ++ptr_;
+            --size_;
+        }
+    }
+
+    static void dump (const basic_state_machine<CharT> &state_machine_,
+        basic_rules<CharT> &rules_, ostream &stream_)
+    {
+        typename basic_state_machine<CharT>::iterator iter_ =
+            state_machine_.begin ();
+        typename basic_state_machine<CharT>::iterator end_ =
+            state_machine_.end ();
+
+        for (std::size_t dfa_ = 0, dfas_ = state_machine_.size ();
+            dfa_ < dfas_; ++dfa_)
+        {
+            lexer_state (stream_);
+            stream_ << rules_.state (dfa_) << std::endl << std::endl;
+
+            dump_ex (iter_, stream_);
+        }
+    }
+
+    static void dump (const basic_state_machine<CharT> &state_machine_,
+        ostream &stream_)
+    {
+        typename basic_state_machine<CharT>::iterator iter_ =
+            state_machine_.begin ();
+        typename basic_state_machine<CharT>::iterator end_ =
+            state_machine_.end ();
+
+        for (std::size_t dfa_ = 0, dfas_ = state_machine_.size ();
+            dfa_ < dfas_; ++dfa_)
+        {
+            lexer_state (stream_);
+            stream_ << dfa_ << std::endl << std::endl;
+
+            dump_ex (iter_, stream_);
+        }
+    }
+
+protected:
+    typedef std::basic_stringstream<CharT> stringstream;
+
+    static void dump_ex (typename basic_state_machine<CharT>::iterator &iter_,
+        ostream &stream_)
+    {
+        const std::size_t states_ = iter_->states;
+
+        for (std::size_t i_ = 0; i_ < states_; ++i_)
+        {
+            state (stream_);
+            stream_ << i_ << std::endl;
+
+            if (iter_->end_state)
+            {
+                end_state (stream_);
+                stream_ << iter_->id;
+                unique_id (stream_);
+                stream_ << iter_->unique_id;
+                dfa (stream_);
+                stream_ << iter_->goto_dfa;
+                stream_ << std::endl;
+            }
+
+            if (iter_->bol_index != npos)
+            {
+                bol (stream_);
+                stream_ << iter_->bol_index << std::endl;
+            }
+
+            if (iter_->eol_index != npos)
+            {
+                eol (stream_);
+                stream_ << iter_->eol_index << std::endl;
+            }
+
+            const std::size_t transitions_ = iter_->transitions;
+
+            if (transitions_ == 0)
+            {
+                ++iter_;
+            }
+
+            for (std::size_t t_ = 0; t_ < transitions_; ++t_)
+            {
+                std::size_t goto_state_ = iter_->goto_state;
+
+                if (iter_->token.any ())
+                {
+                    any (stream_);
+                }
+                else
+                {
+                    open_bracket (stream_);
+
+                    if (iter_->token._negated)
+                    {
+                        negated (stream_);
+                    }
+
+                    string charset_;
+                    CharT c_ = 0;
+
+                    escape_control_chars (iter_->token._charset,
+                        charset_);
+                    c_ = *charset_.c_str ();
+
+                    if (!iter_->token._negated &&
+                        (c_ == '^' || c_ == ']'))
+                    {
+                        stream_ << '\\';
+                    }
+
+                    stream_ << charset_;
+                    close_bracket (stream_);
+                }
+
+                stream_ << goto_state_ << std::endl;
+                ++iter_;
+            }
+
+            stream_ << std::endl;
+        }
+    }
+
+    static void lexer_state (std::ostream &stream_)
+    {
+        stream_ << "Lexer state: ";
+    }
+
+    static void lexer_state (std::wostream &stream_)
+    {
+        stream_ << L"Lexer state: ";
+    }
+
+    static void state (std::ostream &stream_)
+    {
+        stream_ << "State: ";
+    }
+
+    static void state (std::wostream &stream_)
+    {
+        stream_ << L"State: ";
+    }
+
+    static void bol (std::ostream &stream_)
+    {
+        stream_ << "  BOL -> ";
+    }
+
+    static void bol (std::wostream &stream_)
+    {
+        stream_ << L"  BOL -> ";
+    }
+
+    static void eol (std::ostream &stream_)
+    {
+        stream_ << "  EOL -> ";
+    }
+
+    static void eol (std::wostream &stream_)
+    {
+        stream_ << L"  EOL -> ";
+    }
+
+    static void end_state (std::ostream &stream_)
+    {
+        stream_ << "  END STATE, Id = ";
+    }
+
+    static void end_state (std::wostream &stream_)
+    {
+        stream_ << L"  END STATE, Id = ";
+    }
+
+    static void unique_id (std::ostream &stream_)
+    {
+        stream_ << ", Unique Id = ";
+    }
+
+    static void unique_id (std::wostream &stream_)
+    {
+        stream_ << L", Unique Id = ";
+    }
+
+    static void any (std::ostream &stream_)
+    {
+        stream_ << "  . -> ";
+    }
+
+    static void any (std::wostream &stream_)
+    {
+        stream_ << L"  . -> ";
+    }
+
+    static void open_bracket (std::ostream &stream_)
+    {
+        stream_ << "  [";
+    }
+
+    static void open_bracket (std::wostream &stream_)
+    {
+        stream_ << L"  [";
+    }
+
+    static void negated (std::ostream &stream_)
+    {
+        stream_ << "^";
+    }
+
+    static void negated (std::wostream &stream_)
+    {
+        stream_ << L"^";
+    }
+
+    static void close_bracket (std::ostream &stream_)
+    {
+        stream_ << "] -> ";
+    }
+
+    static void close_bracket (std::wostream &stream_)
+    {
+        stream_ << L"] -> ";
+    }
+
+    static void dfa (std::ostream &stream_)
+    {
+        stream_ << ", dfa = ";
+    }
+
+    static void dfa (std::wostream &stream_)
+    {
+        stream_ << L", dfa = ";
+    }
+};
+
+typedef basic_debug<char> debug;
+typedef basic_debug<wchar_t> wdebug;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/file_input.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/file_input.hpp
new file mode 100644 (file)
index 0000000..fe5412e
--- /dev/null
@@ -0,0 +1,475 @@
+// file_input.hpp
+// Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_FILE_INPUT
+#define BOOST_LEXER_FILE_INPUT
+
+#include "char_traits.hpp"
+// memcpy
+#include <cstring>
+#include <fstream>
+#include "size_t.hpp"
+#include "state_machine.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT, typename Traits = char_traits<CharT> >
+class basic_file_input
+{
+public:
+    class iterator
+    {
+    public:
+        friend class basic_file_input;
+
+        struct data
+        {
+            std::size_t id;
+            std::size_t unique_id;
+            const CharT *start;
+            const CharT *end;
+            std::size_t state;
+
+            // Construct in end() state.
+            data () :
+                id (0),
+                unique_id (npos),
+                state (npos)
+            {
+            }
+
+            bool operator == (const data &rhs_) const
+            {
+                return id == rhs_.id && unique_id == rhs_.unique_id &&
+                    start == rhs_.start && end == rhs_.end &&
+                    state == rhs_.state;
+            }
+        };
+
+        iterator () :
+            _input (0)
+        {
+        }
+
+        bool operator == (const iterator &rhs_) const
+        {
+            return _data == rhs_._data;
+        }
+
+        bool operator != (const iterator &rhs_) const
+        {
+            return !(*this == rhs_);
+        }
+
+        data &operator * ()
+        {
+            return _data;
+        }
+
+        data *operator -> ()
+        {
+            return &_data;
+        }
+
+        // Let compiler generate operator = ().
+
+        // prefix version
+        iterator &operator ++ ()
+        {
+            next_token ();
+            return *this;
+        }
+
+        // postfix version
+        iterator operator ++ (int)
+        {
+            iterator iter_ = *this;
+
+            next_token ();
+            return iter_;
+        }
+
+        void next_token ()
+        {
+            const detail::internals &internals_ =
+                _input->_state_machine->data ();
+
+            _data.start = _data.end;
+
+            if (internals_._dfa->size () == 1)
+            {
+                _data.id = _input->next (&internals_._lookup->front ()->
+                    front (), internals_._dfa_alphabet.front (),
+                    &internals_._dfa->front ()->front (), _data.start,
+                    _data.end, _data.unique_id);
+            }
+            else
+            {
+                _data.id = _input->next (internals_, _data.state, _data.start,
+                    _data.end, _data.unique_id);
+            }
+
+            if (_data.id == 0)
+            {
+                _data.start = 0;
+                _data.end = 0;
+                // Ensure current state matches that returned by end().
+                _data.state = npos;
+            }
+        }
+
+    private:
+        // Not owner (obviously!)
+        basic_file_input *_input;
+        data _data;
+    };
+
+    friend class iterator;
+
+    // Make it explict that we are NOT taking a copy of state_machine_!
+    basic_file_input (const basic_state_machine<CharT> *state_machine_,
+        std::basic_ifstream<CharT> *is_,
+        const std::streamsize buffer_size_ = 4096,
+        const std::streamsize buffer_increment_ = 1024) :
+        _state_machine (state_machine_),
+        _stream (is_),
+        _buffer_size (buffer_size_),
+        _buffer_increment (buffer_increment_),
+        _buffer (_buffer_size, '!')
+    {
+        _start_buffer = &_buffer.front ();
+        _end_buffer = _start_buffer + _buffer.size ();
+        _start_token = _end_buffer;
+        _end_token = _end_buffer;
+    }
+
+    iterator begin ()
+    {
+        iterator iter_;
+
+        iter_._input = this;
+        // Over-ride default of 0 (EOF)
+        iter_._data.id = npos;
+        iter_._data.start = 0;
+        iter_._data.end = 0;
+        iter_._data.state = 0;
+        ++iter_;
+        return iter_;
+    }
+
+    iterator end ()
+    {
+        iterator iter_;
+
+        iter_._input = this;
+        iter_._data.start = 0;
+        iter_._data.end = 0;
+        return iter_;
+    }
+
+    void flush ()
+    {
+        // This temporary is mandatory, otherwise the
+        // pointer calculations won't work!
+        const CharT *temp_ = _end_buffer;
+
+        _start_token = _end_token = _end_buffer;
+        reload_buffer (temp_, true, _end_token);
+    }
+
+private:
+    typedef std::basic_istream<CharT> istream;
+    typedef std::vector<CharT> buffer;
+
+    const basic_state_machine<CharT> *_state_machine;
+    const std::streamsize _buffer_size;
+    const std::streamsize _buffer_increment;
+
+    buffer _buffer;
+    CharT *_start_buffer;
+    istream *_stream;
+    const CharT *_start_token;
+    const CharT *_end_token;
+    CharT *_end_buffer;
+
+    std::size_t next (const detail::internals &internals_,
+        std::size_t &start_state_, const CharT * &start_, const CharT * &end_,
+        std::size_t &unique_id_)
+    {
+        _start_token = _end_token;
+
+again:
+        const std::size_t * lookup_ = &internals_._lookup[start_state_]->
+            front ();
+        std::size_t dfa_alphabet_ = internals_._dfa_alphabet[start_state_];
+        const std::size_t *dfa_ = &internals_._dfa[start_state_]->front ();
+        const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+        const CharT *curr_ = _start_token;
+        bool end_state_ = *ptr_ != 0;
+        std::size_t id_ = *(ptr_ + id_index);
+        std::size_t uid_ = *(ptr_ + unique_id_index);
+        const CharT *end_token_ = curr_;
+
+        for (;;)
+        {
+            if (curr_ >= _end_buffer)
+            {
+                if (!reload_buffer (curr_, end_state_, end_token_))
+                {
+                    // EOF
+                    break;
+                }
+            }
+
+            const std::size_t BOL_state_ = ptr_[bol_index];
+            const std::size_t EOL_state_ = ptr_[eol_index];
+
+            if (BOL_state_ && (_start_token == _start_buffer ||
+                *(_start_token - 1) == '\n'))
+            {
+                ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+            }
+            else if (EOL_state_ && *curr_ == '\n')
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+            }
+            else
+            {
+                const std::size_t state_ =
+                    ptr_[lookup_[static_cast<typename Traits::index_type>
+                        (*curr_++)]];
+
+                if (state_ == 0)
+                {
+                    break;
+                }
+
+                ptr_ = &dfa_[state_ * dfa_alphabet_];
+            }
+
+            if (*ptr_)
+            {
+                end_state_ = true;
+                id_ = *(ptr_ + id_index);
+                uid_ = *(ptr_ + unique_id_index);
+                start_state_ = *(ptr_ + state_index);
+                end_token_ = curr_;
+            }
+        }
+
+        if (_start_token >= _end_buffer)
+        {
+            // No more tokens...
+            unique_id_ = npos;
+            return 0;
+        }
+
+        const std::size_t EOL_state_ = ptr_[eol_index];
+
+        if (EOL_state_ && curr_ == end_)
+        {
+            ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+            if (*ptr_)
+            {
+                end_state_ = true;
+                id_ = *(ptr_ + id_index);
+                uid_ = *(ptr_ + unique_id_index);
+                start_state_ = *(ptr_ + state_index);
+                end_token_ = curr_;
+            }
+        }
+
+        if (end_state_)
+        {
+            // return longest match
+            _end_token = end_token_;
+
+            if (id_ == 0) goto again;
+        }
+        else
+        {
+            // No match causes char to be skipped
+            _end_token = _start_token + 1;
+            id_ = npos;
+            uid_ = npos;
+        }
+
+        start_ = _start_token;
+        end_ = _end_token;
+        unique_id_ = uid_;
+        return id_;
+    }
+
+    std::size_t next (const std::size_t * const lookup_,
+        const std::size_t dfa_alphabet_, const std::size_t * const dfa_,
+        const CharT * &start_, const CharT * &end_, std::size_t &unique_id_)
+    {
+        _start_token = _end_token;
+
+        const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+        const CharT *curr_ = _start_token;
+        bool end_state_ = *ptr_ != 0;
+        std::size_t id_ = *(ptr_ + id_index);
+        std::size_t uid_ = *(ptr_ + unique_id_index);
+        const CharT *end_token_ = curr_;
+
+        for (;;)
+        {
+            if (curr_ >= _end_buffer)
+            {
+                if (!reload_buffer (curr_, end_state_, end_token_))
+                {
+                    // EOF
+                    break;
+                }
+            }
+
+            const std::size_t BOL_state_ = ptr_[bol_index];
+            const std::size_t EOL_state_ = ptr_[eol_index];
+
+            if (BOL_state_ && (_start_token == _start_buffer ||
+                *(_start_token - 1) == '\n'))
+            {
+                ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+            }
+            else if (EOL_state_ && *curr_ == '\n')
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+            }
+            else
+            {
+                const std::size_t state_ =
+                    ptr_[lookup_[static_cast<typename Traits::index_type>
+                        (*curr_++)]];
+
+                if (state_ == 0)
+                {
+                    break;
+                }
+
+                ptr_ = &dfa_[state_ * dfa_alphabet_];
+            }
+
+            if (*ptr_)
+            {
+                end_state_ = true;
+                id_ = *(ptr_ + id_index);
+                uid_ = *(ptr_ + unique_id_index);
+                end_token_ = curr_;
+            }
+        }
+
+        if (_start_token >= _end_buffer)
+        {
+            // No more tokens...
+            unique_id_ = npos;
+            return 0;
+        }
+
+        const std::size_t EOL_state_ = ptr_[eol_index];
+
+        if (EOL_state_ && curr_ == end_)
+        {
+            ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+            if (*ptr_)
+            {
+                end_state_ = true;
+                id_ = *(ptr_ + id_index);
+                uid_ = *(ptr_ + unique_id_index);
+                end_token_ = curr_;
+            }
+        }
+
+        if (end_state_)
+        {
+            // return longest match
+            _end_token = end_token_;
+        }
+        else
+        {
+            // No match causes char to be skipped
+            _end_token = _start_token + 1;
+            id_ = npos;
+            uid_ = npos;
+        }
+
+        start_ = _start_token;
+        end_ = _end_token;
+        unique_id_ = uid_;
+        return id_;
+    }
+
+    bool reload_buffer (const CharT * &curr_, const bool end_state_,
+        const CharT * &end_token_)
+    {
+        bool success_ = !_stream->eof ();
+
+        if (success_)
+        {
+            const CharT *old_start_token_ = _start_token;
+            std::size_t old_size_ = _buffer.size ();
+            std::size_t count_ = 0;
+
+            if (_start_token - 1 == _start_buffer)
+            {
+                // Run out of buffer space, so increase.
+                _buffer.resize (old_size_ + _buffer_increment, '!');
+                _start_buffer = &_buffer.front ();
+                _start_token = _start_buffer + 1;
+                _stream->read (_start_buffer + old_size_,
+                    _buffer_increment);
+                count_ = _stream->gcount ();
+                _end_buffer = _start_buffer + old_size_ + count_;
+            }
+            else if (_start_token < _end_buffer)
+            {
+                const std::size_t len_ = _end_buffer - _start_token;
+                // Some systems have memcpy in namespace std.
+                using namespace std;
+
+                memcpy (_start_buffer, _start_token - 1, (len_ + 1) *
+                    sizeof (CharT));
+                _stream->read (_start_buffer + len_ + 1,
+                    static_cast<std::streamsize> (_buffer.size () - len_ - 1));
+                count_ = _stream->gcount ();
+                _start_token = _start_buffer + 1;
+                _end_buffer = _start_buffer + len_ + 1 + count_;
+            }
+            else
+            {
+                _stream->read (_start_buffer, static_cast<std::streamsize>
+                    (_buffer.size ()));
+                count_ = _stream->gcount ();
+                _start_token = _start_buffer;
+                _end_buffer = _start_buffer + count_;
+            }
+
+            if (end_state_)
+            {
+                end_token_ = _start_token +
+                    (end_token_ - old_start_token_);
+            }
+
+            curr_ = _start_token + (curr_ - old_start_token_);
+        }
+
+        return success_;
+    }
+
+    // Disallow copying of buffer
+    basic_file_input (const basic_file_input &);
+    const basic_file_input &operator = (const basic_file_input &);
+};
+
+typedef basic_file_input<char> file_input;
+typedef basic_file_input<wchar_t> wfile_input;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_cpp.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_cpp.hpp
new file mode 100644 (file)
index 0000000..f1f0553
--- /dev/null
@@ -0,0 +1,577 @@
+// generate_cpp.hpp
+// Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_GENERATE_CPP_HPP
+#define BOOST_LEXER_GENERATE_CPP_HPP
+
+#include "char_traits.hpp"
+#include "consts.hpp"
+#include "internals.hpp"
+#include <iostream>
+#include <boost/detail/iterator.hpp>
+#include "runtime_error.hpp"
+#include "size_t.hpp"
+#include "state_machine.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+void generate_cpp (const basic_state_machine<CharT> &state_machine_,
+    std::ostream &os_, const bool use_pointers_ = false,
+    const bool skip_unknown_ = true, const bool optimise_parameters_ = true,
+    const char *name_ = "next_token")
+{
+    const detail::internals &sm_ = state_machine_.data ();
+
+    if (sm_._lookup->size () == 0)
+    {
+        throw runtime_error ("Cannot generate code from an empty "
+            "state machine");
+    }
+
+    std::string upper_name_ (__DATE__);
+    const std::size_t lookups_ = sm_._lookup->front ()->size ();
+    const std::size_t dfas_ = sm_._dfa->size ();
+    std::string::size_type pos_ = upper_name_.find (' ');
+    const char *iterator_ = 0;
+
+    if (use_pointers_)
+    {
+        if (lookups_ == 256)
+        {
+            iterator_ = "const char *";
+        }
+        else
+        {
+            iterator_ = "const wchar_t *";
+        }
+    }
+    else
+    {
+        iterator_ = "Iterator &";
+    }
+
+    while (pos_ != std::string::npos)
+    {
+        upper_name_.replace (pos_, 1, "_");
+        pos_ = upper_name_.find (' ', pos_);
+    }
+
+    upper_name_ += '_';
+    upper_name_ +=  __TIME__;
+
+    pos_ = upper_name_.find (':');
+
+    while (pos_ != std::string::npos)
+    {
+        upper_name_.erase (pos_, 1);
+        pos_ = upper_name_.find (':', pos_);
+    }
+
+    upper_name_ = '_' + upper_name_;
+    upper_name_ = name_ + upper_name_;
+    std::transform (upper_name_.begin (), upper_name_.end (),
+        upper_name_.begin (), ::toupper);
+    os_ << "#ifndef " << upper_name_ + '\n';
+    os_ << "#define " << upper_name_ + '\n';
+    os_ << "// Copyright (c) 2008-2009 Ben Hanson\n";
+    os_ << "//\n";
+    os_ << "// Distributed under the Boost Software License, "
+        "Version 1.0. (See accompanying\n";
+    os_ << "// file licence_1_0.txt or copy at "
+        "http://www.boost.org/LICENSE_1_0.txt)\n\n";
+    os_ << "// Auto-generated by boost::lexer\n";
+    os_ << "template<typename Iterator>\n";
+    os_ << "std::size_t " << name_  << " (";
+
+    if (dfas_ > 1 || !optimise_parameters_)
+    {
+        os_ << "std::size_t &start_state_, ";
+    }
+
+    if (use_pointers_)
+    {
+        os_ << iterator_ << " &";
+    }
+    else
+    {
+        os_ << iterator_;
+    }
+
+    os_ << "start_token_, ";
+
+    if (use_pointers_)
+    {
+        os_ << iterator_ << " const ";
+    }
+    else
+    {
+        os_ << "const " << iterator_;
+    }
+
+    os_ << "end_, \n";
+    os_ << "    std::size_t &unique_id_";
+
+    if (sm_._seen_BOL_assertion || !optimise_parameters_)
+    {
+        os_ << ", bool &beg_of_line_";
+    }
+
+    os_ << ")\n";
+    os_ << "{\n";
+    os_ << "    enum {end_state_index, id_index, unique_id_index, state_index, bol_index,\n";
+    os_ << "        eol_index, dead_state_index, dfa_offset};\n";
+    os_ << "    static const std::size_t npos = static_cast"
+        "<std::size_t>(~0);\n";
+
+    if (dfas_ > 1)
+    {
+        std::size_t state_ = 0;
+
+        for (; state_ < dfas_; ++state_)
+        {
+            std::size_t i_ = 0;
+            std::size_t j_ = 1;
+            std::size_t count_ = lookups_ / 8;
+            const std::size_t *lookup_ = &sm_._lookup[state_]->front ();
+            const std::size_t *dfa_ = &sm_._dfa[state_]->front ();
+
+            os_ << "    static const std::size_t lookup" << state_ << "_[" <<
+                lookups_ << "] = {";
+
+            for (; i_ < count_; ++i_)
+            {
+                const std::size_t index_ = i_ * 8;
+
+                os_ << lookup_[index_];
+
+                for (; j_ < 8; ++j_)
+                {
+                    os_ << ", " << lookup_[index_ + j_];
+                }
+
+                if (i_ < count_ - 1)
+                {
+                    os_ << "," << std::endl << "        ";
+                }
+
+                j_ = 1;
+            }
+
+            os_ << "};\n";
+            count_ = sm_._dfa[state_]->size ();
+            os_ << "    static const std::size_t dfa" << state_ << "_[" <<
+                count_ << "] = {";
+            count_ /= 8;
+
+            for (i_ = 0; i_ < count_; ++i_)
+            {
+                const std::size_t index_ = i_ * 8;
+
+                os_ << dfa_[index_];
+
+                for (j_ = 1; j_ < 8; ++j_)
+                {
+                    os_ << ", " << dfa_[index_ + j_];
+                }
+
+                if (i_ < count_ - 1)
+                {
+                    os_ << "," << std::endl << "        ";
+                }
+            }
+
+            const std::size_t mod_ = sm_._dfa[state_]->size () % 8;
+
+            if (mod_)
+            {
+                const std::size_t index_ = count_ * 8;
+
+                if (count_)
+                {
+                    os_ << ",\n        ";
+                }
+
+                os_ << dfa_[index_];
+
+                for (j_ = 1; j_ < mod_; ++j_)
+                {
+                    os_ << ", " << dfa_[index_ + j_];
+                }
+            }
+
+            os_ << "};\n";
+        }
+
+        std::size_t count_ = sm_._dfa_alphabet.size ();
+        std::size_t i_ = 1;
+
+        os_ << "    static const std::size_t *lookup_arr_[" << count_ <<
+            "] = {";
+        os_ << "lookup0_";
+
+        for (i_ = 1; i_ < count_; ++i_)
+        {
+            os_ << ", " << "lookup" << i_ << "_";
+        }
+
+        os_ << "};\n";
+        os_ << "    static const std::size_t dfa_alphabet_arr_[" << count_ <<
+            "] = {";
+        os_ << sm_._dfa_alphabet.front ();
+
+        for (i_ = 1; i_ < count_; ++i_)
+        {
+            os_ << ", " << sm_._dfa_alphabet[i_];
+        }
+
+        os_ << "};\n";
+        os_ << "    static const std::size_t *dfa_arr_[" << count_ <<
+            "] = {";
+        os_ << "dfa0_";
+
+        for (i_ = 1; i_ < count_; ++i_)
+        {
+            os_ << ", " << "dfa" << i_ << "_";
+        }
+
+        os_ << "};\n";
+    }
+    else
+    {
+        const std::size_t *lookup_ = &sm_._lookup->front ()->front ();
+        const std::size_t *dfa_ = &sm_._dfa->front ()->front ();
+        std::size_t i_ = 0;
+        std::size_t j_ = 1;
+        std::size_t count_ = lookups_ / 8;
+
+        os_ << "    static const std::size_t lookup_[";
+        os_ << sm_._lookup->front ()->size () << "] = {";
+
+        for (; i_ < count_; ++i_)
+        {
+            const std::size_t index_ = i_ * 8;
+
+            os_ << lookup_[index_];
+
+            for (; j_ < 8; ++j_)
+            {
+                os_ << ", " << lookup_[index_ + j_];
+            }
+
+            if (i_ < count_ - 1)
+            {
+                os_ << "," << std::endl << "        ";
+            }
+
+            j_ = 1;
+        }
+
+        os_ << "};\n";
+        os_ << "    static const std::size_t dfa_alphabet_ = " <<
+            sm_._dfa_alphabet.front () << ";\n";
+        os_ << "    static const std::size_t dfa_[" <<
+            sm_._dfa->front ()->size () << "] = {";
+        count_ = sm_._dfa->front ()->size () / 8;
+
+        for (i_ = 0; i_ < count_; ++i_)
+        {
+            const std::size_t index_ = i_ * 8;
+
+            os_ << dfa_[index_];
+
+            for (j_ = 1; j_ < 8; ++j_)
+            {
+                os_ << ", " << dfa_[index_ + j_];
+            }
+
+            if (i_ < count_ - 1)
+            {
+                os_ << "," << std::endl << "        ";
+            }
+        }
+
+        const std::size_t mod_ = sm_._dfa->front ()->size () % 8;
+
+        if (mod_)
+        {
+            const std::size_t index_ = count_ * 8;
+
+            if (count_)
+            {
+                os_ << ",\n        ";
+            }
+
+            os_ << dfa_[index_];
+
+            for (j_ = 1; j_ < mod_; ++j_)
+            {
+                os_ << ", " << dfa_[index_ + j_];
+            }
+        }
+
+        os_ << "};\n";
+    }
+
+    os_ << "\n    if (start_token_ == end_)\n";
+    os_ << "    {\n";
+    os_ << "        unique_id_ = npos;\n";
+    os_ << "        return 0;\n";
+    os_ << "    }\n\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "again:\n";
+        os_ << "    const std::size_t * lookup_ = "
+            "lookup_arr_[start_state_];\n";
+        os_ << "    std::size_t dfa_alphabet_ = "
+            "dfa_alphabet_arr_[start_state_];\n";
+        os_ << "    const std::size_t *dfa_ = dfa_arr_[start_state_];\n";
+    }
+
+    os_ << "    const std::size_t *ptr_ = dfa_ + dfa_alphabet_;\n";
+    os_ << "    Iterator curr_ = start_token_;\n";
+    os_ << "    bool end_state_ = *ptr_ != 0;\n";
+    os_ << "    std::size_t id_ = *(ptr_ + id_index);\n";
+    os_ << "    std::size_t uid_ = *(ptr_ + unique_id_index);\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "    std::size_t end_start_state_ = start_state_;\n";
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "    bool bol_ = beg_of_line_;\n";
+        os_ << "    bool end_bol_ = bol_;\n";
+    }
+
+    os_ << "    Iterator end_token_ = start_token_;\n";
+    os_ << '\n';
+    os_ << "    while (curr_ != end_)\n";
+    os_ << "    {\n";
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "        const std::size_t BOL_state_ = ptr_[bol_index];\n";
+    }
+
+    if (sm_._seen_EOL_assertion)
+    {
+        os_ << "        const std::size_t EOL_state_ = ptr_[eol_index];\n";
+    }
+
+    if (sm_._seen_BOL_assertion || sm_._seen_EOL_assertion)
+    {
+        os_ << '\n';
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "        if (BOL_state_ && bol_)\n";
+        os_ << "        {\n";
+        os_ << "            ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];\n";
+        os_ << "        }\n";
+    }
+
+    if (sm_._seen_EOL_assertion)
+    {
+        os_ << "        ";
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "else ";
+        }
+
+        os_ << "if (EOL_state_ && *curr_ == '\\n')\n";
+        os_ << "        {\n";
+        os_ << "            ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];\n";
+        os_ << "        }\n";
+    }
+
+    std::string tab_ (sm_._seen_BOL_assertion || sm_._seen_EOL_assertion ? "    " : "");
+
+    if (sm_._seen_BOL_assertion || sm_._seen_EOL_assertion)
+    {
+        os_ << "        else\n";
+        os_ << "        {\n";
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "            ";
+
+        if (lookups_ == 256)
+        {
+            os_ << "char";
+        }
+        else
+        {
+            os_ << "wchar_t";
+        }
+
+        os_ << " prev_char_ = *curr_++;\n\n";
+        os_ << "            bol_ = prev_char_ == '\\n';\n\n";
+    }
+
+    os_ << tab_;
+    os_ << "        const std::size_t state_ =\n";
+    os_ << tab_;
+    os_ << "            ptr_[lookup_[";
+
+    if (lookups_ == 256)
+    {
+        os_ << "static_cast<unsigned char>(";
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "prev_char";
+    }
+    else
+    {
+        os_ << "*curr_++";
+    }
+
+
+    if (lookups_ == 256)
+    {
+        os_ << ')';
+    }
+
+    os_ << "]];\n\n";
+
+    os_ << tab_;
+    os_ << "        if (state_ == 0) break;\n\n";
+    os_ << tab_;
+    os_ << "        ptr_ = &dfa_[state_ * dfa_alphabet_];\n";
+
+    if (sm_._seen_BOL_assertion || sm_._seen_EOL_assertion)
+    {
+        os_ << "        }\n";
+    }
+
+    os_ << '\n';
+    os_ << "        if (*ptr_)\n";
+    os_ << "        {\n";
+    os_ << "            end_state_ = true;\n";
+    os_ << "            id_ = *(ptr_ + id_index);\n";
+    os_ << "            uid_ = *(ptr_ + unique_id_index);\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "            end_start_state_ = *(ptr_ + state_index);\n";
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "            end_bol_ = bol_;\n";
+    }
+
+    os_ << "            end_token_ = curr_;\n";
+    os_ << "        }\n";
+    os_ << "    }\n";
+    os_ << '\n';
+
+    if (sm_._seen_EOL_assertion)
+    {
+        os_ << "    const std::size_t EOL_state_ = ptr_[eol_index];\n";
+        os_ << '\n';
+        os_ << "    if (EOL_state_ && curr_ == end_)\n";
+        os_ << "    {\n";
+        os_ << "        ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];\n";
+        os_ << '\n';
+        os_ << "        if (*ptr_)\n";
+        os_ << "        {\n";
+        os_ << "            end_state_ = true;\n";
+        os_ << "            id_ = *(ptr_ + id_index);\n";
+        os_ << "            uid_ = *(ptr_ + unique_id_index);\n";
+
+        if (dfas_ > 1)
+        {
+            os_ << "            end_start_state_ = *(ptr_ + state_index);\n";
+        }
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "            end_bol_ = bol_;\n";
+        }
+
+        os_ << "            end_token_ = curr_;\n";
+        os_ << "        }\n";
+        os_ << "    }\n";
+        os_ << '\n';
+    }
+
+    os_ << "    if (end_state_)\n";
+    os_ << "    {\n";
+    os_ << "        // return longest match\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "        start_state_ = end_start_state_;\n";
+    }
+
+    if (sm_._seen_BOL_assertion && dfas_ < 2)
+    {
+        os_ << "        beg_of_line_ = end_bol_;\n";
+    }
+
+    os_ << "        start_token_ = end_token_;\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << '\n';
+        os_ << "        if (id_ == 0)\n";
+        os_ << "        {\n";
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "            bol_ = end_bol_;\n";
+        }
+
+        os_ << "            goto again;\n";
+        os_ << "        }\n";
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "        else\n";
+            os_ << "        {\n";
+            os_ << "            beg_of_line_ = end_bol_;\n";
+            os_ << "        }\n";
+        }
+    }
+
+    os_ << "    }\n";
+    os_ << "    else\n";
+    os_ << "    {\n";
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "        beg_of_line_ = *start_token_ == '\\n';\n";
+    }
+
+    if (skip_unknown_)
+    {
+        os_ << "        // No match causes char to be skipped\n";
+        os_ << "        ++start_token_;\n";
+    }
+
+    os_ << "        id_ = npos;\n";
+    os_ << "        uid_ = npos;\n";
+    os_ << "    }\n";
+    os_ << '\n';
+    os_ << "    unique_id_ = uid_;\n";
+    os_ << "    return id_;\n";
+    os_ << "}\n";
+    os_ << "\n#endif\n";
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_re2c.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generate_re2c.hpp
new file mode 100644 (file)
index 0000000..8e76fdb
--- /dev/null
@@ -0,0 +1,440 @@
+// generate_re2c.hpp
+// Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef LEXERTL_GENERATE_RE2C_HPP
+#define LEXERTL_GENERATE_RE2C_HPP
+
+#include "char_traits.hpp"
+#include "consts.hpp"
+#include "internals.hpp"
+#include <iostream>
+#include "runtime_error.hpp"
+#include "size_t.hpp"
+#include "state_machine.hpp"
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+// check whether state0_0 is referenced from any of the other states
+template <typename Char>
+bool need_label0_0(boost::lexer::basic_state_machine<Char> const &sm_)
+{
+    typedef typename boost::lexer::basic_state_machine<Char>::iterator
+        iterator_type;
+    iterator_type iter_ = sm_.begin();
+    std::size_t states_ = iter_->states;
+
+    for (std::size_t state_ = 0; state_ < states_; ++state_)
+    {
+        if (0 == iter_->bol_index || 0 == iter_->eol_index)
+        {
+            return true;
+        }
+
+        std::size_t const transitions_ = iter_->transitions;
+        for (std::size_t t_ = 0; t_ < transitions_; ++t_)
+        {
+            if (0 == iter_->goto_state)
+            {
+                return true;
+            }
+            ++iter_;
+        }
+        if (transitions_ == 0) ++iter_;
+    }
+    return false;
+}
+
+template<typename CharT>
+void generate_re2c (const basic_state_machine<CharT> &state_machine_,
+    std::ostream &os_, const bool use_pointers_ = false,
+    const bool skip_unknown_ = true, const bool optimise_parameters_ = true,
+    const char *name_ = "next_token")
+{
+    typedef typename boost::lexer::basic_string_token<CharT> string_token;
+    const detail::internals &sm_ = state_machine_.data ();
+
+    if (sm_._lookup->size () == 0)
+    {
+        throw runtime_error ("Cannot generate code from an empty "
+            "state machine");
+    }
+
+    std::string upper_name_ (__DATE__);
+    const std::size_t lookups_ = sm_._lookup->front ()->size ();
+    typename boost::lexer::basic_state_machine<CharT>::iterator iter_ =
+        state_machine_.begin();
+    typename boost::lexer::basic_state_machine<CharT>::iterator end_ =
+        state_machine_.end();
+    const std::size_t dfas_ = sm_._dfa->size ();
+    std::string::size_type pos_ = upper_name_.find (' ');
+    const char *iterator_ = 0;
+
+    if (use_pointers_)
+    {
+        if (lookups_ == 256)
+        {
+            iterator_ = "const char *";
+        }
+        else
+        {
+            iterator_ = "const wchar_t *";
+        }
+    }
+    else
+    {
+        iterator_ = "Iterator &";
+    }
+
+    while (pos_ != std::string::npos)
+    {
+        upper_name_.replace (pos_, 1, "_");
+        pos_ = upper_name_.find (' ', pos_);
+    }
+
+    upper_name_ += '_';
+    upper_name_ +=  __TIME__;
+
+    pos_ = upper_name_.find (':');
+
+    while (pos_ != std::string::npos)
+    {
+        upper_name_.erase (pos_, 1);
+        pos_ = upper_name_.find (':', pos_);
+    }
+
+    upper_name_ = '_' + upper_name_;
+    upper_name_ = name_ + upper_name_;
+    std::transform (upper_name_.begin (), upper_name_.end (),
+        upper_name_.begin (), ::toupper);
+    os_ << "#ifndef " << upper_name_ + '\n';
+    os_ << "#define " << upper_name_ + '\n';
+    os_ << "// Copyright (c) 2008-2009 Ben Hanson\n";
+    os_ << "//\n";
+    os_ << "// Distributed under the Boost Software License, "
+        "Version 1.0. (See accompanying\n";
+    os_ << "// file licence_1_0.txt or copy at "
+        "http://www.boost.org/LICENSE_1_0.txt)\n\n";
+    os_ << "// Auto-generated by boost::lexer\n";
+    os_ << "template<typename Iterator>\n";
+    os_ << "std::size_t " << name_  << " (";
+
+    if (dfas_ > 1 || !optimise_parameters_)
+    {
+        os_ << "std::size_t &start_state_, ";
+    }
+
+    if (use_pointers_)
+    {
+        os_ << iterator_ << " &";
+    }
+    else
+    {
+        os_ << iterator_;
+    }
+
+    os_ << "start_token_, ";
+
+    if (use_pointers_)
+    {
+        os_ << iterator_ << " const ";
+    }
+    else
+    {
+        os_ << "const " << iterator_;
+    }
+
+    os_ << "end_, \n";
+    os_ << "    std::size_t &unique_id_";
+
+    if (sm_._seen_BOL_assertion || !optimise_parameters_)
+    {
+        os_ << ", bool &beg_of_line_";
+    }
+
+    os_ << ")\n";
+    os_ << "{\n";
+    os_ << "    static const std::size_t npos = static_cast"
+        "<std::size_t>(~0);\n";
+    os_ << "\n    if (start_token_ == end_)\n";
+    os_ << "    {\n";
+    os_ << "        unique_id_ = npos;\n";
+    os_ << "        return 0;\n";
+    os_ << "    }\n\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "again:\n";
+    }
+
+    os_ << "    Iterator curr_ = start_token_;\n";
+    os_ << "    bool end_state_ = false;\n";
+    os_ << "    std::size_t id_ = npos;\n";
+    os_ << "    std::size_t uid_ = npos;\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "    std::size_t end_start_state_ = start_state_;\n";
+    }
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "    bool bol_ = beg_of_line_;\n";
+        os_ << "    bool end_bol_ = bol_;\n";
+    }
+
+    os_ << "    Iterator end_token_ = start_token_;\n";
+    os_ << '\n';
+
+    if (dfas_ > 1)
+    {
+        os_ << "    switch (start_state_)\n";
+        os_ << "    {\n";
+
+        for (std::size_t i_ = 0; i_ < dfas_; ++i_)
+        {
+            os_ << "    case " << i_ << ":\n";
+            os_ << "        goto " << i_ << "_0;\n";
+            os_ << "        // Not needed, but to prevent warnings\n";
+            os_ << "        break;\n";
+        }
+
+        os_ << "    default:\n";
+        os_ << "        throw std::runtime_error (\"Invalid start state!\")\n";
+        os_ << "        break;\n";
+        os_ << "    }\n\n";
+    }
+
+    os_ << "    ";
+
+    if (lookups_ == 256)
+    {
+        os_ << "char";
+    }
+    else
+    {
+        os_ << "wchar_t";
+    }
+
+    os_ << " ch_ = 0;\n\n";
+
+    bool need_state0_0_label = need_label0_0(state_machine_);
+
+    for (std::size_t dfa_ = 0; dfa_ < dfas_; ++dfa_)
+    {
+        const std::size_t states_ = iter_->states;
+
+        for (std::size_t state_ = 0; state_ < states_; ++state_)
+        {
+            const std::size_t transitions_ = iter_->transitions;
+            std::size_t t_ = 0;
+
+            if (dfas_ > 1 || dfa_ != 0 || state_ != 0 || need_state0_0_label)
+            {
+                os_ << "state" << dfa_ << '_' << state_ << ":\n";
+            }
+
+            if (iter_->end_state)
+            {
+                os_ << "    end_state_ = true;\n";
+                os_ << "    id_ = " << iter_->id << ";\n";
+                os_ << "    uid_ = " << iter_->unique_id << ";\n";
+                os_ << "    end_token_ = curr_;\n";
+
+                if (dfas_ > 1)
+                {
+                    os_ << "    end_start_state_ = " << iter_->goto_dfa <<
+                        ";\n";
+                }
+
+                if (sm_._seen_BOL_assertion)
+                {
+                    os_ << "    end_bol_ = bol_;\n";
+                }
+
+                if (transitions_) os_ << '\n';
+            }
+
+            if (t_ < transitions_ || iter_->bol_index != boost::lexer::npos ||
+                iter_->eol_index != boost::lexer::npos)
+            {
+                os_ << "    if (curr_ == end_) goto end;\n\n";
+                os_ << "    ch_ = *curr_;\n";
+
+                if (iter_->bol_index != boost::lexer::npos)
+                {
+                    os_ << "\n    if (bol_) goto state" << dfa_ << '_' <<
+                        iter_->bol_index << ";\n\n";
+                }
+
+                if (iter_->eol_index != boost::lexer::npos)
+                {
+                    os_ << "\n    if (ch_ == '\n') goto state" << dfa_ << '_' <<
+                        iter_->eol_index << ";\n\n";
+                }
+
+                os_ << "    ++curr_;\n";
+            }
+
+            for (; t_ < transitions_; ++t_)
+            {
+                const char *ptr_ = iter_->token._charset.c_str();
+                const char *end_ = ptr_ + iter_->token._charset.size();
+                char start_char_ = 0;
+                char curr_char_ = 0;
+                bool range_ = false;
+                bool first_char_ = true;
+
+                os_ << "\n    if (";
+
+                while (ptr_ != end_)
+                {
+                    curr_char_ = *ptr_++;
+
+                    if (*ptr_ == curr_char_ + 1)
+                    {
+                        if (!range_)
+                        {
+                            start_char_ = curr_char_;
+                        }
+
+                        range_ = true;
+                    }
+                    else
+                    {
+                        if (!first_char_)
+                        {
+                            if (iter_->token._negated)
+                            {
+                                os_ << " && ";
+                            }
+                            else
+                            {
+                                os_ << " || ";
+                            }
+                        }
+
+                        first_char_ = false;
+
+                        if (range_)
+                        {
+                            typename string_token::string temp_;
+
+                            if (iter_->token._negated)
+                            {
+                                os_ << "!";
+                            }
+
+                            string_token::escape_char (start_char_, temp_);
+                            os_ << "(ch_ >= '" << temp_;
+                            temp_.clear ();
+                            string_token::escape_char (curr_char_, temp_);
+                            os_ << "' && ch_ <= '" << temp_ << "')";
+                            range_ = false;
+                        }
+                        else
+                        {
+                            typename string_token::string temp_;
+
+                            os_ << "ch_ ";
+
+                            if (iter_->token._negated)
+                            {
+                                os_ << "!=";
+                            }
+                            else
+                            {
+                                os_ << "==";
+                            }
+
+                            string_token::escape_char (curr_char_, temp_);
+                            os_ << " '" << temp_ << "'";
+                        }
+                    }
+                }
+
+                os_ << ") goto state" << dfa_ << '_' << iter_->goto_state <<
+                    ";\n\n";
+                ++iter_;
+            }
+
+            if (!(dfa_ == dfas_ - 1 && state_ == states_ - 1))
+            {
+                os_ << "    goto end;\n";
+            }
+
+            if (transitions_ == 0) ++iter_;
+        }
+    }
+
+    os_ << "end:\n";
+    os_ << "    if (end_state_)\n";
+    os_ << "    {\n";
+    os_ << "        // return longest match\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << "        start_state_ = end_start_state_;\n";
+    }
+
+    if (sm_._seen_BOL_assertion && dfas_ < 2)
+    {
+        os_ << "        beg_of_line_ = end_bol_;\n";
+    }
+
+    os_ << "        start_token_ = end_token_;\n";
+
+    if (dfas_ > 1)
+    {
+        os_ << '\n';
+        os_ << "        if (id_ == 0)\n";
+        os_ << "        {\n";
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "            bol_ = end_bol_;\n";
+        }
+
+        os_ << "            goto again;\n";
+        os_ << "        }\n";
+
+        if (sm_._seen_BOL_assertion)
+        {
+            os_ << "        else\n";
+            os_ << "        {\n";
+            os_ << "            beg_of_line_ = end_bol_;\n";
+            os_ << "        }\n";
+        }
+    }
+
+    os_ << "    }\n";
+    os_ << "    else\n";
+    os_ << "    {\n";
+
+    if (sm_._seen_BOL_assertion)
+    {
+        os_ << "        beg_of_line_ = *start_token_ == '\\n';\n";
+    }
+
+    if (skip_unknown_)
+    {
+        os_ << "        // No match causes char to be skipped\n";
+        os_ << "        ++start_token_;\n";
+    }
+
+    os_ << "        id_ = npos;\n";
+    os_ << "        uid_ = npos;\n";
+    os_ << "    }\n";
+    os_ << '\n';
+    os_ << "    unique_id_ = uid_;\n";
+    os_ << "    return id_;\n";
+    os_ << "}\n";
+    os_ << "\n#endif\n";
+}
+}
+}
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/generator.hpp
new file mode 100644 (file)
index 0000000..daa06e7
--- /dev/null
@@ -0,0 +1,864 @@
+// generator.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_GENERATOR_HPP
+#define BOOST_LEXER_GENERATOR_HPP
+
+#include "char_traits.hpp"
+// memcmp()
+#include <cstring>
+#include "partition/charset.hpp"
+#include "partition/equivset.hpp"
+#include <memory>
+#include <limits>
+#include "parser/tree/node.hpp"
+#include "parser/parser.hpp"
+#include "containers/ptr_list.hpp"
+#include "rules.hpp"
+#include "state_machine.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT, typename Traits = char_traits<CharT> >
+class basic_generator
+{
+public:
+    typedef typename detail::internals::size_t_vector size_t_vector;
+    typedef basic_rules<CharT> rules;
+
+    static void build (const rules &rules_,
+        basic_state_machine<CharT> &state_machine_)
+    {
+        std::size_t index_ = 0;
+        std::size_t size_ = rules_.statemap ().size ();
+        node_ptr_vector node_ptr_vector_;
+        detail::internals &internals_ = const_cast<detail::internals &>
+            (state_machine_.data ());
+        bool seen_BOL_assertion_ = false;
+        bool seen_EOL_assertion_ = false;
+
+        state_machine_.clear ();
+
+        for (; index_ < size_; ++index_)
+        {
+            internals_._lookup->push_back (static_cast<size_t_vector *>(0));
+            internals_._lookup->back () = new size_t_vector;
+            internals_._dfa_alphabet.push_back (0);
+            internals_._dfa->push_back (static_cast<size_t_vector *>(0));
+            internals_._dfa->back () = new size_t_vector;
+        }
+
+        for (index_ = 0, size_ = internals_._lookup->size ();
+            index_ < size_; ++index_)
+        {
+            internals_._lookup[index_]->resize (sizeof (CharT) == 1 ?
+                num_chars : num_wchar_ts, dead_state_index);
+
+            if (!rules_.regexes ()[index_].empty ())
+            {
+                // vector mapping token indexes to partitioned token index sets
+                index_set_vector set_mapping_;
+                // syntax tree
+                detail::node *root_ = build_tree (rules_, index_,
+                    node_ptr_vector_, internals_, set_mapping_);
+
+                build_dfa (root_, set_mapping_,
+                    internals_._dfa_alphabet[index_],
+                    *internals_._dfa[index_]);
+
+                if (internals_._seen_BOL_assertion)
+                {
+                    seen_BOL_assertion_ = true;
+                }
+
+                if (internals_._seen_EOL_assertion)
+                {
+                    seen_EOL_assertion_ = true;
+                }
+
+                internals_._seen_BOL_assertion = false;
+                internals_._seen_EOL_assertion = false;
+            }
+        }
+
+        internals_._seen_BOL_assertion = seen_BOL_assertion_;
+        internals_._seen_EOL_assertion = seen_EOL_assertion_;
+    }
+
+    static void minimise (basic_state_machine<CharT> &state_machine_)
+    {
+        detail::internals &internals_ = const_cast<detail::internals &>
+            (state_machine_.data ());
+        const std::size_t machines_ = internals_._dfa->size ();
+
+        for (std::size_t i_ = 0; i_ < machines_; ++i_)
+        {
+            const std::size_t dfa_alphabet_ = internals_._dfa_alphabet[i_];
+            size_t_vector *dfa_ = internals_._dfa[i_];
+
+            if (dfa_alphabet_ != 0)
+            {
+                std::size_t size_ = 0;
+
+                do
+                {
+                    size_ = dfa_->size ();
+                    minimise_dfa (dfa_alphabet_, *dfa_, size_);
+                } while (dfa_->size () != size_);
+            }
+        }
+    }
+
+protected:
+    typedef detail::basic_charset<CharT> charset;
+    typedef detail::ptr_list<charset> charset_list;
+    typedef std::auto_ptr<charset> charset_ptr;
+    typedef detail::equivset equivset;
+    typedef detail::ptr_list<equivset> equivset_list;
+    typedef std::auto_ptr<equivset> equivset_ptr;
+    typedef typename charset::index_set index_set;
+    typedef std::vector<index_set> index_set_vector;
+    typedef detail::basic_parser<CharT> parser;
+    typedef typename parser::node_ptr_vector node_ptr_vector;
+    typedef std::set<const detail::node *> node_set;
+    typedef detail::ptr_vector<node_set> node_set_vector;
+    typedef std::vector<const detail::node *> node_vector;
+    typedef detail::ptr_vector<node_vector> node_vector_vector;
+    typedef typename parser::string string;
+    typedef std::pair<string, string> string_pair;
+    typedef typename parser::tokeniser::string_token string_token;
+    typedef std::deque<string_pair> macro_deque;
+    typedef std::pair<string, const detail::node *> macro_pair;
+    typedef typename parser::macro_map::iterator macro_iter;
+    typedef std::pair<macro_iter, bool> macro_iter_pair;
+    typedef typename parser::tokeniser::token_map token_map;
+
+    static detail::node *build_tree (const rules &rules_,
+        const std::size_t state_, node_ptr_vector &node_ptr_vector_,
+        detail::internals &internals_, index_set_vector &set_mapping_)
+    {
+        size_t_vector *lookup_ = internals_._lookup[state_];
+        const typename rules::string_deque_deque &regexes_ =
+            rules_.regexes ();
+        const typename rules::id_vector_deque &ids_ = rules_.ids ();
+        const typename rules::id_vector_deque &unique_ids_ =
+            rules_.unique_ids ();
+        const typename rules::id_vector_deque &states_ = rules_.states ();
+        typename rules::string_deque::const_iterator regex_iter_ =
+            regexes_[state_].begin ();
+        typename rules::string_deque::const_iterator regex_iter_end_ =
+            regexes_[state_].end ();
+        typename rules::id_vector::const_iterator ids_iter_ =
+            ids_[state_].begin ();
+        typename rules::id_vector::const_iterator unique_ids_iter_ =
+            unique_ids_[state_].begin ();
+        typename rules::id_vector::const_iterator states_iter_ =
+            states_[state_].begin ();
+        const typename rules::string &regex_ = *regex_iter_;
+        // map of regex charset tokens (strings) to index
+        token_map token_map_;
+        const typename rules::string_pair_deque &macrodeque_ =
+            rules_.macrodeque ();
+        typename parser::macro_map macromap_;
+        typename detail::node::node_vector tree_vector_;
+
+        build_macros (token_map_, macrodeque_, macromap_,
+            rules_.flags (), rules_.locale (), node_ptr_vector_,
+            internals_._seen_BOL_assertion, internals_._seen_EOL_assertion);
+
+        detail::node *root_ = parser::parse (regex_.c_str (),
+            regex_.c_str () + regex_.size (), *ids_iter_, *unique_ids_iter_,
+            *states_iter_, rules_.flags (), rules_.locale (), node_ptr_vector_,
+            macromap_, token_map_, internals_._seen_BOL_assertion,
+            internals_._seen_EOL_assertion);
+
+        ++regex_iter_;
+        ++ids_iter_;
+        ++unique_ids_iter_;
+        ++states_iter_;
+        tree_vector_.push_back (root_);
+
+        // build syntax trees
+        while (regex_iter_ != regex_iter_end_)
+        {
+            // re-declare var, otherwise we perform an assignment..!
+            const typename rules::string &regex2_ = *regex_iter_;
+
+            root_ = parser::parse (regex2_.c_str (),
+                regex2_.c_str () + regex2_.size (), *ids_iter_,
+                *unique_ids_iter_, *states_iter_, rules_.flags (),
+                rules_.locale (), node_ptr_vector_, macromap_, token_map_,
+                internals_._seen_BOL_assertion,
+                internals_._seen_EOL_assertion);
+            tree_vector_.push_back (root_);
+            ++regex_iter_;
+            ++ids_iter_;
+            ++unique_ids_iter_;
+            ++states_iter_;
+        }
+
+        if (internals_._seen_BOL_assertion)
+        {
+            // Fixup BOLs
+            typename detail::node::node_vector::iterator iter_ =
+                tree_vector_.begin ();
+            typename detail::node::node_vector::iterator end_ =
+                tree_vector_.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                fixup_bol (*iter_, node_ptr_vector_);
+            }
+        }
+
+        // join trees
+        {
+            typename detail::node::node_vector::iterator iter_ =
+                tree_vector_.begin ();
+            typename detail::node::node_vector::iterator end_ =
+                tree_vector_.end ();
+
+            if (iter_ != end_)
+            {
+                root_ = *iter_;
+                ++iter_;
+            }
+
+            for (; iter_ != end_; ++iter_)
+            {
+                node_ptr_vector_->push_back (static_cast<detail::selection_node *>(0));
+                node_ptr_vector_->back () = new detail::selection_node
+                    (root_, *iter_);
+                root_ = node_ptr_vector_->back ();
+            }
+        }
+
+        // partitioned token list
+        charset_list token_list_;
+
+        set_mapping_.resize (token_map_.size ());
+        partition_tokens (token_map_, token_list_);
+
+        typename charset_list::list::const_iterator iter_ =
+            token_list_->begin ();
+        typename charset_list::list::const_iterator end_ =
+            token_list_->end ();
+        std::size_t index_ = 0;
+
+        for (; iter_ != end_; ++iter_, ++index_)
+        {
+            const charset *cs_ = *iter_;
+            typename charset::index_set::const_iterator set_iter_ =
+                cs_->_index_set.begin ();
+            typename charset::index_set::const_iterator set_end_ =
+                cs_->_index_set.end ();
+
+            fill_lookup (cs_->_token, lookup_, index_);
+
+            for (; set_iter_ != set_end_; ++set_iter_)
+            {
+                set_mapping_[*set_iter_].insert (index_);
+            }
+        }
+
+        internals_._dfa_alphabet[state_] = token_list_->size () + dfa_offset;
+        return root_;
+    }
+
+    static void build_macros (token_map &token_map_,
+        const macro_deque &macrodeque_,
+        typename parser::macro_map &macromap_, const regex_flags flags_,
+        const std::locale &locale_, node_ptr_vector &node_ptr_vector_,
+        bool &seen_BOL_assertion_, bool &seen_EOL_assertion_)
+    {
+        for (typename macro_deque::const_iterator iter_ =
+            macrodeque_.begin (), end_ = macrodeque_.end ();
+            iter_ != end_; ++iter_)
+        {
+            const typename rules::string &name_ = iter_->first;
+            const typename rules::string &regex_ = iter_->second;
+            detail::node *node_ = parser::parse (regex_.c_str (),
+                regex_.c_str () + regex_.size (), 0, 0, 0, flags_,
+                locale_, node_ptr_vector_, macromap_, token_map_,
+                seen_BOL_assertion_, seen_EOL_assertion_);
+            macro_iter_pair map_iter_ = macromap_.
+                insert (macro_pair (name_, static_cast<const detail::node *>
+                (0)));
+
+            map_iter_.first->second = node_;
+        }
+    }
+
+    static void build_dfa (detail::node *root_,
+        const index_set_vector &set_mapping_, const std::size_t dfa_alphabet_,
+        size_t_vector &dfa_)
+    {
+        typename detail::node::node_vector *followpos_ =
+            &root_->firstpos ();
+        node_set_vector seen_sets_;
+        node_vector_vector seen_vectors_;
+        size_t_vector hash_vector_;
+
+        // 'jam' state
+        dfa_.resize (dfa_alphabet_, 0);
+        closure (followpos_, seen_sets_, seen_vectors_,
+            hash_vector_, dfa_alphabet_, dfa_);
+
+        std::size_t *ptr_ = 0;
+
+        for (std::size_t index_ = 0; index_ < seen_vectors_->size (); ++index_)
+        {
+            equivset_list equiv_list_;
+
+            build_equiv_list (seen_vectors_[index_], set_mapping_, equiv_list_);
+
+            for (typename equivset_list::list::const_iterator iter_ =
+                equiv_list_->begin (), end_ = equiv_list_->end ();
+                iter_ != end_; ++iter_)
+            {
+                equivset *equivset_ = *iter_;
+                const std::size_t transition_ = closure
+                    (&equivset_->_followpos, seen_sets_, seen_vectors_,
+                    hash_vector_, dfa_alphabet_, dfa_);
+
+                if (transition_ != npos)
+                {
+                    ptr_ = &dfa_.front () + ((index_ + 1) * dfa_alphabet_);
+
+                    // Prune abstemious transitions from end states.
+                    if (*ptr_ && !equivset_->_greedy) continue;
+
+                    for (typename detail::equivset::index_vector::const_iterator
+                        equiv_iter_ = equivset_->_index_vector.begin (),
+                        equiv_end_ = equivset_->_index_vector.end ();
+                        equiv_iter_ != equiv_end_; ++equiv_iter_)
+                    {
+                        const std::size_t equiv_index_ = *equiv_iter_;
+
+                        if (equiv_index_ == bol_token)
+                        {
+                            if (ptr_[eol_index] == 0)
+                            {
+                                ptr_[bol_index] = transition_;
+                            }
+                        }
+                        else if (equiv_index_ == eol_token)
+                        {
+                            if (ptr_[bol_index] == 0)
+                            {
+                                ptr_[eol_index] = transition_;
+                            }
+                        }
+                        else
+                        {
+                            ptr_[equiv_index_ + dfa_offset] = transition_;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    static std::size_t closure (typename detail::node::node_vector *followpos_,
+        node_set_vector &seen_sets_, node_vector_vector &seen_vectors_,
+        size_t_vector &hash_vector_, const std::size_t size_,
+        size_t_vector &dfa_)
+    {
+        bool end_state_ = false;
+        std::size_t id_ = 0;
+        std::size_t unique_id_ = npos;
+        std::size_t state_ = 0;
+        std::size_t hash_ = 0;
+
+        if (followpos_->empty ()) return npos;
+
+        std::size_t index_ = 0;
+        std::auto_ptr<node_set> set_ptr_ (new node_set);
+        std::auto_ptr<node_vector> vector_ptr_ (new node_vector);
+
+        for (typename detail::node::node_vector::const_iterator iter_ =
+            followpos_->begin (), end_ = followpos_->end ();
+            iter_ != end_; ++iter_)
+        {
+            closure_ex (*iter_, end_state_, id_, unique_id_, state_,
+                set_ptr_.get (), vector_ptr_.get (), hash_);
+        }
+
+        bool found_ = false;
+        typename size_t_vector::const_iterator hash_iter_ =
+            hash_vector_.begin ();
+        typename size_t_vector::const_iterator hash_end_ =
+            hash_vector_.end ();
+        typename node_set_vector::vector::const_iterator set_iter_ =
+            seen_sets_->begin ();
+
+        for (; hash_iter_ != hash_end_; ++hash_iter_, ++set_iter_)
+        {
+            found_ = *hash_iter_ == hash_ && *(*set_iter_) == *set_ptr_;
+            ++index_;
+
+            if (found_) break;
+        }
+
+        if (!found_)
+        {
+            seen_sets_->push_back (static_cast<node_set *>(0));
+            seen_sets_->back () = set_ptr_.release ();
+            seen_vectors_->push_back (static_cast<node_vector *>(0));
+            seen_vectors_->back () = vector_ptr_.release ();
+            hash_vector_.push_back (hash_);
+            // State 0 is the jam state...
+            index_ = seen_sets_->size ();
+
+            const std::size_t old_size_ = dfa_.size ();
+
+            dfa_.resize (old_size_ + size_, 0);
+
+            if (end_state_)
+            {
+                dfa_[old_size_] |= end_state;
+                dfa_[old_size_ + id_index] = id_;
+                dfa_[old_size_ + unique_id_index] = unique_id_;
+                dfa_[old_size_ + state_index] = state_;
+            }
+        }
+
+        return index_;
+    }
+
+    static void closure_ex (detail::node *node_, bool &end_state_,
+        std::size_t &id_, std::size_t &unique_id_, std::size_t &state_,
+        node_set *set_ptr_, node_vector *vector_ptr_, std::size_t &hash_)
+    {
+        const bool temp_end_state_ = node_->end_state ();
+
+        if (temp_end_state_)
+        {
+            if (!end_state_)
+            {
+                end_state_ = true;
+                id_ = node_->id ();
+                unique_id_ = node_->unique_id ();
+                state_ = node_->lexer_state ();
+            }
+        }
+
+        if (set_ptr_->insert (node_).second)
+        {
+            vector_ptr_->push_back (node_);
+            hash_ += reinterpret_cast<std::size_t> (node_);
+        }
+    }
+
+    static void partition_tokens (const token_map &map_,
+        charset_list &lhs_)
+    {
+        charset_list rhs_;
+
+        fill_rhs_list (map_, rhs_);
+
+        if (!rhs_->empty ())
+        {
+            typename charset_list::list::iterator iter_;
+            typename charset_list::list::iterator end_;
+            charset_ptr overlap_ (new charset);
+
+            lhs_->push_back (static_cast<charset *>(0));
+            lhs_->back () = rhs_->front ();
+            rhs_->pop_front ();
+
+            while (!rhs_->empty ())
+            {
+                charset_ptr r_ (rhs_->front ());
+
+                rhs_->pop_front ();
+                iter_ = lhs_->begin ();
+                end_ = lhs_->end ();
+
+                while (!r_->empty () && iter_ != end_)
+                {
+                    typename charset_list::list::iterator l_iter_ = iter_;
+
+                    (*l_iter_)->intersect (*r_.get (), *overlap_.get ());
+
+                    if (overlap_->empty ())
+                    {
+                        ++iter_;
+                    }
+                    else if ((*l_iter_)->empty ())
+                    {
+                        delete *l_iter_;
+                        *l_iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                    }
+                    else if (r_->empty ())
+                    {
+                        delete r_.release ();
+                        r_ = overlap_;
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        break;
+                    }
+                    else
+                    {
+                        iter_ = lhs_->insert (++iter_,
+                            static_cast<charset *>(0));
+                        *iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        charset_ptr temp_overlap_ (new charset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                        end_ = lhs_->end ();
+                    }
+                }
+
+                if (!r_->empty ())
+                {
+                    lhs_->push_back (static_cast<charset *>(0));
+                    lhs_->back () = r_.release ();
+                }
+            }
+        }
+    }
+
+    static void fill_rhs_list (const token_map &map_,
+        charset_list &list_)
+    {
+        typename parser::tokeniser::token_map::const_iterator iter_ =
+            map_.begin ();
+        typename parser::tokeniser::token_map::const_iterator end_ =
+            map_.end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            list_->push_back (static_cast<charset *>(0));
+            list_->back () = new charset (iter_->first, iter_->second);
+        }
+    }
+
+    static void fill_lookup (const string_token &token_,
+        size_t_vector *lookup_, const std::size_t index_)
+    {
+        const CharT *curr_ = token_._charset.c_str ();
+        const CharT *chars_end_ = curr_ + token_._charset.size ();
+        std::size_t *ptr_ = &lookup_->front ();
+        const std::size_t max_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+
+        if (token_._negated)
+        {
+            // $$$ FIXME JDG July 2014 $$$
+            // this code is problematic on platforms where wchar_t is signed
+            // with min generating negative numbers. This crashes with BAD_ACCESS
+            // because of the vector index below:
+            //  ptr_[static_cast<typename Traits::index_type>(curr_char_)]
+            CharT curr_char_ = 0; // (std::numeric_limits<CharT>::min)();
+            std::size_t i_ = 0;
+
+            while (curr_ < chars_end_)
+            {
+                while (*curr_ > curr_char_)
+                {
+                    ptr_[static_cast<typename Traits::index_type>
+                        (curr_char_)] = index_ + dfa_offset;
+                    ++curr_char_;
+                    ++i_;
+                }
+
+                ++curr_char_;
+                ++curr_;
+                ++i_;
+            }
+
+            for (; i_ < max_; ++i_)
+            {
+                ptr_[static_cast<typename Traits::index_type>(curr_char_)] =
+                    index_ + dfa_offset;
+                ++curr_char_;
+            }
+        }
+        else
+        {
+            while (curr_ < chars_end_)
+            {
+                ptr_[static_cast<typename Traits::index_type>(*curr_)] =
+                    index_ + dfa_offset;
+                ++curr_;
+            }
+        }
+    }
+
+    static void build_equiv_list (const node_vector *vector_,
+        const index_set_vector &set_mapping_, equivset_list &lhs_)
+    {
+        equivset_list rhs_;
+
+        fill_rhs_list (vector_, set_mapping_, rhs_);
+
+        if (!rhs_->empty ())
+        {
+            typename equivset_list::list::iterator iter_;
+            typename equivset_list::list::iterator end_;
+            equivset_ptr overlap_ (new equivset);
+
+            lhs_->push_back (static_cast<equivset *>(0));
+            lhs_->back () = rhs_->front ();
+            rhs_->pop_front ();
+
+            while (!rhs_->empty ())
+            {
+                equivset_ptr r_ (rhs_->front ());
+
+                rhs_->pop_front ();
+                iter_ = lhs_->begin ();
+                end_ = lhs_->end ();
+
+                while (!r_->empty () && iter_ != end_)
+                {
+                    typename equivset_list::list::iterator l_iter_ = iter_;
+
+                    (*l_iter_)->intersect (*r_.get (), *overlap_.get ());
+
+                    if (overlap_->empty ())
+                    {
+                        ++iter_;
+                    }
+                    else if ((*l_iter_)->empty ())
+                    {
+                        delete *l_iter_;
+                        *l_iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                    }
+                    else if (r_->empty ())
+                    {
+                        delete r_.release ();
+                        r_ = overlap_;
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        break;
+                    }
+                    else
+                    {
+                        iter_ = lhs_->insert (++iter_,
+                            static_cast<equivset *>(0));
+                        *iter_ = overlap_.release ();
+
+                        // VC++ 6 Hack:
+                        equivset_ptr temp_overlap_ (new equivset);
+
+                        overlap_ = temp_overlap_;
+                        ++iter_;
+                        end_ = lhs_->end ();
+                    }
+                }
+
+                if (!r_->empty ())
+                {
+                    lhs_->push_back (static_cast<equivset *>(0));
+                    lhs_->back () = r_.release ();
+                }
+            }
+        }
+    }
+
+    static void fill_rhs_list (const node_vector *vector_,
+        const index_set_vector &set_mapping_, equivset_list &list_)
+    {
+        typename node_vector::const_iterator iter_ =
+            vector_->begin ();
+        typename node_vector::const_iterator end_ =
+            vector_->end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            const detail::node *node_ = *iter_;
+
+            if (!node_->end_state ())
+            {
+                const std::size_t token_ = node_->token ();
+
+                if (token_ != null_token)
+                {
+                    list_->push_back (static_cast<equivset *>(0));
+
+                    if (token_ == bol_token || token_ == eol_token)
+                    {
+                        std::set<std::size_t> index_set_;
+
+                        index_set_.insert (token_);
+                        list_->back () = new equivset (index_set_,
+                            node_->greedy (), token_, node_->followpos ());
+                    }
+                    else
+                    {
+                        list_->back () = new equivset (set_mapping_[token_],
+                            node_->greedy (), token_, node_->followpos ());
+                    }
+                }
+            }
+        }
+    }
+
+    static void fixup_bol (detail::node * &root_,
+        node_ptr_vector &node_ptr_vector_)
+    {
+        typename detail::node::node_vector *first_ = &root_->firstpos ();
+        bool found_ = false;
+        typename detail::node::node_vector::const_iterator iter_ =
+            first_->begin ();
+        typename detail::node::node_vector::const_iterator end_ =
+            first_->end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            const detail::node *node_ = *iter_;
+
+            found_ = !node_->end_state () && node_->token () == bol_token;
+
+            if (found_) break;
+        }
+
+        if (!found_)
+        {
+            node_ptr_vector_->push_back (static_cast<detail::leaf_node *>(0));
+            node_ptr_vector_->back () = new detail::leaf_node
+                (bol_token, true);
+
+            detail::node *lhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back (static_cast<detail::leaf_node *>(0));
+            node_ptr_vector_->back () = new detail::leaf_node
+                (null_token, true);
+
+            detail::node *rhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back
+                (static_cast<detail::selection_node *>(0));
+            node_ptr_vector_->back () =
+                new detail::selection_node (lhs_, rhs_);
+            lhs_ = node_ptr_vector_->back ();
+
+            node_ptr_vector_->push_back
+                (static_cast<detail::sequence_node *>(0));
+            node_ptr_vector_->back () =
+                new detail::sequence_node (lhs_, root_);
+            root_ = node_ptr_vector_->back ();
+        }
+    }
+
+    static void minimise_dfa (const std::size_t dfa_alphabet_,
+        size_t_vector &dfa_, std::size_t size_)
+    {
+        const std::size_t *first_ = &dfa_.front ();
+        const std::size_t *second_ = 0;
+        const std::size_t *end_ = first_ + size_;
+        std::size_t index_ = 1;
+        std::size_t new_index_ = 1;
+        std::size_t curr_index_ = 0;
+        index_set index_set_;
+        size_t_vector lookup_;
+        std::size_t *lookup_ptr_ = 0;
+
+        lookup_.resize (size_ / dfa_alphabet_, null_token);
+        lookup_ptr_ = &lookup_.front ();
+        *lookup_ptr_ = 0;
+        // Only one 'jam' state, so skip it.
+        first_ += dfa_alphabet_;
+
+        for (; first_ < end_; first_ += dfa_alphabet_, ++index_)
+        {
+            for (second_ = first_ + dfa_alphabet_, curr_index_ = index_ + 1;
+                second_ < end_; second_ += dfa_alphabet_, ++curr_index_)
+            {
+                if (index_set_.find (curr_index_) != index_set_.end ())
+                {
+                    continue;
+                }
+
+                // Some systems have memcmp in namespace std.
+                using namespace std;
+
+                if (memcmp (first_, second_, sizeof (std::size_t) *
+                    dfa_alphabet_) == 0)
+                {
+                    index_set_.insert (curr_index_);
+                    lookup_ptr_[curr_index_] = new_index_;
+                }
+            }
+
+            if (lookup_ptr_[index_] == null_token)
+            {
+                lookup_ptr_[index_] = new_index_;
+                ++new_index_;
+            }
+        }
+
+        if (!index_set_.empty ())
+        {
+            const std::size_t *front_ = &dfa_.front ();
+            size_t_vector new_dfa_ (front_, front_ + dfa_alphabet_);
+            typename index_set::iterator set_end_ =
+                index_set_.end ();
+            const std::size_t *ptr_ = front_ + dfa_alphabet_;
+            std::size_t *new_ptr_ = 0;
+
+            new_dfa_.resize (size_ - index_set_.size () * dfa_alphabet_, 0);
+            new_ptr_ = &new_dfa_.front () + dfa_alphabet_;
+            size_ /= dfa_alphabet_;
+
+            for (index_ = 1; index_ < size_; ++index_)
+            {
+                if (index_set_.find (index_) != set_end_)
+                {
+                    ptr_ += dfa_alphabet_;
+                    continue;
+                }
+
+                new_ptr_[end_state_index] = ptr_[end_state_index];
+                new_ptr_[id_index] = ptr_[id_index];
+                new_ptr_[unique_id_index] = ptr_[unique_id_index];
+                new_ptr_[state_index] = ptr_[state_index];
+                new_ptr_[bol_index] = lookup_ptr_[ptr_[bol_index]];
+                new_ptr_[eol_index] = lookup_ptr_[ptr_[eol_index]];
+                new_ptr_ += dfa_offset;
+                ptr_ += dfa_offset;
+
+                for (std::size_t i_ = dfa_offset; i_ < dfa_alphabet_; ++i_)
+                {
+                    *new_ptr_++ = lookup_ptr_[*ptr_++];
+                }
+            }
+
+            dfa_.swap (new_dfa_);
+        }
+    }
+};
+
+typedef basic_generator<char> generator;
+typedef basic_generator<wchar_t> wgenerator;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/input.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/input.hpp
new file mode 100644 (file)
index 0000000..e0a5ecc
--- /dev/null
@@ -0,0 +1,529 @@
+// input.hpp
+// Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_INPUT
+#define BOOST_LEXER_INPUT
+
+#include "char_traits.hpp"
+#include <boost/detail/iterator.hpp>
+#include "size_t.hpp"
+#include "state_machine.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+template<typename FwdIter, typename Traits =
+    char_traits<typename boost::detail::iterator_traits<FwdIter>::value_type> >
+class basic_input
+{
+public:
+    class iterator
+    {
+    public:
+        friend class basic_input;
+
+        struct data
+        {
+            std::size_t id;
+            std::size_t unique_id;
+            FwdIter start;
+            FwdIter end;
+            bool bol;
+            std::size_t state;
+
+            // Construct in end() state.
+            data () :
+                id (0),
+                unique_id (npos),
+                bol (false),
+                state (npos)
+            {
+            }
+
+            bool operator == (const data &rhs_) const
+            {
+                return id == rhs_.id && unique_id == rhs_.unique_id &&
+                    start == rhs_.start && end == rhs_.end &&
+                    bol == rhs_.bol && state == rhs_.state;
+            }
+        };
+
+        iterator () :
+            _input (0)
+        {
+        }
+
+        bool operator == (const iterator &rhs_) const
+        {
+            return _data == rhs_._data;
+        }
+
+        bool operator != (const iterator &rhs_) const
+        {
+            return !(*this == rhs_);
+        }
+
+        data &operator * ()
+        {
+            return _data;
+        }
+
+        data *operator -> ()
+        {
+            return &_data;
+        }
+
+        // Let compiler generate operator = ().
+
+        // prefix version
+        iterator &operator ++ ()
+        {
+            next_token ();
+            return *this;
+        }
+
+        // postfix version
+        iterator operator ++ (int)
+        {
+            iterator iter_ = *this;
+
+            next_token ();
+            return iter_;
+        }
+
+    private:
+        // Not owner (obviously!)
+        const basic_input *_input;
+        data _data;
+
+        void next_token ()
+        {
+            const detail::internals &internals_ =
+                _input->_state_machine->data ();
+
+            _data.start = _data.end;
+
+            if (internals_._dfa->size () == 1)
+            {
+                if (internals_._seen_BOL_assertion ||
+                    internals_._seen_EOL_assertion)
+                {
+                    _data.id = next
+                        (&internals_._lookup->front ()->front (),
+                        internals_._dfa_alphabet.front (),
+                        &internals_._dfa->front ()->front (),
+                        _data.bol, _data.end, _input->_end, _data.unique_id);
+                }
+                else
+                {
+                    _data.id = next (&internals_._lookup->front ()->front (),
+                        internals_._dfa_alphabet.front (), &internals_.
+                        _dfa->front ()->front (), _data.end, _input->_end,
+                        _data.unique_id);
+                }
+            }
+            else
+            {
+                if (internals_._seen_BOL_assertion ||
+                    internals_._seen_EOL_assertion)
+                {
+                    _data.id = next (internals_, _data.state,
+                        _data.bol, _data.end, _input->_end, _data.unique_id);
+                }
+                else
+                {
+                    _data.id = next (internals_, _data.state,
+                        _data.end, _input->_end, _data.unique_id);
+                }
+            }
+
+            if (_data.end == _input->_end && _data.start == _data.end)
+            {
+                // Ensure current state matches that returned by end().
+                _data.state = npos;
+            }
+        }
+
+        std::size_t next (const detail::internals &internals_,
+            std::size_t &start_state_, bool bol_,
+            FwdIter &start_token_, const FwdIter &end_,
+            std::size_t &unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = npos;
+                return 0;
+            }
+
+        again:
+            const std::size_t * lookup_ = &internals_._lookup[start_state_]->
+                front ();
+            std::size_t dfa_alphabet_ = internals_._dfa_alphabet[start_state_];
+            const std::size_t *dfa_ = &internals_._dfa[start_state_]->front ();
+            const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+            FwdIter curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + id_index);
+            std::size_t uid_ = *(ptr_ + unique_id_index);
+            std::size_t end_start_state_ = start_state_;
+            bool end_bol_ = bol_;
+            FwdIter end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                const std::size_t BOL_state_ = ptr_[bol_index];
+                const std::size_t EOL_state_ = ptr_[eol_index];
+
+                if (BOL_state_ && bol_)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typename Traits::char_type prev_char_ = *curr_++;
+
+                    bol_ = prev_char_ == '\n';
+
+                    const std::size_t state_ =
+                        ptr_[lookup_[static_cast<typename Traits::index_type>
+                        (prev_char_)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_start_state_ = *(ptr_ + state_index);
+                    end_bol_ = bol_;
+                    end_token_ = curr_;
+                }
+            }
+
+            const std::size_t EOL_state_ = ptr_[eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_start_state_ = *(ptr_ + state_index);
+                    end_bol_ = bol_;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_)
+            {
+                // return longest match
+                start_state_ = end_start_state_;
+                start_token_ = end_token_;
+
+                if (id_ == 0)
+                {
+                    bol_ = end_bol_;
+                    goto again;
+                }
+                else
+                {
+                    _data.bol = end_bol_;
+                }
+            }
+            else
+            {
+                // No match causes char to be skipped
+                _data.bol = *start_token_ == '\n';
+                ++start_token_;
+                id_ = npos;
+                uid_ = npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+
+        std::size_t next (const detail::internals &internals_,
+            std::size_t &start_state_, FwdIter &start_token_,
+            FwdIter const &end_, std::size_t &unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = npos;
+                return 0;
+            }
+
+        again:
+            const std::size_t * lookup_ = &internals_._lookup[start_state_]->
+                front ();
+            std::size_t dfa_alphabet_ = internals_._dfa_alphabet[start_state_];
+            const std::size_t *dfa_ = &internals_._dfa[start_state_]->front ();
+            const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+            FwdIter curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + id_index);
+            std::size_t uid_ = *(ptr_ + unique_id_index);
+            std::size_t end_start_state_ = start_state_;
+            FwdIter end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                const std::size_t state_ = ptr_[lookup_[static_cast
+                    <typename Traits::index_type>(*curr_++)]];
+
+                if (state_ == 0)
+                {
+                    break;
+                }
+
+                ptr_ = &dfa_[state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_start_state_ = *(ptr_ + state_index);
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_)
+            {
+                // return longest match
+                start_state_ = end_start_state_;
+                start_token_ = end_token_;
+
+                if (id_ == 0) goto again;
+            }
+            else
+            {
+                // No match causes char to be skipped
+                ++start_token_;
+                id_ = npos;
+                uid_ = npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+
+        std::size_t next (const std::size_t * const lookup_,
+            const std::size_t dfa_alphabet_, const std::size_t * const dfa_,
+            bool bol_, FwdIter &start_token_, FwdIter const &end_,
+            std::size_t &unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = npos;
+                return 0;
+            }
+
+            const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+            FwdIter curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + id_index);
+            std::size_t uid_ = *(ptr_ + unique_id_index);
+            bool end_bol_ = bol_;
+            FwdIter end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                const std::size_t BOL_state_ = ptr_[bol_index];
+                const std::size_t EOL_state_ = ptr_[eol_index];
+
+                if (BOL_state_ && bol_)
+                {
+                    ptr_ = &dfa_[BOL_state_ * dfa_alphabet_];
+                }
+                else if (EOL_state_ && *curr_ == '\n')
+                {
+                    ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+                }
+                else
+                {
+                    typename Traits::char_type prev_char_ = *curr_++;
+
+                    bol_ = prev_char_ == '\n';
+
+                    const std::size_t state_ =
+                        ptr_[lookup_[static_cast<typename Traits::index_type>
+                        (prev_char_)]];
+
+                    if (state_ == 0)
+                    {
+                        break;
+                    }
+
+                    ptr_ = &dfa_[state_ * dfa_alphabet_];
+                }
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_bol_ = bol_;
+                    end_token_ = curr_;
+                }
+            }
+
+            const std::size_t EOL_state_ = ptr_[eol_index];
+
+            if (EOL_state_ && curr_ == end_)
+            {
+                ptr_ = &dfa_[EOL_state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_bol_ = bol_;
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_)
+            {
+                // return longest match
+                _data.bol = end_bol_;
+                start_token_ = end_token_;
+            }
+            else
+            {
+                // No match causes char to be skipped
+                _data.bol = *start_token_ == '\n';
+                ++start_token_;
+                id_ = npos;
+                uid_ = npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+
+        std::size_t next (const std::size_t * const lookup_,
+            const std::size_t dfa_alphabet_, const std::size_t * const dfa_,
+            FwdIter &start_token_, FwdIter const &end_,
+            std::size_t &unique_id_)
+        {
+            if (start_token_ == end_)
+            {
+                unique_id_ = npos;
+                return 0;
+            }
+
+            const std::size_t *ptr_ = dfa_ + dfa_alphabet_;
+            FwdIter curr_ = start_token_;
+            bool end_state_ = *ptr_ != 0;
+            std::size_t id_ = *(ptr_ + id_index);
+            std::size_t uid_ = *(ptr_ + unique_id_index);
+            FwdIter end_token_ = start_token_;
+
+            while (curr_ != end_)
+            {
+                const std::size_t state_ = ptr_[lookup_[static_cast
+                    <typename Traits::index_type>(*curr_++)]];
+
+                if (state_ == 0)
+                {
+                    break;
+                }
+
+                ptr_ = &dfa_[state_ * dfa_alphabet_];
+
+                if (*ptr_)
+                {
+                    end_state_ = true;
+                    id_ = *(ptr_ + id_index);
+                    uid_ = *(ptr_ + unique_id_index);
+                    end_token_ = curr_;
+                }
+            }
+
+            if (end_state_)
+            {
+                // return longest match
+                start_token_ = end_token_;
+            }
+            else
+            {
+                // No match causes char to be skipped
+                ++start_token_;
+                id_ = npos;
+                uid_ = npos;
+            }
+
+            unique_id_ = uid_;
+            return id_;
+        }
+    };
+
+    friend class iterator;
+
+    // Make it explict that we are NOT taking a copy of state_machine_!
+    basic_input (const basic_state_machine<typename Traits::char_type>
+        *state_machine_, const FwdIter &begin_, const FwdIter &end_) :
+        _state_machine (state_machine_),
+        _begin (begin_),
+        _end (end_)
+    {
+    }
+
+    iterator begin () const
+    {
+        iterator iter_;
+
+        iter_._input = this;
+        // Over-ride default of 0 (EOI)
+        iter_._data.id = npos;
+        iter_._data.start = _begin;
+        iter_._data.end = _begin;
+        iter_._data.bol = _state_machine->data ()._seen_BOL_assertion;
+        iter_._data.state = 0;
+        ++iter_;
+        return iter_;
+    }
+
+    iterator end () const
+    {
+        iterator iter_;
+
+        iter_._input = this;
+        iter_._data.start = _end;
+        iter_._data.end = _end;
+        return iter_;
+    }
+
+private:
+    const basic_state_machine<typename Traits::char_type> *_state_machine;
+    FwdIter _begin;
+    FwdIter _end;
+};
+
+typedef basic_input<std::string::iterator> iter_input;
+typedef basic_input<std::basic_string<wchar_t>::iterator> iter_winput;
+typedef basic_input<const char *> ptr_input;
+typedef basic_input<const wchar_t *> ptr_winput;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/internals.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/internals.hpp
new file mode 100644 (file)
index 0000000..5f3a026
--- /dev/null
@@ -0,0 +1,60 @@
+// internals.hpp
+// Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_INTERNALS_HPP
+#define BOOST_LEXER_INTERNALS_HPP
+
+#include "containers/ptr_vector.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+struct internals
+{
+    typedef std::vector<std::size_t> size_t_vector;
+    typedef ptr_vector<size_t_vector> size_t_vector_vector;
+
+    size_t_vector_vector _lookup;
+    size_t_vector _dfa_alphabet;
+    size_t_vector_vector _dfa;
+    bool _seen_BOL_assertion;
+    bool _seen_EOL_assertion;
+
+    internals () :
+        _seen_BOL_assertion (false),
+        _seen_EOL_assertion (false)
+    {
+    }
+
+    void clear ()
+    {
+        _lookup.clear ();
+        _dfa_alphabet.clear ();
+        _dfa.clear ();
+        _seen_BOL_assertion = false;
+        _seen_EOL_assertion = false;
+    }
+
+    void swap (internals &internals_)
+    {
+        _lookup->swap (*internals_._lookup);
+        _dfa_alphabet.swap (internals_._dfa_alphabet);
+        _dfa->swap (*internals_._dfa);
+        std::swap (_seen_BOL_assertion, internals_._seen_BOL_assertion);
+        std::swap (_seen_EOL_assertion, internals_._seen_EOL_assertion);
+    }
+
+private:
+    internals (const internals &); // No copy construction.
+    internals &operator = (const internals &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/parser.hpp
new file mode 100644 (file)
index 0000000..9000e5e
--- /dev/null
@@ -0,0 +1,511 @@
+// parser.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_PARSER_HPP
+#define BOOST_LEXER_PARSER_HPP
+
+#include <boost/assert.hpp>
+#include "tree/end_node.hpp"
+#include "tree/iteration_node.hpp"
+#include "tree/leaf_node.hpp"
+#include "../runtime_error.hpp"
+#include "tree/selection_node.hpp"
+#include "tree/sequence_node.hpp"
+#include "../size_t.hpp"
+#include "tokeniser/re_tokeniser.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+class basic_parser
+{
+public:
+    typedef basic_re_tokeniser<CharT> tokeniser;
+    typedef typename tokeniser::string string;
+    typedef std::map<string, const node *> macro_map;
+    typedef node::node_ptr_vector node_ptr_vector;
+    typedef typename tokeniser::num_token token;
+
+/*
+    General principles of regex parsing:
+    - Every regex is a sequence of sub-regexes.
+    - Regexes consist of operands and operators
+    - All operators decompose to sequence, selection ('|') and iteration ('*')
+    - Regex tokens are stored on the stack.
+    - When a complete sequence of regex tokens is on the stack it is processed.
+
+Grammar:
+
+<REGEX>      -> <OREXP>
+<OREXP>      -> <SEQUENCE> | <OREXP>'|'<SEQUENCE>
+<SEQUENCE>   -> <SUB>
+<SUB>        -> <EXPRESSION> | <SUB><EXPRESSION>
+<EXPRESSION> -> <REPEAT>
+<REPEAT>     -> charset | macro | '('<REGEX>')' | <REPEAT><DUPLICATE>
+<DUPLICATE>  -> '?' | '*' | '+' | '{n[,[m]]}'
+*/
+    static node *parse (const CharT *start_, const CharT * const end_,
+        const std::size_t id_, const std::size_t unique_id_,
+        const std::size_t dfa_state_, const regex_flags flags_,
+        const std::locale &locale_, node_ptr_vector &node_ptr_vector_,
+        const macro_map &macromap_, typename tokeniser::token_map &map_,
+        bool &seen_BOL_assertion_, bool &seen_EOL_assertion_)
+    {
+        node *root_ = 0;
+        state state_ (start_, end_, flags_, locale_);
+        token lhs_token_;
+        token rhs_token_;
+        token_stack token_stack_;
+        tree_node_stack tree_node_stack_;
+        char action_ = 0;
+
+        token_stack_.push (rhs_token_);
+        tokeniser::next (state_, map_, rhs_token_);
+
+        do
+        {
+            lhs_token_ = token_stack_.top ();
+            action_ = lhs_token_.precedence (rhs_token_._type);
+
+            switch (action_)
+            {
+            case '<':
+            case '=':
+                token_stack_.push (rhs_token_);
+                tokeniser::next (state_, map_, rhs_token_);
+                break;
+            case '>':
+                reduce (token_stack_, macromap_, node_ptr_vector_,
+                    tree_node_stack_);
+                break;
+            default:
+                std::ostringstream ss_;
+
+                ss_ << "A syntax error occured: '" <<
+                    lhs_token_.precedence_string () <<
+                    "' against '" << rhs_token_.precedence_string () <<
+                    "' at index " << state_.index () << ".";
+                throw runtime_error (ss_.str ().c_str ());
+                break;
+            }
+        } while (!token_stack_.empty ());
+
+        if (tree_node_stack_.empty ())
+        {
+            throw runtime_error ("Empty rules are not allowed.");
+        }
+
+        BOOST_ASSERT(tree_node_stack_.size () == 1);
+
+        node *lhs_node_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        if (id_ == 0)
+        {
+            // Macros have no end state...
+            root_ = lhs_node_;
+        }
+        else
+        {
+            node_ptr_vector_->push_back (static_cast<end_node *>(0));
+
+            node *rhs_node_ = new end_node (id_, unique_id_, dfa_state_);
+
+            node_ptr_vector_->back () = rhs_node_;
+            node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+            node_ptr_vector_->back () = new sequence_node
+                (lhs_node_, rhs_node_);
+            root_ = node_ptr_vector_->back ();
+        }
+
+        // Done this way as bug in VC++ 6 prevents |= operator working
+        // properly!
+        if (state_._seen_BOL_assertion) seen_BOL_assertion_ = true;
+
+        if (state_._seen_EOL_assertion) seen_EOL_assertion_ = true;
+
+        return root_;
+    }
+
+private:
+    typedef typename tokeniser::state state;
+    typedef std::stack<token> token_stack;
+    typedef node::node_stack tree_node_stack;
+
+    static void reduce (token_stack &token_stack_,
+        const macro_map &macromap_, node_ptr_vector &node_vector_ptr_,
+        tree_node_stack &tree_node_stack_)
+    {
+        typename tokeniser::num_token lhs_;
+        typename tokeniser::num_token rhs_;
+        token_stack handle_;
+        char action_ = 0;
+
+        do
+        {
+            rhs_ = token_stack_.top ();
+            token_stack_.pop ();
+            handle_.push (rhs_);
+
+            if (!token_stack_.empty ())
+            {
+                lhs_ = token_stack_.top ();
+                action_ = lhs_.precedence (rhs_._type);
+            }
+        } while (!token_stack_.empty () && action_ == '=');
+
+        BOOST_ASSERT(token_stack_.empty () || action_ == '<');
+
+        switch (rhs_._type)
+        {
+        case token::BEGIN:
+            // finished processing so exit
+            break;
+        case token::REGEX:
+            // finished parsing, nothing to do
+            break;
+        case token::OREXP:
+            orexp (handle_, token_stack_, node_vector_ptr_, tree_node_stack_);
+            break;
+        case token::SEQUENCE:
+            token_stack_.push (token::OREXP);
+            break;
+        case token::SUB:
+            sub (handle_, token_stack_, node_vector_ptr_, tree_node_stack_);
+            break;
+        case token::EXPRESSION:
+            token_stack_.push (token::SUB);
+            break;
+        case token::REPEAT:
+            repeat (handle_, token_stack_);
+            break;
+        case token::CHARSET:
+            charset (handle_, token_stack_, node_vector_ptr_,
+                tree_node_stack_);
+            break;
+        case token::MACRO:
+            macro (handle_, token_stack_, macromap_, node_vector_ptr_,
+                tree_node_stack_);
+            break;
+        case token::OPENPAREN:
+            openparen (handle_, token_stack_);
+            break;
+        case token::OPT:
+        case token::AOPT:
+            optional (rhs_._type == token::OPT, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::ZEROORMORE:
+        case token::AZEROORMORE:
+            zero_or_more (rhs_._type == token::ZEROORMORE, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::ONEORMORE:
+        case token::AONEORMORE:
+            one_or_more (rhs_._type == token::ONEORMORE, node_vector_ptr_,
+                tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        case token::REPEATN:
+        case token::AREPEATN:
+            repeatn (rhs_._type == token::REPEATN, handle_.top (),
+                node_vector_ptr_, tree_node_stack_);
+            token_stack_.push (token::DUP);
+            break;
+        default:
+            throw runtime_error
+                ("Internal error regex_parser::reduce");
+            break;
+        }
+    }
+
+    static void orexp (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::OREXP &&
+            (handle_.size () == 1 || handle_.size () == 3));
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::REGEX);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::OR);
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::SEQUENCE);
+            perform_or (node_ptr_vector_, tree_node_stack_);
+            token_stack_.push (token::OREXP);
+        }
+    }
+
+    static void sub (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::SUB &&
+            (handle_.size () == 1 || handle_.size () == 2));
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::SEQUENCE);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::EXPRESSION);
+            // perform join
+            sequence (node_ptr_vector_, tree_node_stack_);
+            token_stack_.push (token::SUB);
+        }
+    }
+
+    static void repeat (token_stack &handle_, token_stack &token_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::REPEAT &&
+            handle_.size () >= 1 && handle_.size () <= 3);
+
+        if (handle_.size () == 1)
+        {
+            token_stack_.push (token::EXPRESSION);
+        }
+        else
+        {
+            handle_.pop ();
+            BOOST_ASSERT(handle_.top ()._type == token::DUP);
+            token_stack_.push (token::REPEAT);
+        }
+    }
+
+    static void charset (token_stack &handle_, token_stack &token_stack_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::CHARSET &&
+            handle_.size () == 1);
+        // store charset
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+
+        const size_t id_ = handle_.top ()._id;
+
+        node_ptr_vector_->back () = new leaf_node (id_, true);
+        tree_node_stack_.push (node_ptr_vector_->back ());
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void macro (token_stack &handle_, token_stack &token_stack_,
+        const macro_map &macromap_, node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        token &top_ = handle_.top ();
+
+        BOOST_ASSERT(top_._type == token::MACRO && handle_.size () == 1);
+
+        typename macro_map::const_iterator iter_ =
+            macromap_.find (top_._macro);
+
+        if (iter_ == macromap_.end ())
+        {
+            const CharT *name_ = top_._macro;
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Unknown MACRO name '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+
+        tree_node_stack_.push (iter_->second->copy (node_ptr_vector_));
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void openparen (token_stack &handle_, token_stack &token_stack_)
+    {
+        BOOST_ASSERT(handle_.top ()._type == token::OPENPAREN &&
+            handle_.size () == 3);
+        handle_.pop ();
+        BOOST_ASSERT(handle_.top ()._type == token::REGEX);
+        handle_.pop ();
+        BOOST_ASSERT(handle_.top ()._type == token::CLOSEPAREN);
+        token_stack_.push (token::REPEAT);
+    }
+
+    static void perform_or (node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        // perform or
+        node *rhs_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        node *lhs_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+        node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void sequence (node_ptr_vector &node_ptr_vector_,
+        tree_node_stack &tree_node_stack_)
+    {
+        node *rhs_ = tree_node_stack_.top ();
+
+        tree_node_stack_.pop ();
+
+        node *lhs_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+        node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void optional (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform ?
+        node *lhs_ = tree_node_stack_.top ();
+        // You don't know if lhs_ is a leaf_node, so get firstpos.
+        node::node_vector &firstpos_ = lhs_->firstpos ();
+
+        for (node::node_vector::iterator iter_ = firstpos_.begin (),
+            end_ = firstpos_.end (); iter_ != end_; ++iter_)
+        {
+            // These are leaf_nodes!
+            (*iter_)->greedy (greedy_);
+        }
+
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+
+        node *rhs_ = new leaf_node (null_token, greedy_);
+
+        node_ptr_vector_->back () = rhs_;
+        node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+        node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void zero_or_more (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform *
+        node *ptr_ = tree_node_stack_.top ();
+
+        node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+        node_ptr_vector_->back () = new iteration_node (ptr_, greedy_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    static void one_or_more (const bool greedy_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform +
+        node *lhs_ = tree_node_stack_.top ();
+        node *copy_ = lhs_->copy (node_ptr_vector_);
+
+        node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+
+        node *rhs_ = new iteration_node (copy_, greedy_);
+
+        node_ptr_vector_->back () = rhs_;
+        node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+        node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+        tree_node_stack_.top () = node_ptr_vector_->back ();
+    }
+
+    // This is one of the most mind bending routines in this code...
+    static void repeatn (const bool greedy_, const token &token_,
+        node_ptr_vector &node_ptr_vector_, tree_node_stack &tree_node_stack_)
+    {
+        // perform {n[,[m]]}
+        // Semantic checks have already been performed.
+        // {0,}  = *
+        // {0,1} = ?
+        // {1,}  = +
+        // therefore we do not check for these cases.
+        if (!(token_._min == 1 && !token_._comma))
+        {
+            const std::size_t top_ = token_._min > 0 ?
+                token_._min : token_._max;
+
+            if (token_._min == 0)
+            {
+                optional (greedy_, node_ptr_vector_, tree_node_stack_);
+            }
+
+            node *prev_ = tree_node_stack_.top ()->copy (node_ptr_vector_);
+            node *curr_ = 0;
+
+            for (std::size_t i_ = 2; i_ < top_; ++i_)
+            {
+                curr_ = prev_->copy (node_ptr_vector_);
+                tree_node_stack_.push (static_cast<node *>(0));
+                tree_node_stack_.top () = prev_;
+                sequence (node_ptr_vector_, tree_node_stack_);
+                prev_ = curr_;
+            }
+
+            if (token_._comma && token_._min > 0)
+            {
+                if (token_._min > 1)
+                {
+                    curr_ = prev_->copy (node_ptr_vector_);
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    sequence (node_ptr_vector_, tree_node_stack_);
+                    prev_ = curr_;
+                }
+
+                if (token_._comma && token_._max)
+                {
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    optional (greedy_, node_ptr_vector_, tree_node_stack_);
+                    prev_ = tree_node_stack_.top ();
+                    tree_node_stack_.pop ();
+
+                    const std::size_t count_ = token_._max - token_._min;
+
+                    for (std::size_t i_ = 1; i_ < count_; ++i_)
+                    {
+                        curr_ = prev_->copy (node_ptr_vector_);
+                        tree_node_stack_.push (static_cast<node *>(0));
+                        tree_node_stack_.top () = prev_;
+                        sequence (node_ptr_vector_, tree_node_stack_);
+                        prev_ = curr_;
+                    }
+                }
+                else
+                {
+                    tree_node_stack_.push (static_cast<node *>(0));
+                    tree_node_stack_.top () = prev_;
+                    zero_or_more (greedy_, node_ptr_vector_, tree_node_stack_);
+                    prev_ = tree_node_stack_.top ();
+                    tree_node_stack_.pop ();
+                }
+            }
+
+            tree_node_stack_.push (static_cast<node *>(0));
+            tree_node_stack_.top () = prev_;
+            sequence (node_ptr_vector_, tree_node_stack_);
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
new file mode 100644 (file)
index 0000000..dc1c6bd
--- /dev/null
@@ -0,0 +1,146 @@
+// num_token.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_NUM_TOKEN_HPP
+#define BOOST_LEXER_NUM_TOKEN_HPP
+
+#include <boost/config.hpp>
+#include "../../consts.hpp" // null_token
+#include "../../size_t.hpp"
+#include <boost/detail/workaround.hpp>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_num_token
+{
+    enum type {BEGIN, REGEX, OREXP, SEQUENCE, SUB, EXPRESSION, REPEAT,
+        DUP, OR, CHARSET, MACRO, OPENPAREN, CLOSEPAREN, OPT, AOPT,
+        ZEROORMORE, AZEROORMORE, ONEORMORE, AONEORMORE, REPEATN, AREPEATN,
+        END};
+
+    type _type;
+    std::size_t _id;
+    std::size_t _min;
+    bool _comma;
+    std::size_t _max;
+    CharT _macro[max_macro_len + 1];
+    static const char _precedence_table[END + 1][END + 1];
+    static const char *_precedence_strings[END + 1];
+
+    basic_num_token (const type type_ = BEGIN,
+        const std::size_t id_ = null_token) :
+        _type (type_),
+        _id (id_),
+        _min (0),
+        _comma (false),
+        _max (0)
+    {
+        *_macro = 0;
+    }
+
+    basic_num_token &operator = (const basic_num_token &rhs_)
+    {
+        _type = rhs_._type;
+        _id = rhs_._id;
+        _min = rhs_._min;
+        _comma = rhs_._comma;
+        _max = rhs_._max;
+
+        if (_type == MACRO)
+        {
+            const CharT *read_ = rhs_._macro;
+            CharT *write_ = _macro;
+
+            while (*read_)
+            {
+                *write_++ = *read_++;
+            }
+
+            *write_ = 0;
+        }
+
+        return *this;
+    }
+
+    void set (const type type_)
+    {
+        _type = type_;
+        _id = null_token;
+    }
+
+    void set (const type type_, const std::size_t id_)
+    {
+        _type = type_;
+        _id = id_;
+    }
+
+    void min_max (const std::size_t min_, const bool comma_,
+        const std::size_t max_)
+    {
+        _min = min_;
+        _comma = comma_;
+        _max = max_;
+    }
+
+    char precedence (const type type_) const
+    {
+        return _precedence_table[_type][type_];
+    }
+
+    const char *precedence_string () const
+    {
+        return _precedence_strings[_type];
+    }
+};
+
+template<typename CharT>
+const char basic_num_token<CharT>::_precedence_table[END + 1][END + 1] = {
+//        BEG, REG, ORE, SEQ, SUB, EXP, RPT, DUP,  | , CHR, MCR,  ( ,  ) ,  ? , ?? ,  * , *? ,  + , +?, {n}?, {n}, END
+/*BEGIN*/{' ', '<', '<', '<', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*REGEX*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*OREXP*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', '>', '>', ' ', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* SEQ */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', ' ', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* SUB */{' ', ' ', ' ', ' ', ' ', '=', '<', ' ', '>', '<', '<', '<', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*EXPRE*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* RPT */{' ', ' ', ' ', ' ', ' ', ' ', ' ', '=', '>', '>', '>', '>', '>', '<', '<', '<', '<', '<', '<', '<', '<', '>'},
+/*DUPLI*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  |  */{' ', ' ', ' ', '=', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
+/*CHARA*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*MACRO*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*  (  */{' ', '=', '<', '<', '<', '<', '<', ' ', ' ', '<', '<', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
+/*  )  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>', '>'},
+/*  ?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* ??  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  *  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* *?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*  +  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* +?  */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*{n,m}*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', '<', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/*{nm}?*/{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', '>', '>', '>', '>', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>'},
+/* END */{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
+};
+
+template<typename CharT>
+const char *basic_num_token<CharT>::_precedence_strings[END + 1] =
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(910))
+{{"BEGIN"}, {"REGEX"}, {"OREXP"}, {"SEQUENCE"}, {"SUB"}, {"EXPRESSION"},
+    {"REPEAT"}, {"DUPLICATE"}, {"|"}, {"CHARSET"}, {"MACRO"},
+    {"("}, {")"}, {"?"}, {"??"}, {"*"}, {"*?"}, {"+"}, {"+?"}, {"{n[,[m]]}"},
+    {"{n[,[m]]}?"}, {"END"}};
+#else
+{"BEGIN", "REGEX", "OREXP", "SEQUENCE", "SUB", "EXPRESSION", "REPEAT",
+    "DUPLICATE", "|", "CHARSET", "MACRO", "(", ")", "?", "??", "*", "*?",
+    "+", "+?", "{n[,[m]]}", "{n[,[m]]}?", "END"};
+#endif
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
new file mode 100644 (file)
index 0000000..7bdeb80
--- /dev/null
@@ -0,0 +1,574 @@
+// tokeniser.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_HPP
+#define BOOST_LEXER_RE_TOKENISER_HPP
+
+// memcpy()
+#include <cstring>
+#include <map>
+#include "num_token.hpp"
+#include "../../runtime_error.hpp"
+#include "../../size_t.hpp"
+#include <sstream>
+#include "../../string_token.hpp"
+#include "re_tokeniser_helper.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+class basic_re_tokeniser
+{
+public:
+    typedef basic_num_token<CharT> num_token;
+    typedef basic_re_tokeniser_state<CharT> state;
+    typedef basic_string_token<CharT> string_token;
+    typedef typename string_token::string string;
+    typedef std::map<string_token, std::size_t> token_map;
+    typedef std::pair<string_token, std::size_t> token_pair;
+
+    static void next (state &state_, token_map &map_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        token_.min_max (0, false, 0);
+
+        while (!eos_ && ch_ == '"')
+        {
+            state_._in_string ^= 1;
+            eos_ = state_.next (ch_);
+        }
+
+        if (eos_)
+        {
+            if (state_._in_string)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '\"').");
+            }
+
+            if (state_._paren_count)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing ')').");
+            }
+
+            token_.set (num_token::END, null_token);
+        }
+        else
+        {
+            if (ch_ == '\\')
+            {
+                // Even if we are in a string, respect escape sequences...
+                escape (state_, map_, token_);
+            }
+            else if (state_._in_string)
+            {
+                // All other meta characters lose their special meaning
+                // inside a string.
+                create_charset_token (string (1, ch_), false, map_, token_);
+            }
+            else
+            {
+                // Not an escape sequence and not inside a string, so
+                // check for meta characters.
+                switch (ch_)
+                {
+                case '(':
+                    token_.set (num_token::OPENPAREN, null_token);
+                    ++state_._paren_count;
+                    read_options (state_);
+                    break;
+                case ')':
+                    --state_._paren_count;
+
+                    if (state_._paren_count < 0)
+                    {
+                        std::ostringstream ss_;
+
+                        ss_ << "Number of open parenthesis < 0 at index " <<
+                            state_.index () - 1 << '.';
+                        throw runtime_error (ss_.str ().c_str ());
+                    }
+
+                    token_.set (num_token::CLOSEPAREN, null_token);
+
+                    if (!state_._flags_stack.empty ())
+                    {
+                        state_._flags = state_._flags_stack.top ();
+                        state_._flags_stack.pop ();
+                    }
+                    break;
+                case '?':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AOPT, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::OPT, null_token);
+                    }
+
+                    break;
+                case '*':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AZEROORMORE, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::ZEROORMORE, null_token);
+                    }
+
+                    break;
+                case '+':
+                    if (!state_.eos () && *state_._curr == '?')
+                    {
+                        token_.set (num_token::AONEORMORE, null_token);
+                        state_.increment ();
+                    }
+                    else
+                    {
+                        token_.set (num_token::ONEORMORE, null_token);
+                    }
+
+                    break;
+                case '{':
+                    open_curly (state_, token_);
+                    break;
+                case '|':
+                    token_.set (num_token::OR, null_token);
+                    break;
+                case '^':
+                    if (state_._curr - 1 == state_._start)
+                    {
+                        token_.set (num_token::CHARSET, bol_token);
+                        state_._seen_BOL_assertion = true;
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                case '$':
+                    if (state_._curr == state_._end)
+                    {
+                        token_.set (num_token::CHARSET, eol_token);
+                        state_._seen_EOL_assertion = true;
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                case '.':
+                {
+                    string dot_;
+
+                    if (state_._flags & dot_not_newline)
+                    {
+                        dot_ = '\n';
+                    }
+
+                    create_charset_token (dot_, true, map_, token_);
+                    break;
+                }
+                case '[':
+                {
+                    charset (state_, map_, token_);
+                    break;
+                }
+                case '/':
+                    throw runtime_error("Lookahead ('/') is not supported yet.");
+                    break;
+                default:
+                    if ((state_._flags & icase) &&
+                        (std::isupper (ch_, state_._locale) ||
+                        std::islower (ch_, state_._locale)))
+                    {
+                        CharT upper_ = std::toupper (ch_, state_._locale);
+                        CharT lower_ = std::tolower (ch_, state_._locale);
+
+                        string str_ (1, upper_);
+
+                        str_ += lower_;
+                        create_charset_token (str_, false, map_, token_);
+                    }
+                    else
+                    {
+                        create_charset_token (string (1, ch_), false,
+                            map_, token_);
+                    }
+
+                    break;
+                }
+            }
+        }
+    }
+
+private:
+    typedef basic_re_tokeniser_helper<CharT> tokeniser_helper;
+
+    static void read_options (state &state_)
+    {
+        if (!state_.eos () && *state_._curr == '?')
+        {
+            CharT ch_ = 0;
+            bool eos_ = false;
+            bool negate_ = false;
+
+            state_.increment ();
+            eos_ = state_.next (ch_);
+            state_._flags_stack.push (state_._flags);
+
+            while (!eos_ && ch_ != ':')
+            {
+                switch (ch_)
+                {
+                case '-':
+                    negate_ ^= 1;
+                    break;
+                case 'i':
+                    if (negate_)
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags & ~icase);
+                    }
+                    else
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags | icase);
+                    }
+
+                    negate_ = false;
+                    break;
+                case 's':
+                    if (negate_)
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags | dot_not_newline);
+                    }
+                    else
+                    {
+                        state_._flags = static_cast<regex_flags>
+                            (state_._flags & ~dot_not_newline);
+                    }
+
+                    negate_ = false;
+                    break;
+                default:
+                {
+                    std::ostringstream ss_;
+
+                    ss_ << "Unknown option at index " <<
+                        state_.index () - 1 << '.';
+                    throw runtime_error (ss_.str ().c_str ());
+                }
+                }
+
+                eos_ = state_.next (ch_);
+            }
+
+            // End of string handler will handle early termination
+        }
+        else if (!state_._flags_stack.empty ())
+        {
+            state_._flags_stack.push (state_._flags);
+        }
+    }
+
+    static void escape (state &state_, token_map &map_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        std::size_t str_len_ = 0;
+        const CharT *str_ = tokeniser_helper::escape_sequence (state_,
+            ch_, str_len_);
+
+        if (str_)
+        {
+            state state2_ (str_ + 1, str_ + str_len_, state_._flags,
+                state_._locale);
+
+            charset (state2_, map_, token_);
+        }
+        else
+        {
+            create_charset_token (string (1, ch_), false, map_, token_);
+        }
+    }
+
+    static void charset (state &state_, token_map &map_, num_token &token_)
+    {
+        string chars_;
+        bool negated_ = false;
+
+        tokeniser_helper::charset (state_, chars_, negated_);
+        create_charset_token (chars_, negated_, map_, token_);
+    }
+
+    static void create_charset_token (const string &charset_,
+        const bool negated_, token_map &map_, num_token &token_)
+    {
+        std::size_t id_ = null_token;
+        string_token stok_ (negated_, charset_);
+
+        stok_.remove_duplicates ();
+        stok_.normalise ();
+
+        typename token_map::const_iterator iter_ = map_.find (stok_);
+
+        if (iter_ == map_.end ())
+        {
+            id_ = map_.size ();
+            map_.insert (token_pair (stok_, id_));
+        }
+        else
+        {
+            id_ = iter_->second;
+        }
+
+        token_.set (num_token::CHARSET, id_);
+    }
+
+    static void open_curly (state &state_, num_token &token_)
+    {
+        if (state_.eos ())
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "(missing '}').");
+        }
+        else if (*state_._curr >= '0' && *state_._curr <= '9')
+        {
+            repeat_n (state_, token_);
+
+            if (!state_.eos () && *state_._curr == '?')
+            {
+                token_._type = num_token::AREPEATN;
+                state_.increment ();
+            }
+        }
+        else
+        {
+            macro (state_, token_);
+        }
+    }
+
+    // SYNTAX:
+    //   {n[,[n]]}
+    // SEMANTIC RULES:
+    //   {0} - INVALID (throw exception)
+    //   {0,} = *
+    //   {0,0} - INVALID (throw exception)
+    //   {0,1} = ?
+    //   {1,} = +
+    //   {min,max} where min == max - {min}
+    //   {min,max} where max < min - INVALID (throw exception)
+    static void repeat_n (state &state_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        while (!eos_ && ch_ >= '0' && ch_ <= '9')
+        {
+            token_._min *= 10;
+            token_._min += ch_ - '0';
+            eos_ = state_.next (ch_);
+        }
+
+        if (eos_)
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "(missing '}').");
+        }
+
+        bool min_max_ = false;
+        bool repeatn_ = true;
+
+        token_._comma = ch_ == ',';
+
+        if (token_._comma)
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '}').");
+            }
+
+            if (ch_ == '}')
+            {
+                // Small optimisation: Check for '*' equivalency.
+                if (token_._min == 0)
+                {
+                    token_.set (num_token::ZEROORMORE, null_token);
+                    repeatn_ = false;
+                }
+                // Small optimisation: Check for '+' equivalency.
+                else if (token_._min == 1)
+                {
+                    token_.set (num_token::ONEORMORE, null_token);
+                    repeatn_ = false;
+                }
+            }
+            else
+            {
+                if (ch_ < '0' || ch_ > '9')
+                {
+                    std::ostringstream ss_;
+
+                    ss_ << "Missing '}' at index " <<
+                        state_.index () - 1 << '.';
+                    throw runtime_error (ss_.str ().c_str ());
+                }
+
+                min_max_ = true;
+
+                do
+                {
+                    token_._max *= 10;
+                    token_._max += ch_ - '0';
+                    eos_ = state_.next (ch_);
+                } while (!eos_ && ch_ >= '0' && ch_ <= '9');
+
+                if (eos_)
+                {
+                    throw runtime_error ("Unexpected end of regex "
+                        "(missing '}').");
+                }
+
+                // Small optimisation: Check for '?' equivalency.
+                if (token_._min == 0 && token_._max == 1)
+                {
+                    token_.set (num_token::OPT, null_token);
+                    repeatn_ = false;
+                }
+                // Small optimisation: if min == max, then min.
+                else if (token_._min == token_._max)
+                {
+                    token_._comma = false;
+                    min_max_ = false;
+                    token_._max = 0;
+                }
+            }
+        }
+
+        if (ch_ != '}')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Missing '}' at index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        if (repeatn_)
+        {
+            // SEMANTIC VALIDATION follows:
+            // NOTE: {0,} has already become *
+            // therefore we don't check for a comma.
+            if (token_._min == 0 && token_._max == 0)
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Cannot have exactly zero repeats preceding index " <<
+                    state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+
+            if (min_max_ && token_._max < token_._min)
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Max less than min preceding index " <<
+                    state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+
+            token_.set (num_token::REPEATN, null_token);
+        }
+    }
+
+    static void macro (state &state_, num_token &token_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = false;
+        const CharT *start_ = state_._curr;
+
+        state_.next (ch_);
+
+        if (ch_ != '_' && !(ch_ >= 'A' && ch_ <= 'Z') &&
+            !(ch_ >= 'a' && ch_ <= 'z'))
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Invalid MACRO name at index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        do
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing '}').");
+            }
+        } while (ch_ == '_' || ch_ == '-' || (ch_ >= 'A' && ch_ <= 'Z') ||
+            (ch_ >= 'a' && ch_ <= 'z') || (ch_ >= '0' && ch_ <= '9'));
+
+        if (ch_ != '}')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Missing '}' at index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        std::size_t len_ = state_._curr - 1 - start_;
+
+        if (len_ > max_macro_len)
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "MACRO name '";
+
+            while (len_)
+            {
+                os_ << ss_.narrow (*start_++, ' ');
+                --len_;
+            }
+
+            os_ << "' too long.";
+            throw runtime_error (os_.str ());
+        }
+
+        token_.set (num_token::MACRO, null_token);
+
+        // Some systems have memcpy in namespace std.
+        using namespace std;
+
+        memcpy (token_._macro, start_, len_ * sizeof (CharT));
+        token_._macro[len_] = 0;
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
new file mode 100644 (file)
index 0000000..6e0791e
--- /dev/null
@@ -0,0 +1,549 @@
+// tokeniser_helper.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_HELPER_H
+#define BOOST_LEXER_RE_TOKENISER_HELPER_H
+
+#include "../../char_traits.hpp"
+// strlen()
+#include <cstring>
+#include "../../size_t.hpp"
+#include "re_tokeniser_state.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT, typename Traits = char_traits<CharT> >
+class basic_re_tokeniser_helper
+{
+public:
+    typedef basic_re_tokeniser_state<CharT> state;
+    typedef std::basic_string<CharT> string;
+
+    static const CharT *escape_sequence (state &state_, CharT &ch_,
+        std::size_t &str_len_)
+    {
+        bool eos_ = state_.eos ();
+
+        if (eos_)
+        {
+            throw runtime_error ("Unexpected end of regex "
+                "following '\\'.");
+        }
+
+        const CharT *str_ = charset_shortcut (*state_._curr, str_len_);
+
+        if (str_)
+        {
+            state_.increment ();
+        }
+        else
+        {
+            ch_ = chr (state_);
+        }
+
+        return str_;
+    }
+
+    // This function can call itself.
+    static void charset (state &state_, string &chars_, bool &negated_)
+    {
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "following '['.");
+        }
+
+        negated_ = ch_ == '^';
+
+        if (negated_)
+        {
+            eos_ = state_.next (ch_);
+
+            if (eos_)
+            {
+                // Pointless returning index if at end of string
+                throw runtime_error ("Unexpected end of regex "
+                    "following '^'.");
+            }
+        }
+
+        bool chset_ = false;
+        CharT prev_ = 0;
+
+        while (ch_ != ']')
+        {
+            if (ch_ == '\\')
+            {
+                std::size_t str_len_ = 0;
+                const CharT *str_ = escape_sequence (state_, prev_, str_len_);
+
+                chset_ = str_ != 0;
+
+                if (chset_)
+                {
+                    state temp_state_ (str_ + 1, str_ + str_len_,
+                        state_._flags, state_._locale);
+                    string temp_chars_;
+                    bool temp_negated_ = false;
+
+                    charset (temp_state_, temp_chars_, temp_negated_);
+
+                    if (negated_ != temp_negated_)
+                    {
+                        std::ostringstream ss_;
+
+                        ss_ << "Mismatch in charset negation preceding "
+                            "index " << state_.index () << '.';
+                        throw runtime_error (ss_.str ().c_str ());
+                    }
+
+                    chars_ += temp_chars_;
+                }
+            }
+/*
+            else if (ch_ == '[' && !state_.eos () && *state_._curr == ':')
+            {
+                // TODO: POSIX charsets
+            }
+*/
+            else
+            {
+                chset_ = false;
+                prev_ = ch_;
+            }
+
+            eos_ = state_.next (ch_);
+
+            // Covers preceding if, else if and else
+            if (eos_)
+            {
+                // Pointless returning index if at end of string
+                throw runtime_error ("Unexpected end of regex "
+                    "(missing ']').");
+            }
+
+            if (ch_ == '-')
+            {
+                charset_range (chset_, state_, eos_, ch_, prev_, chars_);
+            }
+            else if (!chset_)
+            {
+                if ((state_._flags & icase) &&
+                    (std::isupper (prev_, state_._locale) ||
+                    std::islower (prev_, state_._locale)))
+                {
+                    CharT upper_ = std::toupper (prev_, state_._locale);
+                    CharT lower_ = std::tolower (prev_, state_._locale);
+
+                    chars_ += upper_;
+                    chars_ += lower_;
+                }
+                else
+                {
+                    chars_ += prev_;
+                }
+            }
+        }
+
+        if (!negated_ && chars_.empty ())
+        {
+            throw runtime_error ("Empty charsets not allowed.");
+        }
+    }
+
+    static CharT chr (state &state_)
+    {
+        CharT ch_ = 0;
+
+        // eos_ has already been checked for.
+        switch (*state_._curr)
+        {
+            case '0':
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+            case '5':
+            case '6':
+            case '7':
+                ch_ = decode_octal (state_);
+                break;
+            case 'a':
+                ch_ = '\a';
+                state_.increment ();
+                break;
+            case 'b':
+                ch_ = '\b';
+                state_.increment ();
+                break;
+            case 'c':
+                ch_ = decode_control_char (state_);
+                break;
+            case 'e':
+                ch_ = 27; // '\e' not recognised by compiler
+                state_.increment ();
+                break;
+            case 'f':
+                ch_ = '\f';
+                state_.increment ();
+                break;
+            case 'n':
+                ch_ = '\n';
+                state_.increment ();
+                break;
+            case 'r':
+                ch_ = '\r';
+                state_.increment ();
+                break;
+            case 't':
+                ch_ = '\t';
+                state_.increment ();
+                break;
+            case 'v':
+                ch_ = '\v';
+                state_.increment ();
+                break;
+            case 'x':
+                ch_ = decode_hex (state_);
+                break;
+            default:
+                ch_ = *state_._curr;
+                state_.increment ();
+                break;
+        }
+
+        return ch_;
+    }
+
+private:
+    static const char *charset_shortcut (const char ch_,
+        std::size_t &str_len_)
+    {
+        const char *str_ = 0;
+
+        switch (ch_)
+        {
+        case 'd':
+            str_ = "[0-9]";
+            break;
+        case 'D':
+            str_ = "[^0-9]";
+            break;
+        case 's':
+            str_ = "[ \t\n\r\f\v]";
+            break;
+        case 'S':
+            str_ = "[^ \t\n\r\f\v]";
+            break;
+        case 'w':
+            str_ = "[_0-9A-Za-z]";
+            break;
+        case 'W':
+            str_ = "[^_0-9A-Za-z]";
+            break;
+        }
+
+        if (str_)
+        {
+            // Some systems have strlen in namespace std.
+            using namespace std;
+
+            str_len_ = strlen (str_);
+        }
+        else
+        {
+            str_len_ = 0;
+        }
+
+        return str_;
+    }
+
+    static const wchar_t *charset_shortcut (const wchar_t ch_,
+        std::size_t &str_len_)
+    {
+        const wchar_t *str_ = 0;
+
+        switch (ch_)
+        {
+        case 'd':
+            str_ = L"[0-9]";
+            break;
+        case 'D':
+            str_ = L"[^0-9]";
+            break;
+        case 's':
+            str_ = L"[ \t\n\r\f\v]";
+            break;
+        case 'S':
+            str_ = L"[^ \t\n\r\f\v]";
+            break;
+        case 'w':
+            str_ = L"[_0-9A-Za-z]";
+            break;
+        case 'W':
+            str_ = L"[^_0-9A-Za-z]";
+            break;
+        }
+
+        if (str_)
+        {
+            // Some systems have wcslen in namespace std.
+            using namespace std;
+
+            str_len_ = wcslen (str_);
+        }
+        else
+        {
+            str_len_ = 0;
+        }
+
+        return str_;
+    }
+
+    static CharT decode_octal (state &state_)
+    {
+        std::size_t accumulator_ = 0;
+        CharT ch_ = *state_._curr;
+        unsigned short count_ = 3;
+        bool eos_ = false;
+
+        for (;;)
+        {
+            accumulator_ *= 8;
+            accumulator_ += ch_ - '0';
+            --count_;
+            state_.increment ();
+            eos_ = state_.eos ();
+
+            if (!count_ || eos_) break;
+
+            ch_ = *state_._curr;
+
+            // Don't consume invalid chars!
+            if (ch_ < '0' || ch_ > '7')
+            {
+                break;
+            }
+        }
+
+        return static_cast<CharT> (accumulator_);
+    }
+
+    static CharT decode_control_char (state &state_)
+    {
+        // Skip over 'c'
+        state_.increment ();
+
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex following \\c.");
+        }
+        else
+        {
+            if (ch_ >= 'a' && ch_ <= 'z')
+            {
+                ch_ -= 'a' - 1;
+            }
+            else if (ch_ >= 'A' && ch_ <= 'Z')
+            {
+                ch_ -= 'A' - 1;
+            }
+            else if (ch_ == '@')
+            {
+                // Apparently...
+                ch_ = 0;
+            }
+            else
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Invalid control char at index " <<
+                    state_.index () - 1 << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+        }
+
+        return ch_;
+    }
+
+    static CharT decode_hex (state &state_)
+    {
+        // Skip over 'x'
+        state_.increment ();
+
+        CharT ch_ = 0;
+        bool eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex following \\x.");
+        }
+
+        if (!((ch_ >= '0' && ch_ <= '9') || (ch_ >= 'a' && ch_ <= 'f') ||
+            (ch_ >= 'A' && ch_ <= 'F')))
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Illegal char following \\x at index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        std::size_t hex_ = 0;
+
+        do
+        {
+            hex_ *= 16;
+
+            if (ch_ >= '0' && ch_ <= '9')
+            {
+                hex_ += ch_ - '0';
+            }
+            else if (ch_ >= 'a' && ch_ <= 'f')
+            {
+                hex_ += 10 + (ch_ - 'a');
+            }
+            else
+            {
+                hex_ += 10 + (ch_ - 'A');
+            }
+
+            eos_ = state_.eos ();
+
+            if (!eos_)
+            {
+                ch_ = *state_._curr;
+
+                // Don't consume invalid chars!
+                if (((ch_ >= '0' && ch_ <= '9') ||
+                    (ch_ >= 'a' && ch_ <= 'f') || (ch_ >= 'A' && ch_ <= 'F')))
+                {
+                    state_.increment ();
+                }
+                else
+                {
+                    eos_ = true;
+                }
+            }
+        } while (!eos_);
+
+        return static_cast<CharT> (hex_);
+    }
+
+    static void charset_range (const bool chset_, state &state_, bool &eos_,
+        CharT &ch_, const CharT prev_, string &chars_)
+    {
+        if (chset_)
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Charset cannot form start of range preceding "
+                "index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        eos_ = state_.next (ch_);
+
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "following '-'.");
+        }
+
+        CharT curr_ = 0;
+
+        if (ch_ == '\\')
+        {
+            std::size_t str_len_ = 0;
+
+            if (escape_sequence (state_, curr_, str_len_))
+            {
+                std::ostringstream ss_;
+
+                ss_ << "Charset cannot form end of range preceding index "
+                    << state_.index () << '.';
+                throw runtime_error (ss_.str ().c_str ());
+            }
+        }
+/*
+        else if (ch_ == '[' && !state_.eos () && *state_._curr == ':')
+        {
+            std::ostringstream ss_;
+
+            ss_ << "POSIX char class cannot form end of range at "
+                "index " << state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+*/
+        else
+        {
+            curr_ = ch_;
+        }
+
+        eos_ = state_.next (ch_);
+
+        // Covers preceding if and else
+        if (eos_)
+        {
+            // Pointless returning index if at end of string
+            throw runtime_error ("Unexpected end of regex "
+                "(missing ']').");
+        }
+
+        std::size_t start_ = static_cast<typename Traits::index_type> (prev_);
+        std::size_t end_ = static_cast<typename Traits::index_type> (curr_);
+
+        // Semanic check
+        if (end_ < start_)
+        {
+            std::ostringstream ss_;
+
+            ss_ << "Invalid range in charset preceding index " <<
+                state_.index () - 1 << '.';
+            throw runtime_error (ss_.str ().c_str ());
+        }
+
+        chars_.reserve (chars_.size () + (end_ + 1 - start_));
+
+        for (; start_ <= end_; ++start_)
+        {
+            CharT ch_ = static_cast<CharT> (start_);
+
+            if ((state_._flags & icase) &&
+                (std::isupper (ch_, state_._locale) ||
+                std::islower (ch_, state_._locale)))
+            {
+                CharT upper_ = std::toupper (ch_, state_._locale);
+                CharT lower_ = std::tolower (ch_, state_._locale);
+
+                chars_ += (upper_);
+                chars_ += (lower_);
+            }
+            else
+            {
+                chars_ += (ch_);
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp
new file mode 100644 (file)
index 0000000..35995ad
--- /dev/null
@@ -0,0 +1,98 @@
+// tokeniser_state.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RE_TOKENISER_STATE_HPP
+#define BOOST_LEXER_RE_TOKENISER_STATE_HPP
+
+#include "../../consts.hpp"
+#include <locale>
+#include "../../size_t.hpp"
+#include <stack>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_re_tokeniser_state
+{
+    const CharT * const _start;
+    const CharT * const _end;
+    const CharT *_curr;
+    regex_flags _flags;
+    std::stack<regex_flags> _flags_stack;
+    std::locale _locale;
+    long _paren_count;
+    bool _in_string;
+    bool _seen_BOL_assertion;
+    bool _seen_EOL_assertion;
+
+    basic_re_tokeniser_state (const CharT *start_, const CharT * const end_,
+        const regex_flags flags_, const std::locale locale_) :
+        _start (start_),
+        _end (end_),
+        _curr (start_),
+        _flags (flags_),
+        _locale (locale_),
+        _paren_count (0),
+        _in_string (false),
+        _seen_BOL_assertion (false),
+        _seen_EOL_assertion (false)
+    {
+    }
+
+    // prevent VC++ 7.1 warning:
+    const basic_re_tokeniser_state &operator =
+        (const basic_re_tokeniser_state &rhs_)
+    {
+        _start = rhs_._start;
+        _end = rhs_._end;
+        _curr = rhs_._curr;
+        _flags = rhs_._flags;
+        _locale = rhs_._locale;
+        _paren_count = rhs_._paren_count;
+        _in_string = rhs_._in_string;
+        _seen_BOL_assertion = rhs_._seen_BOL_assertion;
+        _seen_EOL_assertion = rhs_._seen_EOL_assertion;
+        return this;
+    }
+
+    inline bool next (CharT &ch_)
+    {
+        if (_curr >= _end)
+        {
+            ch_ = 0;
+            return true;
+        }
+        else
+        {
+            ch_ = *_curr;
+            increment ();
+            return false;
+        }
+    }
+
+    inline void increment ()
+    {
+        ++_curr;
+    }
+
+    inline std::size_t index ()
+    {
+        return _curr - _start;
+    }
+
+    inline bool eos ()
+    {
+        return _curr >= _end;
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp
new file mode 100644 (file)
index 0000000..c613e6a
--- /dev/null
@@ -0,0 +1,90 @@
+// end_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_END_NODE_HPP
+#define BOOST_LEXER_END_NODE_HPP
+
+#include "node.hpp"
+#include "../../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class end_node : public node
+{
+public:
+    end_node (const std::size_t id_, const std::size_t unique_id_,
+        const std::size_t lexer_state_) :
+        node (false),
+        _id (id_),
+        _unique_id (unique_id_),
+        _lexer_state (lexer_state_)
+    {
+        node::_firstpos.push_back (this);
+        node::_lastpos.push_back (this);
+    }
+
+    virtual ~end_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return END;
+    }
+
+    virtual bool traverse (const_node_stack &/*node_stack_*/,
+        bool_stack &/*perform_op_stack_*/) const
+    {
+        return false;
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        // _followpos is always empty..!
+        return _followpos;
+    }
+
+    virtual bool end_state () const
+    {
+        return true;
+    }
+
+    virtual std::size_t id () const
+    {
+        return _id;
+    }
+
+    virtual std::size_t unique_id () const
+    {
+        return _unique_id;
+    }
+
+    virtual std::size_t lexer_state () const
+    {
+        return _lexer_state;
+    }
+
+private:
+    std::size_t _id;
+    std::size_t _unique_id;
+    std::size_t _lexer_state;
+    node_vector _followpos;
+
+    virtual void copy_node (node_ptr_vector &/*node_ptr_vector_*/,
+        node_stack &/*new_node_stack_*/, bool_stack &/*perform_op_stack_*/,
+        bool &/*down_*/) const
+    {
+        // Nothing to do, as end_nodes are not copied.
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp
new file mode 100644 (file)
index 0000000..6b39462
--- /dev/null
@@ -0,0 +1,90 @@
+// iteration_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_ITERATION_NODE_HPP
+#define BOOST_LEXER_ITERATION_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class iteration_node : public node
+{
+public:
+    iteration_node (node *next_, const bool greedy_) :
+        node (true),
+        _next (next_),
+        _greedy (greedy_)
+    {
+        node_vector::iterator iter_;
+        node_vector::iterator end_;
+
+        _next->append_firstpos (_firstpos);
+        _next->append_lastpos (_lastpos);
+
+        for (iter_ = _lastpos.begin (), end_ = _lastpos.end ();
+            iter_ != end_; ++iter_)
+        {
+            (*iter_)->append_followpos (_firstpos);
+        }
+
+        for (iter_ = _firstpos.begin (), end_ = _firstpos.end ();
+            iter_ != end_; ++iter_)
+        {
+            (*iter_)->greedy (greedy_);
+        }
+    }
+
+    virtual ~iteration_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return ITERATION;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+        node_stack_.push (_next);
+        return true;
+    }
+
+private:
+    // Not owner of this pointer...
+    node *_next;
+    bool _greedy;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *ptr_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<iteration_node *>(0));
+            node_ptr_vector_->back () = new iteration_node (ptr_, _greedy);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp
new file mode 100644 (file)
index 0000000..39ed98d
--- /dev/null
@@ -0,0 +1,107 @@
+// leaf_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_LEAF_NODE_HPP
+#define BOOST_LEXER_LEAF_NODE_HPP
+
+#include "../../consts.hpp" // null_token
+#include "node.hpp"
+#include "../../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class leaf_node : public node
+{
+public:
+    leaf_node (const std::size_t token_, const bool greedy_) :
+        node (token_ == null_token),
+        _token (token_),
+        _set_greedy (!greedy_),
+        _greedy (greedy_)
+    {
+        if (!_nullable)
+        {
+            _firstpos.push_back (this);
+            _lastpos.push_back (this);
+        }
+    }
+
+    virtual ~leaf_node ()
+    {
+    }
+
+    virtual void append_followpos (const node_vector &followpos_)
+    {
+        for (node_vector::const_iterator iter_ = followpos_.begin (),
+            end_ = followpos_.end (); iter_ != end_; ++iter_)
+        {
+            _followpos.push_back (*iter_);
+        }
+    }
+
+    virtual type what_type () const
+    {
+        return LEAF;
+    }
+
+    virtual bool traverse (const_node_stack &/*node_stack_*/,
+        bool_stack &/*perform_op_stack_*/) const
+    {
+        return false;
+    }
+
+    virtual std::size_t token () const
+    {
+        return _token;
+    }
+
+    virtual void greedy (const bool greedy_)
+    {
+        if (!_set_greedy)
+        {
+            _greedy = greedy_;
+            _set_greedy = true;
+        }
+    }
+
+    virtual bool greedy () const
+    {
+        return _greedy;
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        return _followpos;
+    }
+
+    virtual node_vector &followpos ()
+    {
+        return _followpos;
+    }
+
+private:
+    std::size_t _token;
+    bool _set_greedy;
+    bool _greedy;
+    node_vector _followpos;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &/*perform_op_stack_*/,
+        bool &/*down_*/) const
+    {
+        node_ptr_vector_->push_back (static_cast<leaf_node *>(0));
+        node_ptr_vector_->back () = new leaf_node (_token, _greedy);
+        new_node_stack_.push (node_ptr_vector_->back ());
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp
new file mode 100644 (file)
index 0000000..1e36ccb
--- /dev/null
@@ -0,0 +1,188 @@
+// node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_NODE_HPP
+#define BOOST_LEXER_NODE_HPP
+
+#include <boost/assert.hpp>
+#include "../../containers/ptr_vector.hpp"
+#include "../../runtime_error.hpp"
+#include "../../size_t.hpp"
+#include <stack>
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class node
+{
+public:
+    enum type {LEAF, SEQUENCE, SELECTION, ITERATION, END};
+
+    typedef std::stack<bool> bool_stack;
+    typedef std::stack<node *> node_stack;
+    // stack and vector not owner of node pointers
+    typedef std::stack<const node *> const_node_stack;
+    typedef std::vector<node *> node_vector;
+    typedef ptr_vector<node> node_ptr_vector;
+
+    node () :
+        _nullable (false)
+    {
+    }
+
+    node (const bool nullable_) :
+        _nullable (nullable_)
+    {
+    }
+
+    virtual ~node ()
+    {
+    }
+
+    bool nullable () const
+    {
+        return _nullable;
+    }
+
+    void append_firstpos (node_vector &firstpos_) const
+    {
+        firstpos_.insert (firstpos_.end (),
+            _firstpos.begin (), _firstpos.end ());
+    }
+
+    void append_lastpos (node_vector &lastpos_) const
+    {
+        lastpos_.insert (lastpos_.end (),
+            _lastpos.begin (), _lastpos.end ());
+    }
+
+    virtual void append_followpos (const node_vector &/*followpos_*/)
+    {
+        throw runtime_error ("Internal error node::append_followpos()");
+    }
+
+    node *copy (node_ptr_vector &node_ptr_vector_) const
+    {
+        node *new_root_ = 0;
+        const_node_stack node_stack_;
+        bool_stack perform_op_stack_;
+        bool down_ = true;
+        node_stack new_node_stack_;
+
+        node_stack_.push (this);
+
+        while (!node_stack_.empty ())
+        {
+            while (down_)
+            {
+                down_ = node_stack_.top ()->traverse (node_stack_,
+                    perform_op_stack_);
+            }
+
+            while (!down_ && !node_stack_.empty ())
+            {
+                const node *top_ = node_stack_.top ();
+
+                top_->copy_node (node_ptr_vector_, new_node_stack_,
+                    perform_op_stack_, down_);
+
+                if (!down_) node_stack_.pop ();
+            }
+        }
+
+        BOOST_ASSERT(new_node_stack_.size () == 1);
+        new_root_ = new_node_stack_.top ();
+        new_node_stack_.pop ();
+        return new_root_;
+    }
+
+    virtual type what_type () const = 0;
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const = 0;
+
+    node_vector &firstpos ()
+    {
+        return _firstpos;
+    }
+
+    const node_vector &firstpos () const
+    {
+        return _firstpos;
+    }
+
+    // _lastpos modified externally, so not const &
+    node_vector &lastpos ()
+    {
+        return _lastpos;
+    }
+
+    virtual bool end_state () const
+    {
+        return false;
+    }
+
+    virtual std::size_t id () const
+    {
+        throw runtime_error ("Internal error node::id()");
+    }
+
+    virtual std::size_t unique_id () const
+    {
+        throw runtime_error ("Internal error node::unique_id()");
+    }
+
+    virtual std::size_t lexer_state () const
+    {
+        throw runtime_error ("Internal error node::state()");
+    }
+
+    virtual std::size_t token () const
+    {
+        throw runtime_error ("Internal error node::token()");
+    }
+
+    virtual void greedy (const bool /*greedy_*/)
+    {
+        throw runtime_error ("Internal error node::token(bool)");
+    }
+
+    virtual bool greedy () const
+    {
+        throw runtime_error ("Internal error node::token()");
+    }
+
+    virtual const node_vector &followpos () const
+    {
+        throw runtime_error ("Internal error node::followpos()");
+    }
+
+    virtual node_vector &followpos ()
+    {
+        throw runtime_error ("Internal error node::followpos()");
+    }
+
+protected:
+    const bool _nullable;
+    node_vector _firstpos;
+    node_vector _lastpos;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const = 0;
+
+private:
+    node (node const &); // No copy construction.
+    node &operator = (node const &); // No assignment.
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp
new file mode 100644 (file)
index 0000000..67e5ea0
--- /dev/null
@@ -0,0 +1,94 @@
+// selection_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SELECTION_NODE_HPP
+#define BOOST_LEXER_SELECTION_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class selection_node : public node
+{
+public:
+    selection_node (node *left_, node *right_) :
+        node (left_->nullable () || right_->nullable ()),
+        _left (left_),
+        _right (right_)
+    {
+        _left->append_firstpos (_firstpos);
+        _right->append_firstpos (_firstpos);
+        _left->append_lastpos (_lastpos);
+        _right->append_lastpos (_lastpos);
+    }
+
+    virtual ~selection_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return SELECTION;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+
+        switch (_right->what_type ())
+        {
+        case SEQUENCE:
+        case SELECTION:
+        case ITERATION:
+            perform_op_stack_.push (false);
+            break;
+        default:
+            break;
+        }
+
+        node_stack_.push (_right);
+        node_stack_.push (_left);
+        return true;
+    }
+
+private:
+    // Not owner of these pointers...
+    node *_left;
+    node *_right;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *rhs_ = new_node_stack_.top ();
+
+            new_node_stack_.pop ();
+
+            node *lhs_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<selection_node *>(0));
+            node_ptr_vector_->back () = new selection_node (lhs_, rhs_);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp
new file mode 100644 (file)
index 0000000..471fa68
--- /dev/null
@@ -0,0 +1,112 @@
+// sequence_node.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SEQUENCE_NODE_HPP
+#define BOOST_LEXER_SEQUENCE_NODE_HPP
+
+#include "node.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+class sequence_node : public node
+{
+public:
+    sequence_node (node *left_, node *right_) :
+        node (left_->nullable () && right_->nullable ()),
+        _left (left_),
+        _right (right_)
+    {
+        _left->append_firstpos (_firstpos);
+
+        if (_left->nullable ())
+        {
+            _right->append_firstpos (_firstpos);
+        }
+
+        if (_right->nullable ())
+        {
+            _left->append_lastpos (_lastpos);
+        }
+
+        _right->append_lastpos (_lastpos);
+
+        node_vector &lastpos_ = _left->lastpos ();
+        const node_vector &firstpos_ = _right->firstpos ();
+
+        for (node_vector::iterator iter_ = lastpos_.begin (),
+            end_ = lastpos_.end (); iter_ != end_; ++iter_)
+        {
+            (*iter_)->append_followpos (firstpos_);
+        }
+    }
+
+    virtual ~sequence_node ()
+    {
+    }
+
+    virtual type what_type () const
+    {
+        return SEQUENCE;
+    }
+
+    virtual bool traverse (const_node_stack &node_stack_,
+        bool_stack &perform_op_stack_) const
+    {
+        perform_op_stack_.push (true);
+
+        switch (_right->what_type ())
+        {
+        case SEQUENCE:
+        case SELECTION:
+        case ITERATION:
+            perform_op_stack_.push (false);
+            break;
+        default:
+            break;
+        }
+
+        node_stack_.push (_right);
+        node_stack_.push (_left);
+        return true;
+    }
+
+private:
+    // Not owner of these pointers...
+    node *_left;
+    node *_right;
+
+    virtual void copy_node (node_ptr_vector &node_ptr_vector_,
+        node_stack &new_node_stack_, bool_stack &perform_op_stack_,
+        bool &down_) const
+    {
+        if (perform_op_stack_.top ())
+        {
+            node *rhs_ = new_node_stack_.top ();
+
+            new_node_stack_.pop ();
+
+            node *lhs_ = new_node_stack_.top ();
+
+            node_ptr_vector_->push_back (static_cast<sequence_node *>(0));
+            node_ptr_vector_->back () = new sequence_node (lhs_, rhs_);
+            new_node_stack_.top () = node_ptr_vector_->back ();
+        }
+        else
+        {
+            down_ = true;
+        }
+
+        perform_op_stack_.pop ();
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/charset.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/charset.hpp
new file mode 100644 (file)
index 0000000..c74dd36
--- /dev/null
@@ -0,0 +1,81 @@
+// charset.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_CHARSET_HPP
+#define BOOST_LEXER_CHARSET_HPP
+
+#include <set>
+#include "../size_t.hpp"
+#include "../string_token.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+template<typename CharT>
+struct basic_charset
+{
+    typedef basic_string_token<CharT> token;
+    typedef std::set<std::size_t> index_set;
+
+    token _token;
+    index_set _index_set;
+
+    basic_charset ()
+    {
+    }
+
+    basic_charset (const token &token_, const std::size_t index_) :
+        _token (token_)
+    {
+        _index_set.insert (index_);
+    }
+
+    bool empty () const
+    {
+        return _token.empty () && _index_set.empty ();
+    }
+
+    void intersect (basic_charset &rhs_, basic_charset &overlap_)
+    {
+        _token.intersect (rhs_._token, overlap_._token);
+
+        if (!overlap_._token.empty ())
+        {
+            typename index_set::const_iterator iter_ = _index_set.begin ();
+            typename index_set::const_iterator end_ = _index_set.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                overlap_._index_set.insert (*iter_);
+            }
+
+            iter_ = rhs_._index_set.begin ();
+            end_ = rhs_._index_set.end ();
+
+            for (; iter_ != end_; ++iter_)
+            {
+                overlap_._index_set.insert (*iter_);
+            }
+
+            if (_token.empty ())
+            {
+                _index_set.clear ();
+            }
+
+            if (rhs_._token.empty ())
+            {
+                rhs_._index_set.clear ();
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/equivset.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/partition/equivset.hpp
new file mode 100644 (file)
index 0000000..b39fb15
--- /dev/null
@@ -0,0 +1,140 @@
+// equivset.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_EQUIVSET_HPP
+#define BOOST_LEXER_EQUIVSET_HPP
+
+#include <algorithm>
+#include "../parser/tree/node.hpp"
+#include <set>
+#include "../size_t.hpp"
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+struct equivset
+{
+    typedef std::set<std::size_t> index_set;
+    typedef std::vector<std::size_t> index_vector;
+    // Not owner of nodes:
+    typedef std::vector<node *> node_vector;
+
+    index_vector _index_vector;
+    bool _greedy;
+    std::size_t _id;
+    node_vector _followpos;
+
+    equivset () :
+        _greedy (true),
+        _id (0)
+    {
+    }
+
+    equivset (const index_set &index_set_, const bool greedy_,
+        const std::size_t id_, const node_vector &followpos_) :
+        _greedy (greedy_),
+        _id (id_),
+        _followpos (followpos_)
+    {
+        index_set::const_iterator iter_ = index_set_.begin ();
+        index_set::const_iterator end_ = index_set_.end ();
+
+        for (; iter_ != end_; ++iter_)
+        {
+            _index_vector.push_back (*iter_);
+        }
+    }
+
+    bool empty () const
+    {
+        return _index_vector.empty () && _followpos.empty ();
+    }
+
+    void intersect (equivset &rhs_, equivset &overlap_)
+    {
+        intersect_indexes (rhs_._index_vector, overlap_._index_vector);
+
+        if (!overlap_._index_vector.empty ())
+        {
+            // Note that the LHS takes priority in order to
+            // respect rule ordering priority in the lex spec.
+            overlap_._id = _id;
+            overlap_._greedy = _greedy;
+            overlap_._followpos = _followpos;
+
+            node_vector::const_iterator overlap_begin_ =
+                overlap_._followpos.begin ();
+            node_vector::const_iterator overlap_end_ =
+                overlap_._followpos.end ();
+            node_vector::const_iterator rhs_iter_ =
+                rhs_._followpos.begin ();
+            node_vector::const_iterator rhs_end_ =
+                rhs_._followpos.end ();
+
+            for (; rhs_iter_ != rhs_end_; ++rhs_iter_)
+            {
+                node *node_ = *rhs_iter_;
+
+                if (std::find (overlap_begin_, overlap_end_, node_) ==
+                    overlap_end_)
+                {
+                    overlap_._followpos.push_back (node_);
+                    overlap_begin_ = overlap_._followpos.begin ();
+                    overlap_end_ = overlap_._followpos.end ();
+                }
+            }
+
+            if (_index_vector.empty ())
+            {
+                _followpos.clear ();
+            }
+
+            if (rhs_._index_vector.empty ())
+            {
+                rhs_._followpos.clear ();
+            }
+        }
+    }
+
+private:
+    void intersect_indexes (index_vector &rhs_, index_vector &overlap_)
+    {
+        index_vector::iterator iter_ = _index_vector.begin ();
+        index_vector::iterator end_ = _index_vector.end ();
+        index_vector::iterator rhs_iter_ = rhs_.begin ();
+        index_vector::iterator rhs_end_ = rhs_.end ();
+
+        while (iter_ != end_ && rhs_iter_ != rhs_end_)
+        {
+            const std::size_t index_ = *iter_;
+            const std::size_t rhs_index_ = *rhs_iter_;
+
+            if (index_ < rhs_index_)
+            {
+                ++iter_;
+            }
+            else if (index_ > rhs_index_)
+            {
+                ++rhs_iter_;
+            }
+            else
+            {
+                overlap_.push_back (index_);
+                iter_ = _index_vector.erase (iter_);
+                end_ = _index_vector.end ();
+                rhs_iter_ = rhs_.erase (rhs_iter_);
+                rhs_end_ = rhs_.end ();
+            }
+        }
+    }
+};
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/rules.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/rules.hpp
new file mode 100644 (file)
index 0000000..83cc9a4
--- /dev/null
@@ -0,0 +1,806 @@
+// rules.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RULES_HPP
+#define BOOST_LEXER_RULES_HPP
+
+#include "consts.hpp"
+#include <deque>
+#include <locale>
+#include <map>
+#include "runtime_error.hpp"
+#include <set>
+#include "size_t.hpp"
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace boost
+{
+namespace lexer
+{
+namespace detail
+{
+    // return name of initial state
+    template <typename CharT>
+    struct strings;
+
+    template <>
+    struct strings<char>
+    {
+        static const char *initial ()
+        {
+            return "INITIAL";
+        }
+
+        static const char *dot ()
+        {
+            return ".";
+        }
+
+        static const char *all_states ()
+        {
+            return "*";
+        }
+
+        static const char *char_name ()
+        {
+            return "char";
+        }
+
+        static const char *char_prefix ()
+        {
+            return "";
+        }
+    };
+
+    template <>
+    struct strings<wchar_t>
+    {
+        static const wchar_t *initial ()
+        {
+            return L"INITIAL";
+        }
+
+        static const wchar_t *dot ()
+        {
+            return L".";
+        }
+
+        static const wchar_t *all_states ()
+        {
+            return L"*";
+        }
+
+        static const char *char_name ()
+        {
+            return "wchar_t";
+        }
+
+        static const char *char_prefix ()
+        {
+            return "L";
+        }
+    };
+}
+
+template<typename CharT>
+class basic_rules
+{
+public:
+    typedef std::vector<std::size_t> id_vector;
+    typedef std::deque<id_vector> id_vector_deque;
+    typedef std::basic_string<CharT> string;
+    typedef std::deque<string> string_deque;
+    typedef std::deque<string_deque> string_deque_deque;
+    typedef std::set<string> string_set;
+    typedef std::pair<string, string> string_pair;
+    typedef std::deque<string_pair> string_pair_deque;
+    typedef std::map<string, std::size_t> string_size_t_map;
+    typedef std::pair<string, std::size_t> string_size_t_pair;
+
+    basic_rules (const regex_flags flags_ = dot_not_newline,
+        std::size_t (*counter_ptr_) () = 0) :
+        _flags (flags_),
+        _counter (0),
+        _counter_ptr (counter_ptr_)
+    {
+        add_state (initial ());
+    }
+
+    void clear ()
+    {
+        _statemap.clear ();
+        _macrodeque.clear ();
+        _macroset.clear ();
+        _regexes.clear ();
+        _ids.clear ();
+        _unique_ids.clear ();
+        _states.clear ();
+        _flags = dot_not_newline;
+        _locale = std::locale ();
+        add_state (initial ());
+    }
+
+    void clear (const CharT *state_name_)
+    {
+        std::size_t state_ = state (state_name_);
+
+        if (state_ != npos)
+        {
+            _regexes[state_].clear ();
+            _ids[state_].clear ();
+            _unique_ids[state_].clear ();
+            _states[state_].clear ();
+        }
+    }
+
+    void flags (const regex_flags flags_)
+    {
+        _flags = flags_;
+    }
+
+    regex_flags flags () const
+    {
+        return _flags;
+    }
+
+    std::size_t next_unique_id ()
+    {
+        return _counter_ptr ? _counter_ptr () : _counter++;
+    }
+
+    std::locale imbue (std::locale &locale_)
+    {
+        std::locale loc_ = _locale;
+
+        _locale = locale_;
+        return loc_;
+    }
+
+    const std::locale &locale () const
+    {
+        return _locale;
+    }
+
+    std::size_t state (const CharT *name_) const
+    {
+        std::size_t state_ = npos;
+        typename string_size_t_map::const_iterator iter_ =
+            _statemap.find (name_);
+
+        if (iter_ != _statemap.end ())
+        {
+            state_ = iter_->second;
+        }
+
+        return state_;
+    }
+
+    const CharT *state (const std::size_t index_) const
+    {
+        if (index_ == 0)
+        {
+            return initial ();
+        }
+        else
+        {
+            const std::size_t vec_index_ = index_ - 1;
+
+            if (vec_index_ > _lexer_state_names.size () - 1)
+            {
+                return 0;
+            }
+            else
+            {
+                return _lexer_state_names[vec_index_].c_str ();
+            }
+        }
+    }
+
+    std::size_t add_state (const CharT *name_)
+    {
+        validate (name_);
+
+        if (_statemap.insert (string_size_t_pair (name_,
+            _statemap.size ())).second)
+        {
+            _regexes.push_back (string_deque ());
+            _ids.push_back (id_vector ());
+            _unique_ids.push_back (id_vector ());
+            _states.push_back (id_vector ());
+
+            if (string (name_) != initial ())
+            {
+                _lexer_state_names.push_back (name_);
+            }
+        }
+
+        // Initial is not stored, so no need to - 1.
+        return _lexer_state_names.size ();
+    }
+
+    void add_macro (const CharT *name_, const CharT *regex_)
+    {
+        add_macro (name_, string (regex_));
+    }
+
+    void add_macro (const CharT *name_, const CharT *regex_start_,
+        const CharT *regex_end_)
+    {
+        add_macro (name_, string (regex_start_, regex_end_));
+    }
+
+    void add_macro (const CharT *name_, const string &regex_)
+    {
+        validate (name_);
+
+        typename string_set::const_iterator iter_ = _macroset.find (name_);
+
+        if (iter_ == _macroset.end ())
+        {
+            _macrodeque.push_back (string_pair (name_, regex_));
+            _macroset.insert (name_);
+        }
+        else
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Attempt to redefine MACRO '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, static_cast<CharT> (' '));
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+    }
+
+    void add_macros (const basic_rules<CharT> &rules_)
+    {
+        const string_pair_deque &macros_ = rules_.macrodeque ();
+        typename string_pair_deque::const_iterator macro_iter_ =
+            macros_.begin ();
+        typename string_pair_deque::const_iterator macro_end_ =
+            macros_.end ();
+
+        for (; macro_iter_ != macro_end_; ++macro_iter_)
+        {
+            add_macro (macro_iter_->first.c_str (),
+                macro_iter_->second.c_str ());
+        }
+    }
+
+    void merge_macros (const basic_rules<CharT> &rules_)
+    {
+        const string_pair_deque &macros_ = rules_.macrodeque ();
+        typename string_pair_deque::const_iterator macro_iter_ =
+            macros_.begin ();
+        typename string_pair_deque::const_iterator macro_end_ =
+            macros_.end ();
+        typename string_set::const_iterator macro_dest_iter_;
+        typename string_set::const_iterator macro_dest_end_ = _macroset.end ();
+
+        for (; macro_iter_ != macro_end_; ++macro_iter_)
+        {
+            macro_dest_iter_ = _macroset.find (macro_iter_->first);
+
+            if (macro_dest_iter_ == macro_dest_end_)
+            {
+                add_macro (macro_iter_->first.c_str (),
+                    macro_iter_->second.c_str ());
+            }
+        }
+    }
+
+    std::size_t add (const CharT *regex_, const std::size_t id_)
+    {
+        return add (string (regex_), id_);
+    }
+
+    std::size_t add (const CharT *regex_start_, const CharT *regex_end_,
+        const std::size_t id_)
+    {
+        return add (string (regex_start_, regex_end_), id_);
+    }
+
+    std::size_t add (const string &regex_, const std::size_t id_)
+    {
+        const std::size_t counter_ = next_unique_id ();
+
+        check_for_invalid_id (id_);
+        _regexes.front ().push_back (regex_);
+        _ids.front ().push_back (id_);
+        _unique_ids.front ().push_back (counter_);
+        _states.front ().push_back (0);
+        return counter_;
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_), new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_start_,
+        const CharT *regex_end_, const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_start_, regex_end_),
+            new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, regex_, 0, new_state_, false);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_,
+        const std::size_t id_, const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_), id_, new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const CharT *regex_start_,
+        const CharT *regex_end_, const std::size_t id_,
+        const CharT *new_state_)
+    {
+        return add (curr_state_, string (regex_start_, regex_end_), id_,
+            new_state_);
+    }
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const std::size_t id_, const CharT *new_state_)
+    {
+        return add (curr_state_, regex_, id_, new_state_, true);
+    }
+
+    void add (const CharT *source_, const basic_rules<CharT> &rules_,
+        const CharT *dest_, const CharT *to_ = detail::strings<CharT>::dot ())
+    {
+        const bool star_ = *source_ == '*' && *(source_ + 1) == 0;
+        const bool dest_dot_ = *dest_ == '.' && *(dest_ + 1) == 0;
+        const bool to_dot_ = *to_ == '.' && *(to_ + 1) == 0;
+        std::size_t state_ = 0;
+        const string_deque_deque &all_regexes_ = rules_.regexes ();
+        const id_vector_deque &all_ids_ = rules_.ids ();
+        const id_vector_deque &all_unique_ids_ = rules_.unique_ids ();
+        const id_vector_deque &all_states_ = rules_.states ();
+        typename string_deque::const_iterator regex_iter_;
+        typename string_deque::const_iterator regex_end_;
+        typename id_vector::const_iterator id_iter_;
+        typename id_vector::const_iterator uid_iter_;
+        typename id_vector::const_iterator state_iter_;
+
+        if (star_)
+        {
+            typename string_deque_deque::const_iterator all_regexes_iter_ =
+                all_regexes_.begin ();
+            typename string_deque_deque::const_iterator all_regexes_end_ =
+                all_regexes_.end ();
+            typename id_vector_deque::const_iterator all_ids_iter_ =
+                all_ids_.begin ();
+            typename id_vector_deque::const_iterator all_uids_iter_ =
+                all_unique_ids_.begin ();
+            typename id_vector_deque::const_iterator all_states_iter_ =
+                all_states_.begin ();
+
+            for (; all_regexes_iter_ != all_regexes_end_;
+                ++state_, ++all_regexes_iter_, ++all_ids_iter_,
+                ++all_uids_iter_, ++all_states_iter_)
+            {
+                regex_iter_ = all_regexes_iter_->begin ();
+                regex_end_ = all_regexes_iter_->end ();
+                id_iter_ = all_ids_iter_->begin ();
+                uid_iter_ = all_uids_iter_->begin ();
+                state_iter_ = all_states_iter_->begin ();
+
+                for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                    ++uid_iter_, ++state_iter_)
+                {
+                    // If ..._dot_ then lookup state name from rules_; otherwise
+                    // pass name through.
+                    add (dest_dot_ ? rules_.state (state_) : dest_, *regex_iter_,
+                        *id_iter_, to_dot_ ? rules_.state (*state_iter_) : to_, true,
+                        *uid_iter_);
+                }
+            }
+        }
+        else
+        {
+            const CharT *start_ = source_;
+            string state_name_;
+
+            while (*source_)
+            {
+                while (*source_ && *source_ != ',')
+                {
+                    ++source_;
+                }
+
+                state_name_.assign (start_, source_);
+
+                if (*source_)
+                {
+                    ++source_;
+                    start_ = source_;
+                }
+
+                state_ = rules_.state (state_name_.c_str ());
+
+                if (state_ == npos)
+                {
+                    std::basic_stringstream<CharT> ss_;
+                    std::ostringstream os_;
+
+                    os_ << "Unknown state name '";
+                    source_ = state_name_.c_str ();
+
+                    while (*source_)
+                    {
+                        os_ << ss_.narrow (*source_++, ' ');
+                    }
+
+                    os_ << "'.";
+                    throw runtime_error (os_.str ());
+                }
+
+                regex_iter_ = all_regexes_[state_].begin ();
+                regex_end_ = all_regexes_[state_].end ();
+                id_iter_ = all_ids_[state_].begin ();
+                uid_iter_ = all_unique_ids_[state_].begin ();
+                state_iter_ = all_states_[state_].begin ();
+
+                for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                    ++uid_iter_, ++state_iter_)
+                {
+                    // If ..._dot_ then lookup state name from rules_; otherwise
+                    // pass name through.
+                    add (dest_dot_ ? state_name_.c_str () : dest_, *regex_iter_,
+                        *id_iter_, to_dot_ ? rules_.state (*state_iter_) : to_, true,
+                        *uid_iter_);
+                }
+            }
+        }
+    }
+/*
+    void add (const CharT *curr_state_, const basic_rules<CharT> &rules_)
+    {
+        const string_deque_deque &regexes_ = rules_.regexes ();
+        const id_vector_deque &ids_ = rules_.ids ();
+        const id_vector_deque &unique_ids_ = rules_.unique_ids ();
+        typename string_deque_deque::const_iterator state_regex_iter_ =
+            regexes_.begin ();
+        typename string_deque_deque::const_iterator state_regex_end_ =
+            regexes_.end ();
+        typename id_vector_deque::const_iterator state_id_iter_ =
+            ids_.begin ();
+        typename id_vector_deque::const_iterator state_uid_iter_ =
+            unique_ids_.begin ();
+        typename string_deque::const_iterator regex_iter_;
+        typename string_deque::const_iterator regex_end_;
+        typename id_vector::const_iterator id_iter_;
+        typename id_vector::const_iterator uid_iter_;
+
+        for (; state_regex_iter_ != state_regex_end_; ++state_regex_iter_)
+        {
+            regex_iter_ = state_regex_iter_->begin ();
+            regex_end_ = state_regex_iter_->end ();
+            id_iter_ = state_id_iter_->begin ();
+            uid_iter_ = state_uid_iter_->begin ();
+
+            for (; regex_iter_ != regex_end_; ++regex_iter_, ++id_iter_,
+                ++uid_iter_)
+            {
+                add (curr_state_, *regex_iter_, *id_iter_, curr_state_, true,
+                    *uid_iter_);
+            }
+        }
+    }
+*/
+    const string_size_t_map &statemap () const
+    {
+        return _statemap;
+    }
+
+    const string_pair_deque &macrodeque () const
+    {
+        return _macrodeque;
+    }
+
+    const string_deque_deque &regexes () const
+    {
+        return _regexes;
+    }
+
+    const id_vector_deque &ids () const
+    {
+        return _ids;
+    }
+
+    const id_vector_deque &unique_ids () const
+    {
+        return _unique_ids;
+    }
+
+    const id_vector_deque &states () const
+    {
+        return _states;
+    }
+
+    bool empty () const
+    {
+        typename string_deque_deque::const_iterator iter_ = _regexes.begin ();
+        typename string_deque_deque::const_iterator end_ = _regexes.end ();
+        bool empty_ = true;
+
+        for (; iter_ != end_; ++iter_)
+        {
+            if (!iter_->empty ())
+            {
+                empty_ = false;
+                break;
+            }
+        }
+
+        return empty_;
+    }
+
+    static const CharT *initial ()
+    {
+        return detail::strings<CharT>::initial ();
+    }
+
+    static const CharT *all_states ()
+    {
+        return detail::strings<CharT>::all_states ();
+    }
+
+    static const CharT *dot ()
+    {
+        return detail::strings<CharT>::dot ();
+    }
+
+private:
+    string_size_t_map _statemap;
+    string_pair_deque _macrodeque;
+    string_set _macroset;
+    string_deque_deque _regexes;
+    id_vector_deque _ids;
+    id_vector_deque _unique_ids;
+    id_vector_deque _states;
+    regex_flags _flags;
+    std::size_t _counter;
+    std::size_t (*_counter_ptr) ();
+    std::locale _locale;
+    string_deque _lexer_state_names;
+
+    std::size_t add (const CharT *curr_state_, const string &regex_,
+        const std::size_t id_, const CharT *new_state_, const bool check_,
+        const std::size_t uid_ = npos)
+    {
+        const bool star_ = *curr_state_ == '*' && *(curr_state_ + 1) == 0;
+        const bool dot_ = *new_state_ == '.' && *(new_state_ + 1) == 0;
+
+        if (check_)
+        {
+            check_for_invalid_id (id_);
+        }
+
+        if (!dot_)
+        {
+            validate (new_state_);
+        }
+
+        std::size_t new_ = string::npos;
+        typename string_size_t_map::const_iterator iter_;
+        typename string_size_t_map::const_iterator end_ = _statemap.end ();
+        id_vector states_;
+
+        if (!dot_)
+        {
+            iter_ = _statemap.find (new_state_);
+
+            if (iter_ == end_)
+            {
+                std::basic_stringstream<CharT> ss_;
+                std::ostringstream os_;
+
+                os_ << "Unknown state name '";
+
+                while (*new_state_)
+                {
+                    os_ << ss_.narrow (*new_state_++, ' ');
+                }
+
+                os_ << "'.";
+                throw runtime_error (os_.str ());
+            }
+
+            new_ = iter_->second;
+        }
+
+        if (star_)
+        {
+            const std::size_t size_ = _statemap.size ();
+
+            for (std::size_t i_ = 0; i_ < size_; ++i_)
+            {
+                states_.push_back (i_);
+            }
+        }
+        else
+        {
+            const CharT *start_ = curr_state_;
+            string state_;
+
+            while (*curr_state_)
+            {
+                while (*curr_state_ && *curr_state_ != ',')
+                {
+                    ++curr_state_;
+                }
+
+                state_.assign (start_, curr_state_);
+
+                if (*curr_state_)
+                {
+                    ++curr_state_;
+                    start_ = curr_state_;
+                }
+
+                validate (state_.c_str ());
+                iter_ = _statemap.find (state_.c_str ());
+
+                if (iter_ == end_)
+                {
+                    std::basic_stringstream<CharT> ss_;
+                    std::ostringstream os_;
+
+                    os_ << "Unknown state name '";
+                    curr_state_ = state_.c_str ();
+
+                    while (*curr_state_)
+                    {
+                        os_ << ss_.narrow (*curr_state_++, ' ');
+                    }
+
+                    os_ << "'.";
+                    throw runtime_error (os_.str ());
+                }
+
+                states_.push_back (iter_->second);
+            }
+        }
+
+        std::size_t first_counter_ = npos;
+
+        for (std::size_t i_ = 0, size_ = states_.size (); i_ < size_; ++i_)
+        {
+            const std::size_t curr_ = states_[i_];
+
+            _regexes[curr_].push_back (regex_);
+            _ids[curr_].push_back (id_);
+
+            if (uid_ == npos)
+            {
+                const std::size_t counter_ = next_unique_id ();
+
+                if (first_counter_ == npos)
+                {
+                    first_counter_ = counter_;
+                }
+
+                _unique_ids[curr_].push_back (counter_);
+            }
+            else
+            {
+                if (first_counter_ == npos)
+                {
+                    first_counter_ = uid_;
+                }
+
+                _unique_ids[curr_].push_back (uid_);
+            }
+
+            _states[curr_].push_back (dot_ ? curr_ : new_);
+        }
+
+        return first_counter_;
+    }
+
+    void validate (const CharT *name_) const
+    {
+        const CharT *start_ = name_;
+
+        if (*name_ != '_' && !(*name_ >= 'A' && *name_ <= 'Z') &&
+            !(*name_ >= 'a' && *name_ <= 'z'))
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Invalid name '";
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "'.";
+            throw runtime_error (os_.str ());
+        }
+        else if (*name_)
+        {
+            ++name_;
+        }
+
+        while (*name_)
+        {
+            if (*name_ != '_' && *name_ != '-' &&
+                !(*name_ >= 'A' && *name_ <= 'Z') &&
+                !(*name_ >= 'a' && *name_ <= 'z') &&
+                !(*name_ >= '0' && *name_ <= '9'))
+            {
+                std::basic_stringstream<CharT> ss_;
+                std::ostringstream os_;
+
+                os_ << "Invalid name '";
+                name_ = start_;
+
+                while (*name_)
+                {
+                    os_ << ss_.narrow (*name_++, ' ');
+                }
+
+                os_ << "'.";
+                throw runtime_error (os_.str ());
+            }
+
+            ++name_;
+        }
+
+        if (name_ - start_ > static_cast<std::ptrdiff_t>(max_macro_len))
+        {
+            std::basic_stringstream<CharT> ss_;
+            std::ostringstream os_;
+
+            os_ << "Name '";
+            name_ = start_;
+
+            while (*name_)
+            {
+                os_ << ss_.narrow (*name_++, ' ');
+            }
+
+            os_ << "' too long.";
+            throw runtime_error (os_.str ());
+        }
+    }
+
+    void check_for_invalid_id (const std::size_t id_) const
+    {
+        switch (id_)
+        {
+        case 0:
+            throw runtime_error ("id 0 is reserved for EOF.");
+        case npos:
+            throw runtime_error ("id npos is reserved for the "
+                "UNKNOWN token.");
+        default:
+            // OK
+            break;
+        }
+    }
+};
+
+typedef basic_rules<char> rules;
+typedef basic_rules<wchar_t> wrules;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/runtime_error.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/runtime_error.hpp
new file mode 100644 (file)
index 0000000..2ab716a
--- /dev/null
@@ -0,0 +1,26 @@
+// runtime_error.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_RUNTIME_ERROR_HPP
+#define BOOST_LEXER_RUNTIME_ERROR_HPP
+
+#include <stdexcept>
+
+namespace boost
+{
+namespace lexer
+{
+class runtime_error : public std::runtime_error
+{
+public:
+    runtime_error (const std::string &what_arg_) :
+        std::runtime_error (what_arg_)
+    {
+    }
+};
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/serialise.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/serialise.hpp
new file mode 100644 (file)
index 0000000..3a2ff1f
--- /dev/null
@@ -0,0 +1,35 @@
+// examples/serialise.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SERIALISE_HPP
+#define BOOST_LEXER_SERIALISE_HPP
+
+#include "internals.hpp"
+#include "state_machine.hpp"
+#include <boost/serialization/vector.hpp>
+
+namespace boost
+{
+namespace lexer
+{
+// IMPORTANT! This won't work if you don't enable RTTI!
+template<typename CharT, class Archive>
+void serialise (basic_state_machine<CharT> &sm_, Archive &ar_,
+    unsigned int version_ = 1)
+{
+    detail::internals &internals_ = const_cast<detail::internals &>
+        (sm_.data ());
+
+    ar_ & version_;
+    ar_ & *internals_._lookup;
+    ar_ & internals_._dfa_alphabet;
+    ar_ & *internals_._dfa;
+    ar_ & internals_._seen_BOL_assertion;
+    ar_ & internals_._seen_EOL_assertion;
+}
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/size_t.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/size_t.hpp
new file mode 100644 (file)
index 0000000..449ff4d
--- /dev/null
@@ -0,0 +1,13 @@
+// size_t.h
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_SIZE_T_H
+#define BOOST_LEXER_SIZE_T_H
+
+#include <stddef.h> // ptrdiff_t
+
+#include <string>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/state_machine.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/state_machine.hpp
new file mode 100644 (file)
index 0000000..46e50c9
--- /dev/null
@@ -0,0 +1,431 @@
+// state_machine.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_STATE_MACHINE_HPP
+#define BOOST_LEXER_STATE_MACHINE_HPP
+
+#include <algorithm>
+#include "conversion/char_state_machine.hpp"
+#include "consts.hpp"
+#include <deque>
+#include "internals.hpp"
+#include <map>
+#include "containers/ptr_vector.hpp"
+#include "size_t.hpp"
+#include <string>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+class basic_state_machine
+{
+public:
+    typedef CharT char_type;
+
+    class iterator
+    {
+    public:
+        friend class basic_state_machine;
+
+        struct data
+        {
+            // Current iterator info
+            std::size_t dfa;
+            std::size_t states;
+            std::size_t state;
+            std::size_t transitions;
+            std::size_t transition;
+
+            // Current state info
+            bool end_state;
+            std::size_t id;
+            std::size_t unique_id;
+            std::size_t goto_dfa;
+            std::size_t bol_index;
+            std::size_t eol_index;
+
+            // Current transition info
+            basic_string_token<CharT> token;
+            std::size_t goto_state;
+
+            data () :
+                dfa (npos),
+                states (0),
+                state (npos),
+                transitions (0),
+                transition (npos),
+                end_state (false),
+                id (npos),
+                unique_id (npos),
+                goto_dfa (npos),
+                bol_index (npos),
+                eol_index (npos),
+                goto_state (npos)
+            {
+            }
+
+            bool operator == (const data &rhs_) const
+            {
+                return dfa == rhs_.dfa &&
+                    states == rhs_.states &&
+                    state == rhs_.state &&
+                    transitions == rhs_.transitions &&
+                    transition == rhs_.transition &&
+                    end_state == rhs_.end_state &&
+                    id == rhs_.id &&
+                    unique_id == rhs_.unique_id &&
+                    goto_dfa == rhs_.goto_dfa &&
+                    bol_index == rhs_.bol_index &&
+                    eol_index == rhs_.eol_index &&
+                    token == rhs_.token &&
+                    transition == rhs_.transition;
+            }
+        };
+
+        iterator () :
+            _sm (0),
+            _dfas (0),
+            _dfa (npos),
+            _states (0),
+            _state (npos),
+            _transitions (0),
+            _transition (npos)
+        {
+        }
+
+        bool operator == (const iterator &rhs_) const
+        {
+            return _dfas == rhs_._dfas && _dfa == rhs_._dfa &&
+                _states == rhs_._states && _state == rhs_._state &&
+                _transitions == rhs_._transitions &&
+                _transition == rhs_._transition;
+        }
+
+        bool operator != (const iterator &rhs_) const
+        {
+            return !(*this == rhs_);
+        }
+
+        data &operator * ()
+        {
+            return _data;
+        }
+
+        data *operator -> ()
+        {
+            return &_data;
+        }
+
+        // Let compiler generate operator = ().
+
+        // prefix version
+        iterator &operator ++ ()
+        {
+            next ();
+            return *this;
+        }
+
+        // postfix version
+        iterator operator ++ (int)
+        {
+            iterator iter_ = *this;
+
+            next ();
+            return iter_;
+        }
+
+        void clear ()
+        {
+            _dfas = _states = _transitions = 0;
+            _dfa = _state = _transition = npos;
+        }
+
+    private:
+        basic_state_machine *_sm;
+        data _data;
+        std::size_t _dfas;
+        std::size_t _dfa;
+        std::size_t _states;
+        std::size_t _state;
+        std::size_t _transitions;
+        std::size_t _transition;
+        typename detail::basic_char_state_machine<CharT>::state::
+            size_t_string_token_map::const_iterator _token_iter;
+        typename detail::basic_char_state_machine<CharT>::state::
+            size_t_string_token_map::const_iterator _token_end;
+
+        void next ()
+        {
+            bool reset_state_ = false;
+
+            if (_transition >= _transitions)
+            {
+                _transition = _data.transition = 0;
+                _data.state = ++_state;
+                reset_state_ = true;
+
+                if (_state >= _states)
+                {
+                    ++_dfa;
+
+                    if (_dfa >= _dfas)
+                    {
+                        clear ();
+                        reset_state_ = false;
+                    }
+                    else
+                    {
+                        _states = _data.states =
+                            _sm->_csm._sm_vector[_dfa].size ();
+                        _state = _data.state = 0;
+                    }
+                }
+            }
+            else
+            {
+                _data.transition = _transition;
+            }
+
+            if (reset_state_)
+            {
+                const typename detail::basic_char_state_machine<CharT>::
+                    state *ptr_ = &_sm->_csm._sm_vector[_dfa][_state];
+
+                _transitions = _data.transitions = ptr_->_transitions.size ();
+                _data.end_state = ptr_->_end_state;
+                _data.id = ptr_->_id;
+                _data.unique_id = ptr_->_unique_id;
+                _data.goto_dfa = ptr_->_state;
+                _data.bol_index = ptr_->_bol_index;
+                _data.eol_index = ptr_->_eol_index;
+                _token_iter = ptr_->_transitions.begin ();
+                _token_end = ptr_->_transitions.end ();
+            }
+
+            if (_token_iter != _token_end)
+            {
+                _data.token = _token_iter->second;
+                _data.goto_state = _token_iter->first;
+                ++_token_iter;
+                ++_transition;
+            }
+            else
+            {
+                _data.token.clear ();
+                _data.goto_state = npos;
+            }
+        }
+    };
+
+    friend class iterator;
+
+    basic_state_machine ()
+    {
+    }
+
+    void clear ()
+    {
+        _internals.clear ();
+        _csm.clear ();
+    }
+
+    bool empty () const
+    {
+        // Don't include _csm in this test, as irrelevant to state.
+        return _internals._lookup->empty () &&
+            _internals._dfa_alphabet.empty () &&
+            _internals._dfa->empty ();
+    }
+
+    std::size_t size () const
+    {
+        return _internals._dfa->size ();
+    }
+
+    bool operator == (const basic_state_machine &rhs_) const
+    {
+        // Don't include _csm in this test, as irrelevant to state.
+        return _internals._lookup == rhs_._internals._lookup &&
+            _internals._dfa_alphabet == rhs_._internals._dfa_alphabet &&
+            _internals._dfa == rhs_._internals._dfa &&
+            _internals._seen_BOL_assertion ==
+                rhs_._internals._seen_BOL_assertion &&
+            _internals._seen_EOL_assertion ==
+                rhs_._internals._seen_EOL_assertion;
+    }
+
+    iterator begin () const
+    {
+        iterator iter_;
+
+        iter_._sm = const_cast<basic_state_machine *>(this);
+        check_for_csm ();
+
+        if (!_csm.empty ())
+        {
+            const typename detail::basic_char_state_machine<CharT>::
+                state_vector *ptr_ = &_csm._sm_vector.front ();
+
+            iter_._dfas = _csm._sm_vector.size ();
+            iter_._states = iter_._data.states = ptr_->size ();
+            iter_._transitions = iter_._data.transitions =
+                ptr_->front ()._transitions.size ();
+            iter_._dfa = iter_._data.dfa = 0;
+            iter_._state = iter_._data.state = 0;
+            iter_._transition = 0;
+            iter_._data.end_state = ptr_->front ()._end_state;
+            iter_._data.id = ptr_->front ()._id;
+            iter_._data.unique_id = ptr_->front ()._unique_id;
+            iter_._data.goto_dfa = ptr_->front ()._state;
+            iter_._data.bol_index = ptr_->front ()._bol_index;
+            iter_._data.eol_index = ptr_->front ()._eol_index;
+            iter_._token_iter = ptr_->front ()._transitions.begin ();
+            iter_._token_end = ptr_->front ()._transitions.end ();
+
+            // Deal with case where there is only a bol or eol
+            // but no other transitions.
+            if (iter_._transitions)
+            {
+                ++iter_;
+            }
+        }
+
+        return iter_;
+    }
+
+    iterator end () const
+    {
+        iterator iter_;
+
+        iter_._sm = const_cast<basic_state_machine *>(this);
+        return iter_;
+    }
+
+    void swap (basic_state_machine &sm_)
+    {
+        _internals.swap (sm_._internals);
+        _csm.swap (sm_._csm);
+    }
+
+    const detail::internals &data () const
+    {
+        return _internals;
+    }
+
+private:
+    detail::internals _internals;
+    mutable detail::basic_char_state_machine<CharT> _csm;
+
+    void check_for_csm () const
+    {
+        if (_csm.empty ())
+        {
+            human_readable (_csm);
+        }
+    }
+
+    void human_readable (detail::basic_char_state_machine<CharT> &sm_) const
+    {
+        const std::size_t max_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+        const std::size_t start_states_ = _internals._dfa->size ();
+
+        sm_.clear ();
+        sm_._sm_vector.resize (start_states_);
+
+        for (std::size_t start_state_index_ = 0;
+            start_state_index_ < start_states_; ++start_state_index_)
+        {
+            const detail::internals::size_t_vector *lu_ =
+                _internals._lookup[start_state_index_];
+            const std::size_t alphabet_ =
+                _internals._dfa_alphabet[start_state_index_] - dfa_offset;
+            std::vector<std::basic_string<CharT> > chars_ (alphabet_);
+            const std::size_t states_ = _internals._dfa[start_state_index_]->
+                size () / (alphabet_ + dfa_offset);
+            const std::size_t *read_ptr_ = &_internals.
+                _dfa[start_state_index_]->front () + alphabet_ + dfa_offset;
+
+            sm_._sm_vector[start_state_index_].resize (states_ - 1);
+
+            for (std::size_t alpha_index_ = 0; alpha_index_ < max_;
+                ++alpha_index_)
+            {
+                const std::size_t col_ = lu_->at (alpha_index_);
+
+                if (col_ != static_cast<std::size_t>(dead_state_index))
+                {
+                    chars_[col_ - dfa_offset] += static_cast<CharT>
+                        (alpha_index_);
+                }
+            }
+
+            for (std::size_t state_index_ = 1; state_index_ < states_;
+                ++state_index_)
+            {
+                typename detail::basic_char_state_machine<CharT>::state
+                    *state_ = &sm_._sm_vector[start_state_index_]
+                    [state_index_ - 1];
+
+                state_->_end_state = *read_ptr_ != 0;
+                state_->_id = *(read_ptr_ + id_index);
+                state_->_unique_id = *(read_ptr_ + unique_id_index);
+                state_->_state = *(read_ptr_ + state_index);
+                state_->_bol_index = *(read_ptr_ + bol_index) - 1;
+                state_->_eol_index = *(read_ptr_ + eol_index) - 1;
+                read_ptr_ += dfa_offset;
+
+                for (std::size_t col_index_ = 0; col_index_ < alphabet_;
+                    ++col_index_, ++read_ptr_)
+                {
+                    const std::size_t transition_ = *read_ptr_;
+
+                    if (transition_ != 0)
+                    {
+                        const std::size_t i_ = transition_ - 1;
+                        typename detail::basic_char_state_machine<CharT>::
+                            state::size_t_string_token_map::iterator iter_ =
+                            state_->_transitions.find (i_);
+
+                        if (iter_ == state_->_transitions.end ())
+                        {
+                            basic_string_token<CharT> token_
+                                (false, chars_[col_index_]);
+                            typename detail::basic_char_state_machine<CharT>::
+                                state::size_t_string_token_pair pair_
+                                (i_, token_);
+
+                            state_->_transitions.insert (pair_);
+                        }
+                        else
+                        {
+                            iter_->second._charset += chars_[col_index_];
+                        }
+                    }
+                }
+
+                for (typename detail::basic_char_state_machine<CharT>::state::
+                    size_t_string_token_map::iterator iter_ =
+                    state_->_transitions.begin (),
+                    end_ = state_->_transitions.end ();
+                    iter_ != end_; ++iter_)
+                {
+                    std::sort (iter_->second._charset.begin (),
+                        iter_->second._charset.end ());
+                    iter_->second.normalise ();
+                }
+            }
+        }
+    }
+};
+
+typedef basic_state_machine<char> state_machine;
+typedef basic_state_machine<wchar_t> wstate_machine;
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/string_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/lexer/string_token.hpp
new file mode 100644 (file)
index 0000000..dd58c98
--- /dev/null
@@ -0,0 +1,406 @@
+// string_token.hpp
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_LEXER_STRING_TOKEN_HPP
+#define BOOST_LEXER_STRING_TOKEN_HPP
+
+#include <algorithm>
+#include "size_t.hpp"
+#include "consts.hpp" // num_chars, num_wchar_ts
+#include <string>
+#include <limits>
+
+namespace boost
+{
+namespace lexer
+{
+template<typename CharT>
+struct basic_string_token
+{
+    typedef std::basic_string<CharT> string;
+
+    bool _negated;
+    string _charset;
+
+    basic_string_token () :
+        _negated (false)
+    {
+    }
+
+    basic_string_token (const bool negated_, const string &charset_) :
+        _negated (negated_),
+        _charset (charset_)
+    {
+    }
+
+    void remove_duplicates ()
+    {
+        const CharT *start_ = _charset.c_str ();
+        const CharT *end_ = start_ + _charset.size ();
+
+        // Optimisation for very large charsets:
+        // sorting via pointers is much quicker than
+        // via iterators...
+        std::sort (const_cast<CharT *> (start_), const_cast<CharT *> (end_));
+        _charset.erase (std::unique (_charset.begin (), _charset.end ()),
+            _charset.end ());
+    }
+
+    void normalise ()
+    {
+        const std::size_t max_chars_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+
+        if (_charset.length () == max_chars_)
+        {
+            _negated = !_negated;
+            _charset.clear ();
+        }
+        else if (_charset.length () > max_chars_ / 2)
+        {
+            negate ();
+        }
+    }
+
+    void negate ()
+    {
+        const std::size_t max_chars_ = sizeof (CharT) == 1 ?
+            num_chars : num_wchar_ts;
+        CharT curr_char_ = (std::numeric_limits<CharT>::min)();
+        string temp_;
+        const CharT *curr_ = _charset.c_str ();
+        const CharT *chars_end_ = curr_ + _charset.size ();
+
+        _negated = !_negated;
+        temp_.resize (max_chars_ - _charset.size ());
+
+        CharT *ptr_ = const_cast<CharT *> (temp_.c_str ());
+        std::size_t i_ = 0;
+
+        while (curr_ < chars_end_)
+        {
+            while (*curr_ > curr_char_)
+            {
+                *ptr_ = curr_char_;
+                ++ptr_;
+                ++curr_char_;
+                ++i_;
+            }
+
+            ++curr_char_;
+            ++curr_;
+            ++i_;
+        }
+
+        for (; i_ < max_chars_; ++i_)
+        {
+            *ptr_ = curr_char_;
+            ++ptr_;
+            ++curr_char_;
+        }
+
+        _charset = temp_;
+    }
+
+    bool operator < (const basic_string_token &rhs_) const
+    {
+        return _negated < rhs_._negated ||
+            (_negated == rhs_._negated && _charset < rhs_._charset);
+    }
+
+    bool empty () const
+    {
+        return _charset.empty () && !_negated;
+    }
+
+    bool any () const
+    {
+        return _charset.empty () && _negated;
+    }
+
+    void clear ()
+    {
+        _negated = false;
+        _charset.clear ();
+    }
+
+    void intersect (basic_string_token &rhs_, basic_string_token &overlap_)
+    {
+        if ((any () && rhs_.any ()) || (_negated == rhs_._negated &&
+            !any () && !rhs_.any ()))
+        {
+            intersect_same_types (rhs_, overlap_);
+        }
+        else
+        {
+            intersect_diff_types (rhs_, overlap_);
+        }
+    }
+
+    static void escape_char (const CharT ch_, string &out_)
+    {
+        switch (ch_)
+        {
+            case '\0':
+                out_ += '\\';
+                out_ += '0';
+                break;
+            case '\a':
+                out_ += '\\';
+                out_ += 'a';
+                break;
+            case '\b':
+                out_ += '\\';
+                out_ += 'b';
+                break;
+            case 27:
+                out_ += '\\';
+                out_ += 'x';
+                out_ += '1';
+                out_ += 'b';
+                break;
+            case '\f':
+                out_ += '\\';
+                out_ += 'f';
+                break;
+            case '\n':
+                out_ += '\\';
+                out_ += 'n';
+                break;
+            case '\r':
+                out_ += '\\';
+                out_ += 'r';
+                break;
+            case '\t':
+                out_ += '\\';
+                out_ += 't';
+                break;
+            case '\v':
+                out_ += '\\';
+                out_ += 'v';
+                break;
+            case '\\':
+                out_ += '\\';
+                out_ += '\\';
+                break;
+            case '"':
+                out_ += '\\';
+                out_ += '"';
+                break;
+            case '\'':
+                out_ += '\\';
+                out_ += '\'';
+                break;
+            default:
+            {
+                if (ch_ < 32 && ch_ >= 0)
+                {
+                    std::basic_stringstream<CharT> ss_;
+
+                    out_ += '\\';
+                    out_ += 'x';
+                    ss_ << std::hex <<
+                        static_cast<std::size_t> (ch_);
+                    out_ += ss_.str ();
+                }
+                else
+                {
+                    out_ += ch_;
+                }
+
+                break;
+            }
+        }
+    }
+
+private:
+    void intersect_same_types (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (any ())
+        {
+            clear ();
+            overlap_._negated = true;
+            rhs_.clear ();
+        }
+        else
+        {
+            typename string::iterator iter_ = _charset.begin ();
+            typename string::iterator end_ = _charset.end ();
+            typename string::iterator rhs_iter_ = rhs_._charset.begin ();
+            typename string::iterator rhs_end_ = rhs_._charset.end ();
+
+            overlap_._negated = _negated;
+
+            while (iter_ != end_ && rhs_iter_ != rhs_end_)
+            {
+                if (*iter_ < *rhs_iter_)
+                {
+                    ++iter_;
+                }
+                else if (*iter_ > *rhs_iter_)
+                {
+                    ++rhs_iter_;
+                }
+                else
+                {
+                    overlap_._charset += *iter_;
+                    iter_ = _charset.erase (iter_);
+                    end_ = _charset.end ();
+                    rhs_iter_ = rhs_._charset.erase (rhs_iter_);
+                    rhs_end_ = rhs_._charset.end ();
+                }
+            }
+
+            if (_negated)
+            {
+                // duplicates already merged, so safe to merge
+                // using std lib.
+
+                // src, dest
+                merge (_charset, overlap_._charset);
+                // duplicates already merged, so safe to merge
+                // using std lib.
+
+                // src, dest
+                merge (rhs_._charset, overlap_._charset);
+                _negated = false;
+                rhs_._negated = false;
+                std::swap (_charset, rhs_._charset);
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+            else if (!overlap_._charset.empty ())
+            {
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+        }
+    }
+
+    void intersect_diff_types (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (any ())
+        {
+            intersect_any (rhs_, overlap_);
+        }
+        else if (_negated)
+        {
+            intersect_negated (rhs_, overlap_);
+        }
+        else // _negated == false
+        {
+            intersect_charset (rhs_, overlap_);
+        }
+    }
+
+    void intersect_any (basic_string_token &rhs_, basic_string_token &overlap_)
+    {
+        if (rhs_._negated)
+        {
+            rhs_.intersect_negated (*this, overlap_);
+        }
+        else // rhs._negated == false
+        {
+            rhs_.intersect_charset (*this, overlap_);
+        }
+    }
+
+    void intersect_negated (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (rhs_.any ())
+        {
+            overlap_._negated = true;
+            overlap_._charset = _charset;
+            rhs_._negated = false;
+            rhs_._charset = _charset;
+            clear ();
+        }
+        else // rhs._negated == false
+        {
+            rhs_.intersect_charset (*this, overlap_);
+        }
+    }
+
+    void intersect_charset (basic_string_token &rhs_,
+        basic_string_token &overlap_)
+    {
+        if (rhs_.any ())
+        {
+            overlap_._charset = _charset;
+            rhs_._negated = true;
+            rhs_._charset = _charset;
+            clear ();
+        }
+        else // rhs_._negated == true
+        {
+            typename string::iterator iter_ = _charset.begin ();
+            typename string::iterator end_ = _charset.end ();
+            typename string::iterator rhs_iter_ = rhs_._charset.begin ();
+            typename string::iterator rhs_end_ = rhs_._charset.end ();
+
+            while (iter_ != end_ && rhs_iter_ != rhs_end_)
+            {
+                if (*iter_ < *rhs_iter_)
+                {
+                    overlap_._charset += *iter_;
+                    rhs_iter_ = rhs_._charset.insert (rhs_iter_, *iter_);
+                    ++rhs_iter_;
+                    rhs_end_ = rhs_._charset.end ();
+                    iter_ = _charset.erase (iter_);
+                    end_ = _charset.end ();
+                }
+                else if (*iter_ > *rhs_iter_)
+                {
+                    ++rhs_iter_;
+                }
+                else
+                {
+                    ++iter_;
+                    ++rhs_iter_;
+                }
+            }
+
+            if (iter_ != end_)
+            {
+                // nothing bigger in rhs_ than iter_,
+                // so safe to merge using std lib.
+                string temp_ (iter_, end_);
+
+                // src, dest
+                merge (temp_, overlap_._charset);
+                _charset.erase (iter_, end_);
+            }
+
+            if (!overlap_._charset.empty ())
+            {
+                merge (overlap_._charset, rhs_._charset);
+                // possible duplicates, so check for any and erase.
+                rhs_._charset.erase (std::unique (rhs_._charset.begin (),
+                    rhs_._charset.end ()), rhs_._charset.end ());
+                normalise ();
+                overlap_.normalise ();
+                rhs_.normalise ();
+            }
+        }
+    }
+
+    void merge (string &src_, string &dest_)
+    {
+        string tmp_ (src_.size () + dest_.size (), 0);
+
+        std::merge (src_.begin (), src_.end (), dest_.begin (), dest_.end (),
+            tmp_.begin ());
+        dest_ = tmp_;
+    }
+};
+}
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_cons.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_cons.hpp
new file mode 100644 (file)
index 0000000..0d6b0ae
--- /dev/null
@@ -0,0 +1,85 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MAKE_CONS_OCTOBER_16_2008_1252PM
+#define BOOST_SPIRIT_MAKE_CONS_OCTOBER_16_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_limits.hpp>      // needs to be included before proto
+#include <boost/proto/proto.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename T>
+    struct as_meta_element
+      : mpl::eval_if_c<is_abstract<T>::value || is_function<T>::value
+          , add_reference<T>, remove_const<T> >
+    {};
+
+    template <typename T>
+    struct as_meta_element<T&> : as_meta_element<T>   // always store by value
+    {};
+
+    template <typename T, int N>
+    struct as_meta_element<T[N]>
+    {
+        typedef const T(&type)[N];
+    };
+
+    namespace result_of
+    {
+        template <typename Car, typename Cdr = fusion::nil_>
+        struct make_cons
+        {
+            typedef typename as_meta_element<Car>::type car_type;            typedef typename fusion::cons<car_type, Cdr> type;
+        };
+    }
+
+    template <typename Car, typename Cdr>
+    fusion::cons<typename as_meta_element<Car>::type, Cdr>
+    make_cons(Car const& car, Cdr const& cdr)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type, Cdr> result;
+        return result(car, cdr);
+    }
+
+    template <typename Car>
+    fusion::cons<typename as_meta_element<Car>::type>
+    make_cons(Car const& car)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type> result;
+        return result(car);
+    }
+
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
+    // workaround for gcc-4.0 bug where illegal function types
+    // can be formed (const is added to function type)
+    // description: http://lists.boost.org/Archives/boost/2009/04/150743.php
+    template <typename Car>
+    fusion::cons<typename as_meta_element<Car>::type>
+    make_cons(Car& car, typename enable_if<is_function<Car> >::type* = 0)
+    {
+        typedef typename as_meta_element<Car>::type car_type;
+        typedef typename fusion::cons<car_type> result;
+        return result(car);
+    }
+#endif
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_vector.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/make_vector.hpp
new file mode 100644 (file)
index 0000000..92fb2c9
--- /dev/null
@@ -0,0 +1,114 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <boost/version.hpp>
+
+// This is the same as the one in fusion in Boost 1.41. This is provided
+// for compatibility with Boost 1.40 and below.
+
+#if (BOOST_VERSION > 104000)
+
+#include <boost/fusion/include/make_vector.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    namespace result_of
+    {
+        using fusion::result_of::make_vector;
+    }
+    using fusion::make_vector;
+}}}
+
+#else
+
+#ifndef BOOST_PP_IS_ITERATING
+#if !defined(SPIRIT_MAKE_VECTOR_07162005_0243)
+#define SPIRIT_MAKE_VECTOR_07162005_0243
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/fusion/container/vector/vector.hpp>
+#include <boost/fusion/support/detail/as_fusion_element.hpp>
+
+namespace boost { namespace fusion
+{
+    struct void_;
+}}
+
+namespace boost { namespace spirit { namespace detail
+{
+    namespace result_of
+    {
+        template <
+            BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+                FUSION_MAX_VECTOR_SIZE, typename T, fusion::void_)
+          , typename Extra = fusion::void_
+        >
+        struct make_vector;
+
+        template <>
+        struct make_vector<>
+        {
+            typedef fusion::vector0 type;
+        };
+    }
+
+    inline fusion::vector0
+    make_vector()
+    {
+        return fusion::vector0();
+    }
+
+#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data)                               \
+    typename fusion::detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
+
+#define BOOST_PP_FILENAME_1 <boost/spirit/home/support/detail/make_vector.hpp>
+#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_FUSION_AS_FUSION_ELEMENT
+
+}}}
+
+#endif
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define N BOOST_PP_ITERATION()
+
+    namespace result_of
+    {
+        template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+        #define TEXT(z, n, text) , text
+        struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, fusion::void_) >
+        #undef TEXT
+#else
+        struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
+#endif
+        {
+            typedef BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
+        };
+    }
+
+    template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+    inline BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
+    make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
+    {
+        return BOOST_PP_CAT(fusion::vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
+            BOOST_PP_ENUM_PARAMS(N, _));
+    }
+
+#undef N
+#endif // defined(BOOST_PP_IS_ITERATING)
+#endif // (BOOST_VERSION > 103800)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/detail/fp_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/detail/fp_traits.hpp
new file mode 100644 (file)
index 0000000..199712a
--- /dev/null
@@ -0,0 +1,583 @@
+// fp_traits.hpp
+
+#ifndef BOOST_SPIRIT_MATH_FP_TRAITS_HPP
+#define BOOST_SPIRIT_MATH_FP_TRAITS_HPP
+
+// Copyright (c) 2006 Johan Rade
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(__vms) && defined(__DECCXX) && !__IEEE_FLOAT
+#   error The VAX floating point mode on VMS is not supported.
+#endif
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cstring>
+
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/detail/endian.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+
+//------------------------------------------------------------------------------
+
+namespace boost {
+namespace spirit {
+namespace math {
+namespace detail {
+
+//------------------------------------------------------------------------------
+
+/*
+Most processors support three different floating point precisions:
+single precision (32 bits), double precision (64 bits)
+and extended double precision (>64 bits)
+
+Note that the C++ type long double can be implemented
+both as double precision and extended double precision.
+*/
+
+struct single_precision_tag {};
+struct double_precision_tag {};
+struct extended_double_precision_tag {};
+
+//------------------------------------------------------------------------------
+
+/*
+template<class T, class U> struct fp_traits_impl;
+
+  This is traits class that describes the binary structure of floating
+  point numbers of C++ type T and precision U
+
+Requirements: 
+
+  T = float, double or long double
+  U = single_precision_tag, double_precision_tag
+      or extended_double_precision_tag
+
+Typedef members:
+
+  bits -- the target type when copying the leading bytes of a floating
+      point number. It is a typedef for uint32_t or uint64_t.
+
+  coverage -- tells us whether all bytes are copied or not.
+      It is a typedef for all_bits or not_all_bits.
+
+Static data members:
+
+  sign, exponent, flag, mantissa -- bit masks that give the meaning of the bits
+      in the leading bytes.
+
+Static function members:
+
+  init() -- initializes the static data members, if needed.
+            (Is a no-op in the specialized versions of the template.)
+
+  get_bits(), set_bits() -- provide access to the leading bytes.
+*/
+
+struct all_bits {};
+struct not_all_bits {};
+
+// Generic version -------------------------------------------------------------
+
+// The generic version uses run time initialization to determine the floating
+// point format. It is capable of handling most formats,
+// but not the Motorola 68K extended double precision format.
+
+// Currently the generic version is used only for extended double precision
+// on Itanium. In all other cases there are specializations of the template
+// that use compile time initialization.
+
+template<class T> struct uint32_t_coverage
+{
+    typedef not_all_bits type;
+};
+
+template<> struct uint32_t_coverage<single_precision_tag>
+{
+    typedef all_bits type;
+};
+
+template<class T, class U> struct fp_traits_impl
+{
+    typedef uint32_t bits;
+    typedef BOOST_DEDUCED_TYPENAME uint32_t_coverage<U>::type coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign = 0x80000000);
+    static uint32_t exponent;
+    static uint32_t flag;
+    static uint32_t mantissa;
+
+    static void init()
+    {
+        if(is_init_) return;
+        do_init_();
+        is_init_ = true;
+    }
+
+    static void get_bits(T x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(T& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+    static size_t offset_;
+    static bool is_init_;
+    static void do_init_();
+};
+
+//..............................................................................
+
+template<class T, class U> uint32_t fp_traits_impl<T,U>::exponent;
+template<class T, class U> uint32_t fp_traits_impl<T,U>::flag;
+template<class T, class U> uint32_t fp_traits_impl<T,U>::mantissa;
+template<class T, class U> size_t   fp_traits_impl<T,U>::offset_;
+template<class T, class U> bool     fp_traits_impl<T,U>::is_init_;
+
+// In a single-threaded program, do_init will be called exactly once.
+// In a multi-threaded program, do_init may be called simultaneously
+// by more then one thread. That should not be a problem.
+
+//..............................................................................
+
+template<class T, class U> void fp_traits_impl<T,U>::do_init_()
+{
+    T x = static_cast<T>(3) / static_cast<T>(4);
+    // sign bit = 0
+    // exponent: first and last bit = 0, all other bits  = 1
+    // flag bit (if present) = 1
+    // mantissa: first bit = 1, all other bits = 0
+
+    uint32_t a;
+
+    for(size_t k = 0; k <= sizeof(T) - 4; ++k) {
+
+        memcpy(&a, reinterpret_cast<unsigned char*>(&x) + k, 4);
+
+        switch(a) {
+
+        case 0x3f400000:      // IEEE single precision format
+
+            offset_  = k;      
+            exponent = 0x7f800000;
+            flag     = 0x00000000;
+            mantissa = 0x007fffff;
+            return;
+
+        case 0x3fe80000:      // IEEE double precision format 
+                              // and PowerPC extended double precision format
+            offset_  = k;      
+            exponent = 0x7ff00000;
+            flag     = 0x00000000;
+            mantissa = 0x000fffff;
+            return;
+
+        case 0x3ffe0000:      // Motorola extended double precision format
+
+            // Must not get here. Must be handled by specialization.
+            // To get accurate cutoff between normals and subnormals
+            // we must use the flag bit that is in the 5th byte.
+            // Otherwise this cutoff will be off by a factor 2.
+            // If we do get here, then we have failed to detect the Motorola
+            // processor at compile time.
+
+            BOOST_ASSERT(false && 
+                "Failed to detect the Motorola processor at compile time");        
+            return;
+
+        case 0x3ffe8000:      // IEEE extended double precision format
+                              // with 15 exponent bits
+            offset_  = k;      
+            exponent = 0x7fff0000;
+            flag     = 0x00000000;
+            mantissa = 0x0000ffff;
+            return;
+
+        case 0x3ffec000:      // Intel extended double precision format
+
+            offset_  = k;
+            exponent = 0x7fff0000;
+            flag     = 0x00008000;
+            mantissa = 0x00007fff;
+            return;
+
+        default:
+            continue;
+        }
+    }
+
+    BOOST_ASSERT(false); 
+
+    // Unknown format.
+}
+
+
+// float (32 bits) -------------------------------------------------------------
+
+template<> struct fp_traits_impl<float, single_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7f800000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x007fffff);
+
+    static void init() {}
+    static void get_bits(float x, uint32_t& a) { memcpy(&a, &x, 4); }
+    static void set_bits(float& x, uint32_t a) { memcpy(&x, &a, 4); }
+};
+
+
+// double (64 bits) ------------------------------------------------------------
+
+#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+
+template<> struct fp_traits_impl<double, double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x000fffff);
+
+    static void init() {}
+
+    static void get_bits(double x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(double& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 4);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+//..............................................................................
+
+#else
+
+template<> struct fp_traits_impl<double, double_precision_tag>
+{
+    typedef uint64_t bits;
+    typedef all_bits coverage;
+
+    static const uint64_t sign     = (uint64_t)0x80000000 << 32;
+    static const uint64_t exponent = (uint64_t)0x7ff00000 << 32;
+    static const uint64_t flag     = 0;
+    static const uint64_t mantissa
+        = ((uint64_t)0x000fffff << 32) + (uint64_t)0xffffffff;
+
+    static void init() {}
+    static void get_bits(double x, uint64_t& a) { memcpy(&a, &x, 8); }
+    static void set_bits(double& x, uint64_t a) { memcpy(&x, &a, 8); }
+};
+
+#endif
+
+
+// long double (64 bits) -------------------------------------------------------
+
+#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+
+template<> struct fp_traits_impl<long double, double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x000fffff);
+
+    static void init() {}
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 4);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+//..............................................................................
+
+#else
+
+template<> struct fp_traits_impl<long double, double_precision_tag>
+{
+    typedef uint64_t bits;
+    typedef all_bits coverage;
+
+    static const uint64_t sign     = (uint64_t)0x80000000 << 32;
+    static const uint64_t exponent = (uint64_t)0x7ff00000 << 32;
+    static const uint64_t flag     = 0;
+    static const uint64_t mantissa
+        = ((uint64_t)0x000fffff << 32) + (uint64_t)0xffffffff;
+
+    static void init() {}
+    static void get_bits(long double x, uint64_t& a) { memcpy(&a, &x, 8); }
+    static void set_bits(long double& x, uint64_t a) { memcpy(&x, &a, 8); }
+};
+
+#endif
+
+
+// long double (>64 bits), x86 and x64 -----------------------------------------
+
+#if defined(__i386) || defined(__i386__) || defined(_M_IX86) \
+    || defined(__amd64) || defined(__amd64__)  || defined(_M_AMD64) \
+    || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)
+
+// Intel extended double precision format (80 bits)
+
+template<> struct fp_traits_impl<long double, extended_double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0x00008000);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x00007fff);
+
+    static void init() {}
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + 6, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + 6, &a, 4);
+    }
+};
+
+
+// long double (>64 bits), Itanium ---------------------------------------------
+
+#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
+
+// The floating point format is unknown at compile time
+// No template specialization is provided.
+// The generic definition is used.
+
+// The Itanium supports both
+// the Intel extended double precision format (80 bits) and
+// the IEEE extended double precision format with 15 exponent bits (128 bits).
+
+
+// long double (>64 bits), PowerPC ---------------------------------------------
+
+#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) \
+    || defined(__ppc) || defined(__ppc__) || defined(__PPC__)
+
+// PowerPC extended double precision format (128 bits)
+
+template<> struct fp_traits_impl<long double, extended_double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x000fffff);
+
+    static void init() {}
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 12);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+
+// long double (>64 bits), Motorola 68K ----------------------------------------
+
+#elif defined(__m68k) || defined(__m68k__) \
+    || defined(__mc68000) || defined(__mc68000__) \
+
+// Motorola extended double precision format (96 bits)
+
+// It is the same format as the Intel extended double precision format,
+// except that 1) it is big-endian, 2) the 3rd and 4th byte are padding, and
+// 3) the flag bit is not set for infinity
+
+template<> struct fp_traits_impl<long double, extended_double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0x00008000);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x00007fff);
+
+    static void init() {}
+
+    // copy 1st, 2nd, 5th and 6th byte. 3rd and 4th byte are padding.
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        memcpy(&a, &x, 2);
+        memcpy(reinterpret_cast<unsigned char*>(&a) + 2,
+               reinterpret_cast<const unsigned char*>(&x) + 4, 2);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        memcpy(&x, &a, 2);
+        memcpy(reinterpret_cast<unsigned char*>(&x) + 4,
+               reinterpret_cast<const unsigned char*>(&a) + 2, 2);
+    }
+};
+
+
+// long double (>64 bits), All other processors --------------------------------
+
+#else
+
+// IEEE extended double precision format with 15 exponent bits (128 bits)
+
+template<> struct fp_traits_impl<long double, extended_double_precision_tag>
+{
+    typedef uint32_t bits;
+    typedef not_all_bits coverage;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign     = 0x80000000);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag     = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, mantissa = 0x0000ffff);
+
+    static void init() {}
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 12);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+#endif
+
+
+//------------------------------------------------------------------------------
+
+// size_to_precision is a type switch for converting a C++ floating point type
+// to the corresponding precision type.
+
+template<int n> struct size_to_precision;
+
+template<> struct size_to_precision<4>
+{
+    typedef single_precision_tag type;
+};
+
+template<> struct size_to_precision<8>
+{
+    typedef double_precision_tag type;
+};
+
+template<> struct size_to_precision<10>
+{
+    typedef extended_double_precision_tag type;
+};
+
+template<> struct size_to_precision<12>
+{
+    typedef extended_double_precision_tag type;
+};
+
+template<> struct size_to_precision<16>
+{
+    typedef extended_double_precision_tag type;
+};
+
+// fp_traits is a type switch that selects the right fp_traits_impl
+
+template<class T> struct fp_traits
+{
+    BOOST_STATIC_ASSERT(boost::is_floating_point<T>::value);
+    typedef BOOST_DEDUCED_TYPENAME size_to_precision<sizeof(T)>::type precision;
+    typedef fp_traits_impl<T, precision> type;
+};
+
+
+//------------------------------------------------------------------------------
+
+}   // namespace detail
+}   // namespace math
+}   // namespace spirit
+}   // namespace boost
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/fpclassify.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/fpclassify.hpp
new file mode 100644 (file)
index 0000000..3659ec8
--- /dev/null
@@ -0,0 +1,235 @@
+// fpclassify.hpp
+
+#ifndef BOOST_SPIRIT_MATH_FPCLASSIFY_HPP
+#define BOOST_SPIRIT_MATH_FPCLASSIFY_HPP
+
+// Copyright (c) 2006 Johan Rade
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+The following algorithm is used:
+
+  If all exponent bits, the flag bit (if there is one), 
+  and all mantissa bits are 0, then the number is zero.
+
+  If all exponent bits and the flag bit (if there is one) are 0, 
+  and at least one mantissa bit is 1, then the number is subnormal.
+
+  If all exponent bits are 1 and all mantissa bits are 0, 
+  then the number is infinity.
+
+  If all exponent bits are 1 and at least one mantissa bit is 1,
+  then the number is a not-a-number.
+
+  Otherwise the number is normal.
+
+(Note that the binary representation of infinity
+has flag bit 0 for Motorola 68K extended double precision,
+and flag bit 1 for Intel extended double precision.)
+
+To get the bits, the four or eight most significant bytes are copied
+into an uint32_t or uint64_t and bit masks are applied.
+This covers all the exponent bits and the flag bit (if there is one),
+but not always all the mantissa bits.
+Some of the functions below have two implementations,
+depending on whether all the mantissa bits are copied or not.
+*/
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cmath>
+
+#ifndef FP_INFINITE
+#   define FP_INFINITE 0
+#   define FP_NAN 1
+#   define FP_NORMAL 2
+#   define FP_SUBNORMAL 3
+#   define FP_ZERO 4
+#endif
+
+#include <boost/spirit/home/support/detail/math/detail/fp_traits.hpp>
+
+namespace boost {
+namespace spirit {
+namespace math {
+    
+//------------------------------------------------------------------------------
+
+template<class T> bool (isfinite)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+
+    BOOST_DEDUCED_TYPENAME traits::bits a;
+    traits::get_bits(x,a);
+    a &= traits::exponent;
+    return a != traits::exponent;
+}
+
+//------------------------------------------------------------------------------
+
+template<class T> bool (isnormal)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+
+    BOOST_DEDUCED_TYPENAME traits::bits a;
+    traits::get_bits(x,a);
+    a &= traits::exponent | traits::flag;
+    return (a != 0) && (a < traits::exponent);
+}
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+    template<class T> bool isinf_impl(T x, all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::mantissa;
+        return a == traits::exponent;
+    }
+
+    template<class T> bool isinf_impl(T x, not_all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::mantissa;
+        if(a != traits::exponent)
+            return false;
+
+        traits::set_bits(x,0);
+        return x == 0;
+    }
+
+}   // namespace detail
+
+template<class T> bool (isinf)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+    return detail::isinf_impl(x, BOOST_DEDUCED_TYPENAME traits::coverage());
+}
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+    template<class T> bool isnan_impl(T x, all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+        traits::init();
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::mantissa;
+        return a > traits::exponent;
+    }
+
+    template<class T> bool isnan_impl(T x, not_all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+        traits::init();
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+
+        a &= traits::exponent | traits::mantissa;
+        if(a < traits::exponent)
+            return false;
+
+        a &= traits::mantissa;
+        traits::set_bits(x,a);
+        return x != 0;
+    }
+
+}   // namespace detail
+
+template<class T> bool (isnan)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+    return detail::isnan_impl(x, BOOST_DEDUCED_TYPENAME traits::coverage());
+}
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+    template<class T> int fpclassify_impl(T x, all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::flag | traits::mantissa;
+
+        if(a <= traits::mantissa) {
+            if(a == 0)
+                return FP_ZERO;
+            else
+                return FP_SUBNORMAL;
+        }
+
+        if(a < traits::exponent)
+            return FP_NORMAL;
+
+        a &= traits::mantissa;
+        if(a == 0)
+            return FP_INFINITE;
+
+        return FP_NAN;
+    }
+
+    template<class T> int fpclassify_impl(T x, not_all_bits)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a); 
+        a &= traits::exponent | traits::flag | traits::mantissa;
+
+        if(a <= traits::mantissa) {
+            if(x == 0)
+                return FP_ZERO;
+            else
+                return FP_SUBNORMAL;
+        }
+            
+        if(a < traits::exponent)
+            return FP_NORMAL;
+
+        a &= traits::mantissa;
+        traits::set_bits(x,a);
+        if(x == 0)
+            return FP_INFINITE;
+        
+        return FP_NAN;
+    }
+
+}   // namespace detail
+
+template<class T> int (fpclassify)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+    return detail::fpclassify_impl(x, BOOST_DEDUCED_TYPENAME traits::coverage());
+}
+
+//------------------------------------------------------------------------------
+
+}   // namespace math
+}   // namespace spirit
+}   // namespace boost
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/signbit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/math/signbit.hpp
new file mode 100644 (file)
index 0000000..045fc3a
--- /dev/null
@@ -0,0 +1,92 @@
+// signbit.hpp
+
+#ifndef BOOST_SPIRIT_MATH_SIGNBIT_HPP
+#define BOOST_SPIRIT_MATH_SIGNBIT_HPP
+
+// Copyright (c) 2006 Johan Rade
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/detail/math/detail/fp_traits.hpp>
+
+namespace boost {
+namespace spirit {
+namespace math {
+
+//------------------------------------------------------------------------------
+
+template<class T> bool (signbit)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+
+    BOOST_DEDUCED_TYPENAME traits::bits a;
+    traits::get_bits(x,a);
+    a &= traits::sign;
+    return a != 0;
+}
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+    template<class T> T copysign_impl(T x, T y)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+        traits::init();
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= ~traits::sign;
+
+        BOOST_DEDUCED_TYPENAME traits::bits b;
+        traits::get_bits(y,b);
+        b &= traits::sign;
+
+        traits::set_bits(x,a|b);
+        return x;
+    }
+}
+
+inline float (copysign)(float x, float y)      // magnitude of x and sign of y
+{
+    return detail::copysign_impl(x,y);
+}
+
+inline double (copysign)(double x, double y)
+{
+    return detail::copysign_impl(x,y);
+}
+
+inline long double (copysign)(long double x, long double y)
+{
+    return detail::copysign_impl(x,y);
+}
+
+//------------------------------------------------------------------------------
+
+template<class T> T (changesign)(T x)
+{
+    typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+    traits::init();
+
+    BOOST_DEDUCED_TYPENAME traits::bits a;
+    traits::get_bits(x,a);
+    a ^= traits::sign;
+    traits::set_bits(x,a);
+    return x;
+}
+
+//------------------------------------------------------------------------------
+
+}   // namespace math
+}   // namespace spirit
+}   // namespace boost
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/pow10.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/pow10.hpp
new file mode 100644 (file)
index 0000000..b49bb58
--- /dev/null
@@ -0,0 +1,113 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_POW10_DECEMBER_26_2008_1118AM)
+#define SPIRIT_POW10_DECEMBER_26_2008_1118AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/limits.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/numeric_traits.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4244)   // conversion from 'double' to 'float', possible loss of data
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename T, typename Enable/* = void*/>
+    struct pow10_helper
+    {
+        static T call(unsigned dim)
+        {
+            using namespace std;    // allow for ADL to find the correct overload
+            return pow(T(10), T(dim));
+        }
+    };
+
+    template <>
+    struct pow10_helper<unused_type>
+    {
+        static unused_type call(unused_type)
+        {
+            return unused;
+        }
+    };
+
+#if (DBL_MAX_10_EXP == 308) // for IEEE-754
+    template <>
+    struct pow10_helper<double>
+    {
+        static double call(unsigned dim)
+        {
+            static double const exponents[] =
+            {
+                1e0,   1e1,   1e2,   1e3,   1e4,   1e5,   1e6,   1e7,   1e8,    1e9,
+                1e10,  1e11,  1e12,  1e13,  1e14,  1e15,  1e16,  1e17,  1e18,  1e19,
+                1e20,  1e21,  1e22,  1e23,  1e24,  1e25,  1e26,  1e27,  1e28,  1e29,
+                1e30,  1e31,  1e32,  1e33,  1e34,  1e35,  1e36,  1e37,  1e38,  1e39,
+                1e40,  1e41,  1e42,  1e43,  1e44,  1e45,  1e46,  1e47,  1e48,  1e49,
+                1e50,  1e51,  1e52,  1e53,  1e54,  1e55,  1e56,  1e57,  1e58,  1e59,
+                1e60,  1e61,  1e62,  1e63,  1e64,  1e65,  1e66,  1e67,  1e68,  1e69,
+                1e70,  1e71,  1e72,  1e73,  1e74,  1e75,  1e76,  1e77,  1e78,  1e79,
+                1e80,  1e81,  1e82,  1e83,  1e84,  1e85,  1e86,  1e87,  1e88,  1e89,
+                1e90,  1e91,  1e92,  1e93,  1e94,  1e95,  1e96,  1e97,  1e98,  1e99,
+                1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109,
+                1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119,
+                1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129,
+                1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139,
+                1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149,
+                1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159,
+                1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169,
+                1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179,
+                1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189,
+                1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199,
+                1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209,
+                1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219,
+                1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229,
+                1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239,
+                1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249,
+                1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259,
+                1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269,
+                1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279,
+                1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289,
+                1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299,
+                1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308,
+            };
+            BOOST_ASSERT(dim < sizeof(exponents)/sizeof(double));
+            return exponents[dim];
+        }
+    };
+
+    template <>
+    struct pow10_helper<float>
+    {
+        static float call(unsigned dim)
+        {
+            return pow10_helper<double>::call(dim);
+        }
+    };
+#endif // for IEEE-754
+
+    template <typename T>
+    inline T pow10(unsigned dim)
+    {
+        return pow10_helper<T>::call(dim);
+    }
+}}}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/scoped_enum_emulation.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/scoped_enum_emulation.hpp
new file mode 100644 (file)
index 0000000..1b35043
--- /dev/null
@@ -0,0 +1,28 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_SPIRIT_SCOPED_ENUM_EMULATION_HPP
+#define BOOST_SPIRIT_SCOPED_ENUM_EMULATION_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/version.hpp>
+#include <boost/config.hpp>
+
+#if BOOST_VERSION >= 104000
+# include <boost/detail/scoped_enum_emulation.hpp>
+#else
+# if !defined(BOOST_NO_CXX11_SCOPED_ENUMS)
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+# endif 
+# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type
+# define BOOST_SCOPED_ENUM_END };
+# define BOOST_SCOPED_ENUM(name) name::enum_type
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/sign.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/sign.hpp
new file mode 100644 (file)
index 0000000..7c1bfb0
--- /dev/null
@@ -0,0 +1,71 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SIGN_MAR_11_2009_0734PM)
+#define SPIRIT_SIGN_MAR_11_2009_0734PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/version.hpp>
+#if BOOST_VERSION < 104000 
+#include <boost/spirit/home/support/detail/math/fpclassify.hpp>
+#include <boost/spirit/home/support/detail/math/signbit.hpp>
+#else
+#include <boost/math/special_functions/fpclassify.hpp>
+#include <boost/math/special_functions/sign.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace detail
+{
+#if BOOST_VERSION < 104000
+    // signbit(-NAN) is broken for versions of Boost earlier than 1.40.0
+    // This routine has been taken and adapted from Johan Rade's fp_traits 
+    // library
+    template<typename T> 
+    inline bool (signbit)(T x)
+    {
+        return (boost::spirit::math::signbit)(x);
+    }
+
+    template<typename T> 
+    inline T (changesign)(T x)
+    {
+        return (boost::spirit::math::changesign)(x);
+    }
+#else
+    template<typename T> 
+    inline bool (signbit)(T x)
+    {
+        return (boost::math::signbit)(x) ? true : false;
+    }
+
+    // This routine has been taken and adapted from Johan Rade's fp_traits 
+    // library
+    template<typename T> 
+    inline T (changesign)(T x)
+    {
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+        return -x;
+#else
+        typedef typename math::detail::fp_traits<T>::type traits_type;
+
+        typename traits_type::bits a;
+        traits_type::get_bits(x, a);
+        a ^= traits_type::sign;
+        traits_type::set_bits(x, a);
+        return x;
+#endif
+    }
+#endif
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/what_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/detail/what_function.hpp
new file mode 100644 (file)
index 0000000..179807b
--- /dev/null
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_WHAT_FUNCTION_APRIL_22_2007_0236PM)
+#define SPIRIT_WHAT_FUNCTION_APRIL_22_2007_0236PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename Context>
+    struct what_function
+    {
+        what_function(info& what_, Context& context_)
+          : what(what_), context(context_)
+        {
+            what.value = std::list<info>();
+        }
+
+        template <typename Component>
+        void operator()(Component const& component) const
+        {
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+            component; // suppresses warning: C4100: 'component' : unreferenced formal parameter
+#endif
+            boost::get<std::list<info> >(what.value).
+                push_back(component.what(context));
+        }
+
+        info& what;
+        Context& context;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        what_function& operator= (what_function const&);
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/extended_variant.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/extended_variant.hpp
new file mode 100644 (file)
index 0000000..d23ca3d
--- /dev/null
@@ -0,0 +1,140 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EXTENDED_VARIANT_AUGUST_6_2011_0859AM)
+#define BOOST_SPIRIT_EXTENDED_VARIANT_AUGUST_6_2011_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/mpl/limits/list.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
+#define BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES BOOST_MPL_LIMIT_LIST_SIZE
+#else
+#define BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES BOOST_VARIANT_LIMIT_TYPES
+#endif
+
+#define BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)                          \
+    BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES, T)        \
+    /**/
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            BOOST_VARIANT_LIMIT_TYPES,
+            typename T, boost::detail::variant::void_)
+            // We should not be depending on detail::variant::void_
+            // but I'm not sure if this can fixed. Any other way is
+            // clumsy at best.
+        >
+    struct extended_variant
+    {
+        // tell spirit that this is an adapted variant
+        struct adapted_variant_tag;
+
+        typedef boost::variant<
+            BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>
+        variant_type;
+        typedef typename variant_type::types types;
+
+        typedef extended_variant<
+            BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)
+        > base_type;
+
+        extended_variant() : var() {}
+
+        template <typename T>
+        extended_variant(T const& var)
+            : var(var) {}
+
+        template <typename T>
+        extended_variant(T& var)
+            : var(var) {}
+
+        template <typename F>
+        typename F::result_type apply_visitor(F const& v)
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F const& v) const
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F& v)
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F& v) const
+        {
+            return var.apply_visitor(v);
+        }
+
+        variant_type const& get() const
+        {
+            return var;
+        }
+
+        variant_type& get()
+        {
+            return var;
+        }
+
+        variant_type var;
+    };
+}}
+
+namespace boost
+{
+    template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
+    inline T const&
+    get(boost::spirit::extended_variant<
+        BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)> const& x)
+    {
+        return boost::get<T>(x.get());
+    }
+
+    template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
+    inline T&
+    get(boost::spirit::extended_variant<
+        BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>& x)
+    {
+        return boost::get<T>(x.get());
+    }
+
+    template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
+    inline T const*
+    get(boost::spirit::extended_variant<
+        BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)> const* x)
+    {
+        return boost::get<T>(&x->get());
+    }
+
+    template <typename T, BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(typename T)>
+    inline T*
+    get(boost::spirit::extended_variant<
+        BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS(T)>* x)
+    {
+        return boost::get<T>(&x->get());
+    }
+}
+
+#undef BOOST_SPIRIT_EXTENDED_VARIANT_ENUM_PARAMS
+#undef BOOST_SPIRIT_EXTENDED_VARIANT_LIMIT_TYPES
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/handles_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/handles_container.hpp
new file mode 100644 (file)
index 0000000..876c9a9
--- /dev/null
@@ -0,0 +1,55 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HANDLES_CONTAINER_DEC_18_2010_0920AM)
+#define BOOST_SPIRIT_HANDLES_CONTAINER_DEC_18_2010_0920AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // Finds out whether a component handles container attributes intrinsically
+    // (or whether container attributes need to be split up separately).
+    template <typename T, typename Attribute, typename Context
+            , typename Iterator, typename Enable>
+    struct handles_container : mpl::false_ {};
+
+    template <typename Subject, typename Attribute, typename Context
+            , typename Iterator>
+    struct unary_handles_container
+      : handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Left, typename Right, typename Attribute
+            , typename Context, typename Iterator>
+    struct binary_handles_container 
+      : mpl::or_<
+            handles_container<Left, Attribute, Context, Iterator>
+          , handles_container<Right, Attribute, Context, Iterator> > 
+    {};
+
+    template <typename Elements, typename Attribute, typename Context
+            , typename Iterator>
+    struct nary_handles_container
+      : mpl::not_<
+            is_same<
+                typename mpl::find_if<
+                    Elements, handles_container<mpl::_, Attribute
+                                              , Context, Iterator> 
+                >::type
+              , typename mpl::end<Elements>::type> > 
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/has_semantic_action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/has_semantic_action.hpp
new file mode 100644 (file)
index 0000000..b4cb4e7
--- /dev/null
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_HAS_SEMANTIC_ACTION_SEP_20_2009_0626PM)
+#define BOOST_SPIRIT_HAS_SEMANTIC_ACTION_SEP_20_2009_0626PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // finding out, whether a component contains a semantic action
+    template <typename T, typename Enable = void>
+    struct has_semantic_action
+      : mpl::false_ {};
+
+    template <typename Subject>
+    struct unary_has_semantic_action 
+      : has_semantic_action<Subject> {};
+
+    template <typename Left, typename Right>
+    struct binary_has_semantic_action 
+      : mpl::or_<has_semantic_action<Left>, has_semantic_action<Right> > {};
+
+    template <typename Elements>
+    struct nary_has_semantic_action
+      : mpl::not_<
+            is_same<
+                typename mpl::find_if<
+                    Elements, has_semantic_action<mpl::_> 
+                >::type
+              , typename mpl::end<Elements>::type
+            > 
+        > {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/info.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/info.hpp
new file mode 100644 (file)
index 0000000..9b991ac
--- /dev/null
@@ -0,0 +1,159 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_INFO_NOVEMBER_22_2008_1132AM)
+#define BOOST_SPIRIT_INFO_NOVEMBER_22_2008_1132AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant/variant.hpp>
+#include <boost/variant/recursive_variant.hpp>
+#include <boost/variant/apply_visitor.hpp>
+#include <boost/foreach.hpp>
+#include <boost/spirit/home/support/utf8.hpp>
+#include <list>
+#include <iterator>
+#include <utility>
+
+namespace boost { namespace spirit
+{
+    // info provides information about a component. Each component
+    // has a what member function that returns an info object.
+    // strings in the info object are assumed to be encoded as UTF8
+    // for uniformity.
+    struct info
+    {
+        struct nil_ {};
+
+        typedef
+            boost::variant<
+                nil_
+              , utf8_string
+              , recursive_wrapper<info>
+              , recursive_wrapper<std::pair<info, info> >
+              , recursive_wrapper<std::list<info> >
+            >
+        value_type;
+
+        explicit info(utf8_string const& tag_)
+          : tag(tag_), value(nil_()) {}
+
+        template <typename T>
+        info(utf8_string const& tag_, T const& value_)
+          : tag(tag_), value(value_) {}
+
+        info(utf8_string const& tag_, char value_)
+          : tag(tag_), value(utf8_string(1, value_)) {}
+
+        info(utf8_string const& tag_, wchar_t value_)
+          : tag(tag_), value(to_utf8(value_)) {}
+
+        info(utf8_string const& tag_, ucs4_char value_)
+          : tag(tag_), value(to_utf8(value_)) {}
+
+        template <typename Char>
+        info(utf8_string const& tag_, Char const* str)
+          : tag(tag_), value(to_utf8(str)) {}
+
+        template <typename Char, typename Traits, typename Allocator>
+        info(utf8_string const& tag_
+              , std::basic_string<Char, Traits, Allocator> const& str)
+          : tag(tag_), value(to_utf8(str)) {}
+
+        utf8_string tag;
+        value_type value;
+    };
+
+    template <typename Callback>
+    struct basic_info_walker
+    {
+        typedef void result_type;
+        typedef basic_info_walker<Callback> this_type;
+
+        basic_info_walker(Callback& callback_, utf8_string const& tag_, int depth_)
+          : callback(callback_), tag(tag_), depth(depth_) {}
+
+        void operator()(info::nil_) const
+        {
+            callback.element(tag, "", depth);
+        }
+
+        void operator()(utf8_string const& str) const
+        {
+            callback.element(tag, str, depth);
+        }
+
+        void operator()(info const& what) const
+        {
+            boost::apply_visitor(
+                this_type(callback, what.tag, depth+1), what.value);
+        }
+
+        void operator()(std::pair<info, info> const& pair) const
+        {
+            callback.element(tag, "", depth);
+            boost::apply_visitor(
+                this_type(callback, pair.first.tag, depth+1), pair.first.value);
+            boost::apply_visitor(
+                this_type(callback, pair.second.tag, depth+1), pair.second.value);
+        }
+
+        void operator()(std::list<info> const& l) const
+        {
+            callback.element(tag, "", depth);
+            BOOST_FOREACH(info const& what, l)
+            {
+                boost::apply_visitor(
+                    this_type(callback, what.tag, depth+1), what.value);
+            }
+        }
+
+        Callback& callback;
+        utf8_string const& tag;
+        int depth;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        basic_info_walker& operator= (basic_info_walker const&);
+    };
+
+    // bare-bones print support
+    template <typename Out>
+    struct simple_printer
+    {
+        typedef utf8_string string;
+
+        simple_printer(Out& out_)
+          : out(out_) {}
+
+        void element(string const& tag, string const& value, int /*depth*/) const
+        {
+            if (value == "")
+                out << '<' << tag << '>';
+            else
+                out << '"' << value << '"';
+        }
+
+        Out& out;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        simple_printer& operator= (simple_printer const&);
+    };
+
+    template <typename Out>
+    Out& operator<<(Out& out, info const& what)
+    {
+        simple_printer<Out> pr(out);
+        basic_info_walker<simple_printer<Out> > walker(pr, what.tag, 0);
+        boost::apply_visitor(walker, what.value);
+        return out;
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
new file mode 100644 (file)
index 0000000..9df2d9c
--- /dev/null
@@ -0,0 +1,90 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_BUF_ID_CHECK_POLICY_MAR_16_2007_1108AM)
+#define BOOST_SPIRIT_ITERATOR_BUF_ID_CHECK_POLICY_MAR_16_2007_1108AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <exception>    // for std::exception
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class illegal_backtracking
+    //  thrown by buf_id_check CheckingPolicy if an instance of an iterator is
+    //  used after another one has invalidated the queue
+    ///////////////////////////////////////////////////////////////////////////
+    class illegal_backtracking : public std::exception
+    {
+    public:
+        illegal_backtracking() throw() {}
+        ~illegal_backtracking() throw() {}
+
+        char const* what() const throw()
+        { 
+            return "boost::spirit::multi_pass::illegal_backtracking"; 
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //  class buf_id_check
+    //  Implementation of the CheckingPolicy used by multi_pass
+    //  This policy is most effective when used together with the std_deque
+    //  StoragePolicy.
+    // 
+    //  If used with the fixed_size_queue StoragePolicy, it will not detect
+    //  iterator dereferences that are out of the range of the queue.
+    ///////////////////////////////////////////////////////////////////////////////
+    struct buf_id_check
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique //: detail::default_checking_policy
+        {
+            unique() : buf_id(0) {}
+            unique(unique const& x) : buf_id(x.buf_id) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(buf_id, x.buf_id);
+            }
+
+            // called to verify that everything is ok.
+            template <typename MultiPass>
+            static void docheck(MultiPass const& mp) 
+            {
+                if (mp.buf_id != mp.shared()->shared_buf_id)
+                    boost::throw_exception(illegal_backtracking());
+            }
+
+            // called from multi_pass::clear_queue, so we can increment the count
+            template <typename MultiPass>
+            static void clear_queue(MultiPass& mp)
+            {
+                ++mp.shared()->shared_buf_id;
+                ++mp.buf_id;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+        protected:
+            unsigned long buf_id;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        struct shared
+        {
+            shared() : shared_buf_id(0) {}
+            unsigned long shared_buf_id;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp
new file mode 100644 (file)
index 0000000..c5cc430
--- /dev/null
@@ -0,0 +1,128 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_BUFFERING_ITERATOR_INPUT_ITERATOR_POLICY_MAR_04_2010_1224AM)
+#define BOOST_SPIRIT_BUFFERING_ITERATOR_INPUT_ITERATOR_POLICY_MAR_04_2010_1224AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class input_iterator
+    //
+    //  Implementation of the InputPolicy used by multi_pass, this is different 
+    //  from the input_iterator policy only as it is buffering the last input
+    //  character to allow returning it by reference. This is needed for
+    //  wrapping iterators not buffering the last item (such as the 
+    //  std::istreambuf_iterator). Unfortunately there is no way to 
+    //  automatically figure this out at compile time.
+    // 
+    //  The buffering_input_iterator encapsulates an input iterator of type T
+    ///////////////////////////////////////////////////////////////////////////
+    struct buffering_input_iterator
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        class unique // : public detail::default_input_policy
+        {
+        private:
+            typedef
+                typename boost::detail::iterator_traits<T>::value_type
+            result_type;
+
+        public:
+            typedef
+                typename boost::detail::iterator_traits<T>::difference_type
+            difference_type;
+            typedef
+                typename boost::detail::iterator_traits<T>::difference_type
+            distance_type;
+            typedef
+                typename boost::detail::iterator_traits<T>::pointer
+            pointer;
+            typedef result_type& reference;
+            typedef result_type value_type;
+
+        protected:
+            unique() {}
+            explicit unique(T x) {}
+
+            void swap(unique&) {}
+
+        public:
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                return mp.shared()->get_input();
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                BOOST_ASSERT(0 != mp.shared());
+                mp.shared()->advance_input();
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                static T const end_iter;
+                return mp.shared()->input_ == end_iter;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const& mp, value_type const& t) 
+            {
+                return mp.shared()->input_is_valid_;
+            }
+
+            // no unique data elements
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared
+        {
+            typedef
+                typename boost::detail::iterator_traits<T>::value_type
+            result_type;
+
+            explicit shared(T const& input) 
+              : input_(input), curtok_(0), input_is_valid_(false) {}
+
+            void advance_input()
+            {
+                ++input_;
+                input_is_valid_ = false;
+            }
+
+            result_type& get_input()
+            {
+                if (!input_is_valid_) {
+                    curtok_ = *input_;
+                    input_is_valid_ = true;
+                }
+                return curtok_;
+            }
+
+            T input_;
+            result_type curtok_;
+            bool input_is_valid_;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/combine_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/combine_policies.hpp
new file mode 100644 (file)
index 0000000..06946b8
--- /dev/null
@@ -0,0 +1,520 @@
+//  Copyright (c) 2001-2012 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_COMBINE_POLICIES_APR_06_2008_0136PM)
+#define BOOST_SPIRIT_ITERATOR_COMBINE_POLICIES_APR_06_2008_0136PM
+
+#include <boost/config.hpp>
+#include <boost/type_traits/is_empty.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  The purpose of the multi_pass_unique template is to eliminate
+    //  empty policy classes (policies not containing any data items) from the
+    //  multiple inheritance chain. This is necessary since some compilers
+    //  fail to apply the empty base optimization if multiple inheritance is
+    //  involved.
+    //  Additionally this can be used to combine separate policies into one
+    //  single multi_pass_policy as required by the multi_pass template
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    // select the correct derived classes based on if a policy is empty
+    template <typename T
+      , typename Ownership, typename Checking, typename Input, typename Storage
+      , bool OwnershipIsEmpty = boost::is_empty<Ownership>::value
+      , bool CheckingIsEmpty = boost::is_empty<Checking>::value
+      , bool InputIsEmpty = boost::is_empty<Input>::value>
+    struct multi_pass_unique;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, false, false>
+      : Ownership, Checking, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Ownership::swap(x);
+            this->Checking::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, false, true>
+      : Ownership, Checking, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Ownership::swap(x);
+            this->Checking::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, true, false>
+      : Ownership, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Ownership::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp)
+            { Checking::docheck(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , false, true, true>
+      : Ownership, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Ownership::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Ownership::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp)
+            { Checking::docheck(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, false, false>
+      : Checking, Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Checking::swap(x);
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp)
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, false, true>
+      : Checking, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Checking::destroy(mp);
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Checking::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp)
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, true, false>
+      : Input, Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T& x) : Input(x) {}
+        multi_pass_unique(T const& x) : Input(x) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Input::swap(x);
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp)
+            { Checking::docheck(mp); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp)
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Ownership, typename Checking
+      , typename Input, typename Storage>
+    struct multi_pass_unique<T, Ownership, Checking, Input, Storage
+          , true, true, true>
+      : Storage
+    {
+        multi_pass_unique() {}
+        multi_pass_unique(T const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass& mp)
+        {
+            Input::destroy(mp);
+            Storage::destroy(mp);
+        }
+
+        void swap(multi_pass_unique& x)
+        {
+            this->Storage::swap(x);
+        }
+
+        template <typename MultiPass>
+        inline static void clear_queue(MultiPass& mp)
+        {
+            Checking::clear_queue(mp);
+            Storage::clear_queue(mp);
+        }
+
+        // implement input policy functions by forwarding to the Input type
+        template <typename MultiPass>
+        inline static void advance_input(MultiPass& mp)
+            { Input::advance_input(mp); }
+
+        template <typename MultiPass>
+        inline static typename MultiPass::reference get_input(MultiPass& mp)
+            { return Input::get_input(mp); }
+
+        template <typename MultiPass>
+        inline static bool input_at_eof(MultiPass const& mp)
+            { return Input::input_at_eof(mp); }
+
+        template <typename MultiPass, typename TokenType>
+        inline static bool input_is_valid(MultiPass& mp, TokenType& curtok)
+            { return Input::input_is_valid(mp, curtok); }
+
+        // checking policy functions are forwarded to the Checking type
+        template <typename MultiPass>
+        inline static void docheck(MultiPass const& mp)
+            { Checking::docheck(mp); }
+
+        // ownership policy functions are forwarded to the Ownership type
+        template <typename MultiPass>
+        inline static void clone(MultiPass& mp)
+            { Ownership::clone(mp); }
+
+        template <typename MultiPass>
+        inline static bool release(MultiPass& mp)
+            { return Ownership::release(mp); }
+
+        template <typename MultiPass>
+        inline static bool is_unique(MultiPass const& mp)
+            { return Ownership::is_unique(mp); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the multi_pass_shared structure is used to combine the shared data items
+    // of all policies into one single structure
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Ownership, typename Checking, typename Input
+      , typename Storage>
+    struct multi_pass_shared : Ownership, Checking, Input, Storage
+    {
+        explicit multi_pass_shared(T& input) : Input(input) {}
+        explicit multi_pass_shared(T const& input) : Input(input) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  This is a default implementation of a policy class as required by the
+    //  multi_pass template, combining 4 separate policies into one. Any other
+    //  multi_pass policy class needs to follow the scheme as shown below.
+    template<typename Ownership, typename Checking, typename Input
+      , typename Storage>
+    struct default_policy
+    {
+        typedef Ownership ownership_policy;
+        typedef Checking checking_policy;
+        typedef Input input_policy;
+        typedef Storage storage_policy;
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct unique : multi_pass_unique<T
+          , typename Ownership::unique, typename Checking::unique
+          , typename Input::BOOST_NESTED_TEMPLATE unique<T>
+          , typename Storage::BOOST_NESTED_TEMPLATE unique<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type> >
+        {
+            typedef typename Ownership::unique ownership_policy;
+            typedef typename Checking::unique checking_policy;
+            typedef typename Input::BOOST_NESTED_TEMPLATE unique<T>
+                input_policy;
+            typedef typename Storage::BOOST_NESTED_TEMPLATE unique<
+                typename input_policy::value_type> storage_policy;
+
+            typedef multi_pass_unique<T, ownership_policy, checking_policy
+              , input_policy, storage_policy> unique_base_type;
+
+            unique() {}
+            explicit unique(T& input) : unique_base_type(input) {}
+            explicit unique(T const& input) : unique_base_type(input) {}
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared : multi_pass_shared<T
+          , typename Ownership::shared, typename Checking::shared
+          , typename Input::BOOST_NESTED_TEMPLATE shared<T>
+          , typename Storage::BOOST_NESTED_TEMPLATE shared<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type> >
+        {
+            typedef typename Ownership::shared ownership_policy;
+            typedef typename Checking::shared checking_policy;
+            typedef typename Input::BOOST_NESTED_TEMPLATE shared<T>
+                input_policy;
+            typedef typename Storage::BOOST_NESTED_TEMPLATE shared<
+                typename Input::BOOST_NESTED_TEMPLATE unique<T>::value_type>
+            storage_policy;
+
+            typedef multi_pass_shared<T, ownership_policy, checking_policy
+              , input_policy, storage_policy> shared_base_type;
+
+            explicit shared(T& input)
+              : shared_base_type(input), inhibit_clear_queue_(false) {}
+            explicit shared(T const& input)
+              : shared_base_type(input), inhibit_clear_queue_(false) {}
+
+            // This is needed for the correct implementation of expectation
+            // points. Normally expectation points flush any multi_pass
+            // iterator they may act on, but if the corresponding error handler
+            // is of type 'retry' no flushing of the internal buffers should be
+            // executed (even if explicitly requested).
+            bool inhibit_clear_queue_;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp
new file mode 100644 (file)
index 0000000..73d6ee1
--- /dev/null
@@ -0,0 +1,62 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_FIRST_OWNER_POLICY_MAR_16_2007_1108AM)
+#define BOOST_SPIRIT_ITERATOR_FIRST_OWNER_POLICY_MAR_16_2007_1108AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class first_owner
+    //  Implementation of an OwnershipPolicy used by multi_pass
+    //  This ownership policy dictates that the first iterator created will
+    //  determine the lifespan of the shared components.  This works well for
+    //  spirit, since no dynamic allocation of iterators is done, and all 
+    //  copies are make on the stack.
+    //
+    //  There is a caveat about using this policy together with the std_deque
+    //  StoragePolicy. Since first_owner always returns false from unique(),
+    //  std_deque will only release the queued data if clear_queue() is called.
+    ///////////////////////////////////////////////////////////////////////////
+    struct first_owner
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique : detail::default_ownership_policy
+        {
+            unique() : first(true) {}
+            unique(unique const&) : first(false) {}
+
+            // return true to indicate deletion of resources
+            template <typename MultiPass>
+            static bool release(MultiPass& mp)
+            {
+                return mp.first;
+            }
+
+            // use swap from default policy
+            // if we're the first, we still remain the first, even if assigned
+            // to, so don't swap first.  swap is only called from operator=
+
+            template <typename MultiPass>
+            static bool is_unique(MultiPass const&) 
+            {
+                return false; // no way to know, so always return false
+            }
+
+        protected:
+            bool first;
+        };
+
+        ////////////////////////////////////////////////////////////////////////
+        struct shared {};   // no shared data
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp
new file mode 100644 (file)
index 0000000..1ba6fc0
--- /dev/null
@@ -0,0 +1,392 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_FIXED_SIZE_QUEUE_MAR_16_2007_1137AM)
+#define BOOST_SPIRIT_ITERATOR_FIXED_SIZE_QUEUE_MAR_16_2007_1137AM
+
+#include <cstdlib>
+#include <iterator>
+#include <cstddef>
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>   // for BOOST_ASSERT
+#include <boost/iterator_adaptors.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//  Make sure we're using a decent version of the Boost.IteratorAdaptors lib
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+    BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the fixed_size_queue class!"
+#endif 
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_ASSERT_FSQ_SIZE                                          \
+    BOOST_ASSERT(((m_tail + N + 1) - m_head) % (N+1) == m_size % (N+1))       \
+    /**/
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Queue, typename T, typename Pointer>
+    class fsq_iterator
+    :   public boost::iterator_facade<
+            fsq_iterator<Queue, T, Pointer>, T,
+            std::random_access_iterator_tag
+        >
+    {
+    public:
+        typedef typename Queue::position_type position_type;
+        typedef boost::iterator_facade<
+                fsq_iterator<Queue, T, Pointer>, T,
+                std::random_access_iterator_tag
+            > base_type;
+
+        fsq_iterator() {}
+        fsq_iterator(position_type const &p_) : p(p_) {}
+
+        position_type &get_position() { return p; }
+        position_type const &get_position() const { return p; }
+
+    private:
+        friend class boost::iterator_core_access;
+
+        typename base_type::reference dereference() const
+        {
+            return p.self->m_queue[p.pos];
+        }
+
+        void increment()
+        {
+            ++p.pos;
+            if (p.pos == Queue::MAX_SIZE+1)
+                p.pos = 0;
+        }
+
+        void decrement()
+        {
+            if (p.pos == 0)
+                p.pos = Queue::MAX_SIZE;
+            else
+                --p.pos;
+        }
+
+        bool is_eof() const
+        {
+            return p.self == 0 || p.pos == p.self->size();
+        }
+
+        template <typename Q, typename T_, typename P>   
+        bool equal(fsq_iterator<Q, T_, P> const &x) const
+        {
+            if (is_eof())
+                return x.is_eof();
+            if (x.is_eof())
+                return false;
+
+            position_type const &rhs_pos = x.get_position();
+            return (p.self == rhs_pos.self) && (p.pos == rhs_pos.pos);
+        }
+
+        template <typename Q, typename T_, typename P>   
+        typename base_type::difference_type distance_to(
+            fsq_iterator<Q, T_, P> const &x) const
+        {
+            typedef typename base_type::difference_type difference_type;
+
+            position_type const &p2 = x.get_position();
+            std::size_t pos1 = p.pos;
+            std::size_t pos2 = p2.pos;
+
+            //  Undefined behavior if the iterators come from different
+            //  containers
+            BOOST_ASSERT(p.self == p2.self);
+
+            if (pos1 < p.self->m_head)
+                pos1 += Queue::MAX_SIZE;
+            if (pos2 < p2.self->m_head)
+                pos2 += Queue::MAX_SIZE;
+
+            if (pos2 > pos1)
+                return difference_type(pos2 - pos1);
+            else
+                return -difference_type(pos1 - pos2);
+        }
+
+        void advance(typename base_type::difference_type n)
+        {
+            //  Notice that we don't care values of n that can
+            //  wrap around more than one time, since it would
+            //  be undefined behavior anyway (going outside
+            //  the begin/end range). Negative wrapping is a bit
+            //  cumbersome because we don't want to case p.pos
+            //  to signed.
+            if (n < 0)
+            {
+                n = -n;
+                if (p.pos < (std::size_t)n)
+                    p.pos = Queue::MAX_SIZE+1 - (n - p.pos);
+                else
+                    p.pos -= n;
+            }
+            else
+            {
+                p.pos += n;
+                if (p.pos >= Queue::MAX_SIZE+1)
+                    p.pos -= Queue::MAX_SIZE+1;
+            }
+        }
+
+    private:
+        position_type p;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, std::size_t N>
+    class fixed_size_queue
+    {
+    private:
+        struct position
+        {
+            fixed_size_queue* self;
+            std::size_t pos;
+
+            position() : self(0), pos(0) {}
+
+            // The const_cast here is just to avoid to have two different
+            //  position structures for the const and non-const case.
+            // The const semantic is guaranteed by the iterator itself
+            position(const fixed_size_queue* s, std::size_t p)
+              : self(const_cast<fixed_size_queue*>(s)), pos(p)
+            {}
+
+            bool is_initialized() const { return self != 0; }
+            void set_queue(fixed_size_queue* q) { self = q; }
+        };
+
+    public:
+        // Declare the iterators
+        typedef fsq_iterator<fixed_size_queue<T, N>, T, T*> iterator;
+        typedef 
+            fsq_iterator<fixed_size_queue<T, N>, T const, T const*> 
+        const_iterator;
+        typedef position position_type;
+
+        friend class fsq_iterator<fixed_size_queue<T, N>, T, T*>;
+        friend class fsq_iterator<fixed_size_queue<T, N>, T const, T const*>;
+
+        fixed_size_queue();
+        fixed_size_queue(const fixed_size_queue& x);
+        fixed_size_queue& operator=(const fixed_size_queue& x);
+        ~fixed_size_queue();
+
+        void push_back(const T& e);
+        void push_front(const T& e);
+        void serve(T& e);
+        void pop_front();
+
+        bool empty() const
+        {
+            return m_size == 0;
+        }
+
+        bool full() const
+        {
+            return m_size == N;
+        }
+
+        iterator begin()
+        {
+            return iterator(position(this, m_head));
+        }
+
+        const_iterator begin() const
+        {
+            return const_iterator(position(this, m_head));
+        }
+
+        iterator end()
+        {
+            return iterator(position(0, m_tail));
+        }
+
+        const_iterator end() const
+        {
+            return const_iterator(position(0, m_tail));
+        }
+
+        std::size_t size() const
+        {
+            return m_size;
+        }
+
+        T& front()
+        {
+            return m_queue[m_head];
+        }
+
+        const T& front() const
+        {
+            return m_queue[m_head];
+        }
+
+    private:
+        // Redefine the template parameters to avoid using partial template
+        //  specialization on the iterator policy to extract N.
+        BOOST_STATIC_CONSTANT(std::size_t, MAX_SIZE = N);
+
+        std::size_t m_head;
+        std::size_t m_tail;
+        std::size_t m_size;
+        T m_queue[N+1];
+    };
+
+    template <typename T, std::size_t N>
+    inline
+    fixed_size_queue<T, N>::fixed_size_queue()
+        : m_head(0)
+        , m_tail(0)
+        , m_size(0)
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+    template <typename T, std::size_t N>
+    inline
+    fixed_size_queue<T, N>::fixed_size_queue(const fixed_size_queue& x)
+        : m_head(x.m_head)
+        , m_tail(x.m_tail)
+        , m_size(x.m_size)
+    {
+        copy(x.begin(), x.end(), begin());
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+    template <typename T, std::size_t N>
+    inline fixed_size_queue<T, N>&
+    fixed_size_queue<T, N>::operator=(const fixed_size_queue& x)
+    {
+        if (this != &x)
+        {
+            m_head = x.m_head;
+            m_tail = x.m_tail;
+            m_size = x.m_size;
+            copy(x.begin(), x.end(), begin());
+        }
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+
+        return *this;
+    }
+
+    template <typename T, std::size_t N>
+    inline
+    fixed_size_queue<T, N>::~fixed_size_queue()
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+    template <typename T, std::size_t N>
+    inline void
+    fixed_size_queue<T, N>::push_back(const T& e)
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+
+        BOOST_ASSERT(!full());
+
+        m_queue[m_tail] = e;
+        ++m_size;
+        ++m_tail;
+        if (m_tail == N+1)
+            m_tail = 0;
+
+
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+    template <typename T, std::size_t N>
+    inline void
+    fixed_size_queue<T, N>::push_front(const T& e)
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+
+        BOOST_ASSERT(!full());
+
+        if (m_head == 0)
+            m_head = N;
+        else
+            --m_head;
+
+        m_queue[m_head] = e;
+        ++m_size;
+
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+
+    template <typename T, std::size_t N>
+    inline void
+    fixed_size_queue<T, N>::serve(T& e)
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+
+        e = m_queue[m_head];
+        pop_front();
+    }
+
+
+
+    template <typename T, std::size_t N>
+    inline void
+    fixed_size_queue<T, N>::pop_front()
+    {
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+
+        ++m_head;
+        if (m_head == N+1)
+            m_head = 0;
+        --m_size;
+
+        BOOST_ASSERT(m_size <= N+1);
+        BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+        BOOST_ASSERT(m_head <= N+1);
+        BOOST_ASSERT(m_tail <= N+1);
+    }
+
+}}} 
+
+#undef BOOST_SPIRIT_ASSERT_FSQ_SIZE
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp
new file mode 100644 (file)
index 0000000..283c747
--- /dev/null
@@ -0,0 +1,128 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_FIXED_SIZE_QUEUE_POLICY_MAR_16_2007_1134AM)
+#define BOOST_SPIRIT_ITERATOR_FIXED_SIZE_QUEUE_POLICY_MAR_16_2007_1134AM
+
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp>
+#include <boost/assert.hpp>
+#include <cstdlib>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class fixed_size_queue
+    //  Implementation of the StoragePolicy used by multi_pass
+    //  fixed_size_queue keeps a circular buffer (implemented by
+    //  boost::spirit::fixed_size_queue class) that is size N+1 and stores N 
+    //  elements.
+    // 
+    //  It is up to the user to ensure that there is enough look ahead for 
+    //  their grammar. Currently there is no way to tell if an iterator is 
+    //  pointing to forgotten data. The leading iterator will put an item in 
+    //  the queue and remove one when it is incremented. No dynamic allocation 
+    //  is done, except on creation of the queue (fixed_size_queue constructor).
+    ///////////////////////////////////////////////////////////////////////////
+    template <std::size_t N>
+    struct fixed_size_queue
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        class unique : public detail::default_storage_policy
+        {
+        private:
+            typedef detail::fixed_size_queue<Value, N> queue_type;
+
+        protected:
+            unique() {}
+
+            unique(unique const& x)
+              : queued_position(x.queued_position) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(queued_position, x.queued_position);
+            }
+
+            //  This is called when the iterator is dereferenced. It's a 
+            //  template method so we can recover the type of the multi_pass 
+            //  iterator and access the m_input data member.
+            template <typename MultiPass>
+            static typename MultiPass::reference 
+            dereference(MultiPass const& mp)
+            {
+                if (!mp.queued_position.get_position().is_initialized())
+                   mp.queued_position.get_position().set_queue(&mp.shared()->queued_elements);
+
+                if (mp.queued_position == mp.shared()->queued_elements.end())
+                    return MultiPass::get_input(mp);
+
+                return *mp.queued_position;
+            }
+
+            //  This is called when the iterator is incremented. It's a 
+            //  template method so we can recover the type of the multi_pass 
+            //  iterator and access the m_input data member.
+            template <typename MultiPass>
+            static void increment(MultiPass& mp)
+            {
+                if (!mp.queued_position.get_position().is_initialized())
+                    mp.queued_position.get_position().set_queue(&mp.shared()->queued_elements);
+
+                if (mp.queued_position == mp.shared()->queued_elements.end())
+                {
+                    // don't let the queue get larger than N
+                    if (mp.shared()->queued_elements.size() >= N)
+                        mp.shared()->queued_elements.pop_front();
+
+                    mp.shared()->queued_elements.push_back(
+                        MultiPass::get_input(mp));
+                    MultiPass::advance_input(mp);
+                }
+                ++mp.queued_position;
+            }
+
+            // clear_queue is a no-op
+
+            // called to determine whether the iterator is an eof iterator
+            template <typename MultiPass>
+            static bool is_eof(MultiPass const& mp)
+            {
+                return mp.queued_position == mp.shared()->queued_elements.end() &&
+                       MultiPass::input_at_eof(mp);
+            }
+
+            // called by operator==
+            template <typename MultiPass>
+            static bool equal_to(MultiPass const& mp, MultiPass const& x) 
+            {
+                return mp.queued_position == x.queued_position;
+            }
+
+            // called by operator<
+            template <typename MultiPass>
+            static bool less_than(MultiPass const& mp, MultiPass const& x)
+            {
+                return mp.queued_position < x.queued_position;
+            }
+
+        protected:
+            mutable typename queue_type::iterator queued_position;
+        }; 
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        struct shared
+        {
+            typedef detail::fixed_size_queue<Value, N> queue_type;
+            queue_type queued_elements;
+        }; 
+    }; 
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/functor_input_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/functor_input_policy.hpp
new file mode 100644 (file)
index 0000000..da59285
--- /dev/null
@@ -0,0 +1,114 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_16_2008_0448M)
+#define BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_16_2008_0448M
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    namespace is_valid_test_
+    {
+        template <typename Token>
+        inline bool token_is_valid(Token const&)
+        {
+            return true;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  class functor_input
+    //  Implementation of the InputPolicy used by multi_pass
+    //  functor_input gets tokens from a functor
+    // 
+    //  Note: the functor must have a typedef for result_type
+    //        It also must have a static variable of type result_type defined 
+    //        to represent EOF that is called eof.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct functor_input
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor>
+        class unique : public detail::default_input_policy
+        {
+        private:
+            typedef typename Functor::result_type result_type;
+
+        protected:
+            unique() {}
+            explicit unique(Functor const& x) : ftor(x) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(ftor, x.ftor);
+            }
+
+        public:
+            typedef result_type value_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef result_type* pointer;
+            typedef result_type& reference;
+
+        public:
+            // get the next token
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                if (!input_is_valid(mp, curtok))
+                    curtok = mp.ftor();
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                // if mp.shared is NULL then this instance of the multi_pass 
+                // represents a end iterator
+                BOOST_ASSERT(0 != mp.shared());
+                mp.shared()->curtok = mp.ftor();
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == mp.ftor.eof;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                using namespace is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            Functor& get_functor() const
+            {
+                return ftor;
+            }
+
+        protected:
+            mutable Functor ftor;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor>
+        struct shared
+        {
+            explicit shared(Functor const&) : curtok(0) {}
+
+            typename Functor::result_type curtok;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp
new file mode 100644 (file)
index 0000000..f2e81e8
--- /dev/null
@@ -0,0 +1,111 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_INPUT_ITERATOR_POLICY_MAR_16_2007_1156AM)
+#define BOOST_SPIRIT_ITERATOR_INPUT_ITERATOR_POLICY_MAR_16_2007_1156AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    namespace input_iterator_is_valid_test_
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Token>
+        inline bool token_is_valid(Token const& c)
+        {
+            return c ? true : false;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  class input_iterator
+    //  Implementation of the InputPolicy used by multi_pass
+    // 
+    //  The input_iterator encapsulates an input iterator of type T
+    ///////////////////////////////////////////////////////////////////////////
+    struct input_iterator
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        class unique // : public detail::default_input_policy
+        {
+        private:
+            typedef
+                typename boost::detail::iterator_traits<T>::value_type
+            result_type;
+
+        public:
+            typedef
+                typename boost::detail::iterator_traits<T>::difference_type
+            difference_type;
+            typedef
+                typename boost::detail::iterator_traits<T>::difference_type
+            distance_type;
+            typedef
+                typename boost::detail::iterator_traits<T>::pointer
+            pointer;
+            typedef
+                typename boost::detail::iterator_traits<T>::reference
+            reference;
+            typedef result_type value_type;
+
+        protected:
+            unique() {}
+            explicit unique(T x) {}
+
+            void swap(unique&) {}
+
+        public:
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                return *mp.shared()->input_;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                ++mp.shared()->input_;
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                static T const end_iter;
+                return mp.shared()->input_ == end_iter;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const& mp, value_type const& t) 
+            {
+                using namespace input_iterator_is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            // no unique data elements
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared
+        {
+            explicit shared(T const& input) : input_(input) {}
+
+            T input_;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/istream_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/istream_policy.hpp
new file mode 100644 (file)
index 0000000..0e5064a
--- /dev/null
@@ -0,0 +1,124 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ISTREAM_POLICY_JAN_04_2010_0130PM)
+#define BOOST_SPIRIT_ISTREAM_POLICY_JAN_04_2010_0130PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class istream
+    //  Implementation of the InputPolicy used by multi_pass
+    // 
+    //  The istream encapsulates an std::basic_istream
+    ///////////////////////////////////////////////////////////////////////////
+    struct istream
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        class unique // : public detail::default_input_policy
+        {
+        private:
+            typedef typename T::char_type result_type;
+
+        public:
+            typedef typename T::off_type difference_type;
+            typedef typename T::off_type distance_type;
+            typedef result_type const* pointer;
+            typedef result_type const& reference;
+            typedef result_type value_type;
+
+        protected:
+            unique() {}
+            explicit unique(T&) {}
+
+            void swap(unique&) {}
+
+        public:
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                if (!mp.shared()->initialized_)
+                    mp.shared()->read_one();
+                return mp.shared()->curtok_;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                // We invalidate the currently cached input character to avoid
+                // reading more input from the underlying iterator than 
+                // required. Without this we would always read ahead one 
+                // character, even if this character never gets consumed by the 
+                // client.
+                mp.shared()->peek_one();
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->eof_reached_;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const& mp, value_type const&) 
+            {
+                return mp.shared()->initialized_;
+            }
+
+            // no unique data elements
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared
+        {
+        private:
+            typedef typename T::char_type result_type;
+
+        public:
+            explicit shared(T& input) 
+              : input_(input), curtok_(-1)
+              , initialized_(false), eof_reached_(false) 
+            {
+                peek_one();   // istreams may be at eof right in the beginning
+            }
+
+            void read_one()
+            {
+                if (!(input_ >> curtok_)) {
+                    initialized_ = false;
+                    eof_reached_ = true;
+                }
+                else {
+                    initialized_ = true;
+                }
+            }
+
+            void peek_one()
+            {
+                input_.peek();    // try for eof
+                initialized_ = false;
+                eof_reached_ = input_.eof();
+            }
+
+            T& input_;
+            result_type curtok_;
+            bool initialized_;
+            bool eof_reached_;
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp
new file mode 100644 (file)
index 0000000..9fece37
--- /dev/null
@@ -0,0 +1,86 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_LEX_INPUT_POLICY_MAR_16_2007_1205PM)
+#define BOOST_SPIRIT_ITERATOR_LEX_INPUT_POLICY_MAR_16_2007_1205PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////////
+    //  class lex_input
+    //  Implementation of the InputPolicy used by multi_pass
+    // 
+    //  The lex_input class gets tokens (integers) from yylex()
+    ///////////////////////////////////////////////////////////////////////////
+    struct lex_input
+    {
+        typedef int value_type;
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        class unique : public detail::default_input_policy
+        {
+        public:
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef int* pointer;
+            typedef int& reference;
+
+        protected:
+            unique() {}
+            explicit unique(T) {}
+
+        public:
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                if (-1 == curtok)
+                {
+                    extern int yylex();
+                    curtok = yylex();
+                }
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                extern int yylex();
+                mp.shared()->curtok = yylex();
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == 0;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                return -1 != t;
+            }
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename T>
+        struct shared
+        {
+            explicit shared(T) : curtok(-1) {}
+
+            value_type curtok;
+        };
+    };
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/multi_pass.hpp
new file mode 100644 (file)
index 0000000..8f8e6c7
--- /dev/null
@@ -0,0 +1,109 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/iterator.hpp>
+#include <boost/mpl/bool.hpp>
+#include <iterator>
+#include <algorithm> 
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace detail
+{
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default implementations of the different policies to be used with a 
+    //  multi_pass iterator
+    ///////////////////////////////////////////////////////////////////////////
+    struct default_input_policy
+    {
+        default_input_policy() {}
+
+        template <typename Functor>
+        default_input_policy(Functor const&) {}
+
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_input_policy&) {}
+
+        template <typename MultiPass, typename TokenType>
+        static void advance_input(MultiPass& mp);
+
+        template <typename MultiPass>
+        static typename MultiPass::reference get_input(MultiPass& mp);
+
+        template <typename MultiPass>
+        static bool input_at_eof(MultiPass const& mp);
+
+        template <typename MultiPass, typename TokenType>
+        static bool input_is_valid(MultiPass& mp, TokenType& curtok);
+    };
+
+    struct default_ownership_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_ownership_policy&) {}
+
+        template <typename MultiPass>
+        static void clone(MultiPass&) {}
+
+        template <typename MultiPass>
+        static bool release(MultiPass& mp);
+
+        template <typename MultiPass>
+        static bool is_unique(MultiPass const& mp);
+    };
+
+    struct default_storage_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_storage_policy&) {}
+
+        template <typename MultiPass>
+        static typename MultiPass::reference dereference(MultiPass const& mp);
+
+        template <typename MultiPass>
+        static void increment(MultiPass&) {}
+
+        template <typename MultiPass>
+        static void clear_queue(MultiPass&) {}
+
+        template <typename MultiPass>
+        static bool is_eof(MultiPass const& mp);
+
+        template <typename MultiPass>
+        static bool equal_to(MultiPass const& mp, MultiPass const& x);
+
+        template <typename MultiPass>
+        static bool less_than(MultiPass const& mp, MultiPass const& x);
+    };
+
+    struct default_checking_policy
+    {
+        template <typename MultiPass>
+        static void destroy(MultiPass&) {}
+
+        void swap(default_checking_policy&) {}
+
+        template <typename MultiPass>
+        static void docheck(MultiPass const&) {}
+
+        template <typename MultiPass>
+        static void clear_queue(MultiPass&) {}
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/no_check_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
new file mode 100644 (file)
index 0000000..8f4a26d
--- /dev/null
@@ -0,0 +1,31 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_NO_CHECK_POLICY_MAR_16_2007_1121AM)
+#define BOOST_SPIRIT_ITERATOR_NO_CHECK_POLICY_MAR_16_2007_1121AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class no_check
+    //  Implementation of the CheckingPolicy used by multi_pass
+    //  It does not do anything :-)
+    ///////////////////////////////////////////////////////////////////////////
+    struct no_check
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique : public detail::default_checking_policy {};
+
+        ///////////////////////////////////////////////////////////////////////
+        struct shared {};
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
new file mode 100644 (file)
index 0000000..723bbee
--- /dev/null
@@ -0,0 +1,79 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM)
+#define BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#if defined(BOOST_HAS_THREADS)
+#include <boost/detail/atomic_count.hpp>
+#endif
+#include <cstdlib>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class ref_counted
+    //  Implementation of an OwnershipPolicy used by multi_pass.
+    //
+    //  Implementation modified from RefCounted class from the Loki library by
+    //  Andrei Alexandrescu.
+    ///////////////////////////////////////////////////////////////////////////
+    struct ref_counted
+    {
+        ///////////////////////////////////////////////////////////////////////
+        struct unique // : detail::default_ownership_policy
+        {
+            void swap(unique&) {}
+
+            // clone is called when a copy of the iterator is made, so 
+            // increment the ref-count.
+            template <typename MultiPass>
+            static void clone(MultiPass& mp)
+            {
+                if (0 != mp.shared())
+                    ++mp.shared()->count;
+            }
+
+            // called when a copy is deleted. Decrement the ref-count. Return
+            // value of true indicates that the last copy has been released.
+            template <typename MultiPass>
+            static bool release(MultiPass& mp)
+            {
+                return 0 != mp.shared() && 0 == --mp.shared()->count;
+            }
+
+            // returns true if there is only one iterator in existence.
+            // std_deque StoragePolicy will free it's buffered data if this
+            // returns true.
+            template <typename MultiPass>
+            static bool is_unique(MultiPass const& mp) 
+            {
+                return 0 == mp.shared() || 1 == mp.shared()->count;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+        };
+
+        ////////////////////////////////////////////////////////////////////////
+        struct shared
+        {
+            shared() : count(1) {}
+
+#if defined(BOOST_HAS_THREADS)
+            boost::detail::atomic_count count;
+#else
+            std::size_t count;
+#endif
+        };
+
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
new file mode 100644 (file)
index 0000000..711ae90
--- /dev/null
@@ -0,0 +1,201 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_17_2008_0103PM)
+#define BOOST_SPIRIT_ITERATOR_SPLIT_FUNCTOR_INPUT_POLICY_JAN_17_2008_0103PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_empty.hpp>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    namespace split_functor_input_is_valid_test_
+    {
+        template <typename Token>
+        inline bool token_is_valid(Token const&)
+        {
+            return true;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  class split_functor_input
+    //  Implementation of the InputPolicy used by multi_pass
+    //  split_functor_input gets tokens from a functor
+    // 
+    //  This policy should be used when the functor holds two parts of data: a
+    //  unique part (unique for each instance of the iterator) and a shared 
+    //  part (to be shared between the different copies of the same iterator).
+    //  Using this policy allows to merge the shared part of the functor with 
+    //  the shared part of the iterator data, saving one pointer and one 
+    //  allocation per iterator instance.
+    //
+    //  The Functor template parameter of this policy is expected to be a 
+    //  std::pair<unique, shared>, where 'unique' and 'shared' represent the
+    //  respective parts of the functor itself.
+    //
+    //  Note: the unique part of the functor must have a typedef for result_type
+    //        It also must have a static variable of type result_type defined 
+    //        to represent EOF that is called eof.
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    struct split_functor_input
+    {
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor
+          , bool FunctorIsEmpty = is_empty<typename Functor::first_type>::value>
+        class unique;
+
+        // the unique part of the functor is empty, do not include the functor 
+        // as a member at all to avoid unnecessary padding bytes to be included 
+        // into the generated structure
+        template <typename Functor>
+        class unique<Functor, true> // : public detail::default_input_policy
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        public:
+            typedef result_type value_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef result_type const* pointer;
+            typedef result_type const& reference;
+
+        protected:
+            unique() {}
+            explicit unique(Functor const&) {}
+
+        public:
+            void swap(unique&) {}
+
+            // get the next token
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                using namespace split_functor_input_is_valid_test_;
+                if (!token_is_valid(curtok))
+                    functor_type::get_next(mp, curtok);
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                functor_type::get_next(mp, mp.shared()->curtok);
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == functor_type::eof;
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                using namespace split_functor_input_is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass& mp) 
+            {
+                functor_type::destroy(mp);
+            }
+        };
+
+        // the unique part of the functor is non-empty
+        template <typename Functor>
+        class unique<Functor, false> : public unique<Functor, true>
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        protected:
+            unique() {}
+            explicit unique(Functor const& x) : ftor(x.first) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(ftor, x.ftor);
+            }
+
+        public:
+            typedef result_type value_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef std::ptrdiff_t distance_type;
+            typedef result_type const* pointer;
+            typedef result_type const& reference;
+
+        public:
+            // get the next token
+            template <typename MultiPass>
+            static typename MultiPass::reference get_input(MultiPass& mp)
+            {
+                value_type& curtok = mp.shared()->curtok;
+                using namespace split_functor_input_is_valid_test_;
+                if (!token_is_valid(curtok))
+                    functor_type::get_next(mp, curtok);
+                return curtok;
+            }
+
+            template <typename MultiPass>
+            static void advance_input(MultiPass& mp)
+            {
+                mp.ftor.get_next(mp, mp.shared()->curtok);
+            }
+
+            template <typename MultiPass>
+            static bool input_is_valid(MultiPass const&, value_type const& t) 
+            {
+                using namespace split_functor_input_is_valid_test_;
+                return token_is_valid(t);
+            }
+
+            // test, whether we reached the end of the underlying stream
+            template <typename MultiPass>
+            static bool input_at_eof(MultiPass const& mp) 
+            {
+                return mp.shared()->curtok == mp.ftor.eof;
+            }
+
+            typename Functor::first_type& get_functor() const
+            {
+                return ftor;
+            }
+
+            mutable functor_type ftor;
+        };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Functor>
+        struct shared
+        {
+        protected:
+            typedef typename Functor::first_type functor_type;
+            typedef typename functor_type::result_type result_type;
+
+        public:
+            explicit shared(Functor const& x) : ftor(x.second), curtok(0) {}
+
+            mutable typename Functor::second_type ftor;
+            result_type curtok;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            shared& operator= (shared const&);
+        };
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
new file mode 100644 (file)
index 0000000..402956b
--- /dev/null
@@ -0,0 +1,170 @@
+//  Copyright (c) 2001 Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_SPLIT_DEQUE_POLICY_APR_06_2008_0138PM)
+#define BOOST_SPIRIT_ITERATOR_SPLIT_DEQUE_POLICY_APR_06_2008_0138PM
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/assert.hpp>
+#include <vector>
+
+namespace boost { namespace spirit { namespace iterator_policies
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  class split_std_deque
+    //
+    //  Implementation of the StoragePolicy used by multi_pass
+    //  This stores all data in a std::vector (despite its name), and keeps an 
+    //  offset to the current position. It stores all the data unless there is 
+    //  only one iterator using the queue.
+    // 
+    ///////////////////////////////////////////////////////////////////////////
+    struct split_std_deque
+    {
+        enum { threshold = 16 };
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        class unique //: public detail::default_storage_policy
+        {
+        private:
+            typedef std::vector<Value> queue_type;
+
+        protected:
+            unique() : queued_position(0) {}
+
+            unique(unique const& x)
+              : queued_position(x.queued_position) {}
+
+            void swap(unique& x)
+            {
+                boost::swap(queued_position, x.queued_position);
+            }
+
+            // This is called when the iterator is dereferenced.  It's a 
+            // template method so we can recover the type of the multi_pass 
+            // iterator and call advance_input and input_is_valid.
+            template <typename MultiPass>
+            static typename MultiPass::reference 
+            dereference(MultiPass const& mp)
+            {
+                queue_type& queue = mp.shared()->queued_elements;
+                typename queue_type::size_type size = queue.size();
+
+                BOOST_ASSERT(mp.queued_position <= size);
+
+                if (mp.queued_position == size)
+                {
+                    // check if this is the only iterator
+                    if (size >= threshold && MultiPass::is_unique(mp))
+                    {
+                        // free up the memory used by the queue.
+                        queue.clear();
+                        mp.queued_position = 0;
+                    }
+                    return MultiPass::get_input(mp);
+                }
+
+                return queue[mp.queued_position];
+            }
+
+            // This is called when the iterator is incremented. It's a template
+            // method so we can recover the type of the multi_pass iterator
+            // and call is_unique and advance_input.
+            template <typename MultiPass>
+            static void increment(MultiPass& mp)
+            {
+                queue_type& queue = mp.shared()->queued_elements;
+                typename queue_type::size_type size = queue.size();
+
+                BOOST_ASSERT(mp.queued_position <= size);
+
+//                 // do not increment iterator as long as the current token is
+//                 // invalid
+//                 if (size > 0 && !MultiPass::input_is_valid(mp, queue[mp.queued_position-1]))
+//                     return;
+
+                if (mp.queued_position == size)
+                {
+                    // check if this is the only iterator
+                    if (size >= threshold && MultiPass::is_unique(mp))
+                    {
+                        // free up the memory used by the queue. we avoid 
+                        // clearing the queue on every increment, though, 
+                        // because this would be too time consuming
+                        queue.clear();
+                        mp.queued_position = 0;
+                    }
+                    else
+                    {
+                        queue.push_back(MultiPass::get_input(mp));
+                        ++mp.queued_position;
+                    }
+                    MultiPass::advance_input(mp);
+                }
+                else
+                {
+                    ++mp.queued_position;
+                }
+            }
+
+            // called to forcibly clear the queue
+            template <typename MultiPass>
+            static void clear_queue(MultiPass& mp)
+            {
+                mp.shared()->queued_elements.clear();
+                mp.queued_position = 0;
+            }
+
+            // called to determine whether the iterator is an eof iterator
+            template <typename MultiPass>
+            static bool is_eof(MultiPass const& mp)
+            {
+                return mp.queued_position == mp.shared()->queued_elements.size() 
+                    && MultiPass::input_at_eof(mp);
+            }
+
+            // called by operator==
+            template <typename MultiPass>
+            static bool equal_to(MultiPass const& mp, MultiPass const& x) 
+            {
+                return mp.queued_position == x.queued_position;
+            }
+
+            // called by operator<
+            template <typename MultiPass>
+            static bool less_than(MultiPass const& mp, MultiPass const& x)
+            {
+                return mp.queued_position < x.queued_position;
+            }
+
+            template <typename MultiPass>
+            static void destroy(MultiPass&) {}
+
+        protected:
+            mutable typename queue_type::size_type queued_position;
+        }; 
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Value>
+        struct shared
+        {
+            shared() 
+            {
+                queued_elements.reserve(threshold); 
+            }
+
+            typedef std::vector<Value> queue_type;
+            queue_type queued_elements;
+        }; 
+
+    }; // split_std_deque
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/istream_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/istream_iterator.hpp
new file mode 100644 (file)
index 0000000..b232be5
--- /dev/null
@@ -0,0 +1,80 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ISTREAM_ITERATOR_JAN_03_2010_0522PM)
+#define BOOST_SPIRIT_ISTREAM_ITERATOR_JAN_03_2010_0522PM
+
+#include <boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp>
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp>
+#else
+#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
+#endif
+#include <boost/spirit/home/support/iterators/detail/istream_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass.hpp>
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elem, typename Traits = std::char_traits<Elem> >
+    class basic_istream_iterator :
+        public multi_pass<
+            std::basic_istream<Elem, Traits>
+          , iterator_policies::default_policy<
+                iterator_policies::ref_counted
+#if defined(BOOST_SPIRIT_DEBUG)
+              , iterator_policies::buf_id_check
+#else
+              , iterator_policies::no_check
+#endif
+              , iterator_policies::istream
+              , iterator_policies::split_std_deque> 
+        >
+    {
+    private:
+        typedef multi_pass<
+            std::basic_istream<Elem, Traits>
+          , iterator_policies::default_policy<
+                iterator_policies::ref_counted
+#if defined(BOOST_SPIRIT_DEBUG)
+              , iterator_policies::buf_id_check
+#else
+              , iterator_policies::no_check
+#endif
+              , iterator_policies::istream
+              , iterator_policies::split_std_deque> 
+        > base_type;
+
+    public:
+        basic_istream_iterator()
+          : base_type() {}
+
+        explicit basic_istream_iterator(std::basic_istream<Elem, Traits>& x)
+          : base_type(x) {}
+
+        basic_istream_iterator(basic_istream_iterator const& x)
+          : base_type(x) {}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        basic_istream_iterator(int)   // workaround for a bug in the library
+          : base_type() {}            // shipped with gcc 3.1
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+        basic_istream_iterator operator= (base_type const& rhs)
+        {
+            this->base_type::operator=(rhs);
+            return *this;
+        }
+
+    // default generated operators, destructor and assignment operator are ok.
+    };
+
+    typedef basic_istream_iterator<char> istream_iterator;
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/line_pos_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/line_pos_iterator.hpp
new file mode 100644 (file)
index 0000000..0b2aec8
--- /dev/null
@@ -0,0 +1,180 @@
+/*==============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2010      Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#if !defined(BOOST_SPIRIT_SUPPORT_LINE_POS_ITERATOR)
+#define BOOST_SPIRIT_SUPPORT_LINE_POS_ITERATOR
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit
+{
+    //[line_pos_iterator_class
+    /*`The `line_pos_iterator` is a lightweight line position iterator.
+       This iterator adapter only stores the current line number, nothing else.
+       Unlike __classic__'s `position_iterator`, it does not store the
+       column number and does not need an end iterator. The current column can
+       be computed, if needed. */
+    //`[heading Class Reference]
+    template <class Iterator>
+    class line_pos_iterator : public boost::iterator_adaptor<
+        line_pos_iterator<Iterator>  // Derived
+      , Iterator                     // Base
+      , boost::use_default           // Value
+      , boost::forward_traversal_tag // CategoryOrTraversal
+    > {
+    public:
+        line_pos_iterator();
+
+        explicit line_pos_iterator(Iterator);
+
+        std::size_t position() const;
+
+    private:
+        friend class boost::iterator_core_access;
+
+        void increment();
+
+        std::size_t line; // The line position.
+        typename std::iterator_traits<Iterator>::value_type prev;
+    };
+    //]
+
+    template <class Iterator>
+    line_pos_iterator<Iterator>::line_pos_iterator() :
+        line_pos_iterator::iterator_adaptor_(), line(1), prev(0) { }
+
+    template <class Iterator>
+    line_pos_iterator<Iterator>::line_pos_iterator(Iterator base) :
+        line_pos_iterator::iterator_adaptor_(base), line(1), prev(0) { }
+
+    template <class Iterator>
+    std::size_t line_pos_iterator<Iterator>::position() const
+    {
+        return line;
+    }
+    template<class Iterator>
+    void line_pos_iterator<Iterator>::increment()
+    {
+        typename std::iterator_traits<Iterator>::reference
+          ref = *(this->base());
+      
+        switch (ref) {
+          case '\r':
+            if (prev != '\n')
+              ++line;
+            break;
+          case '\n':
+            if (prev != '\r')
+              ++line;
+            break;
+          default:
+            break;
+        }
+      
+        prev = ref;
+        ++this->base_reference();
+    }
+
+    //[line_pos_iterator_utilities
+    //`[heading get_line]
+    template <class Iterator>
+    inline std::size_t get_line(Iterator);
+    /*`Get the line position. Returns -1 if Iterator is not a
+       `line_pos_iterator`. */
+
+    //`[heading get_line_start]
+    template <class Iterator>
+    inline Iterator get_line_start(Iterator lower_bound, Iterator current); 
+    /*`Get an iterator to the beginning of the line. Applicable to any
+       iterator. */
+
+    //`[heading get_current_line]
+    template <class Iterator>
+    inline iterator_range<Iterator>
+    get_current_line(Iterator lower_bound, Iterator current,
+                     Iterator upper_bound); 
+    /*`Get an `iterator_range` containing the current line. Applicable to any
+       iterator. */ 
+
+    //`[heading get_column]
+    template <class Iterator>
+    inline std::size_t get_column(Iterator lower_bound, Iterator current,
+                                  std::size_t tabs = 4); 
+    /*`Get the current column. Applicable to any iterator. */ 
+    //]
+
+    template <class Iterator>
+    inline std::size_t get_line(Iterator)
+    {
+        return -1;
+    }
+    
+    template <class Iterator>
+    inline std::size_t get_line(line_pos_iterator<Iterator> i)
+    {
+        return i.position();
+    }
+    
+    template <class Iterator>
+    inline Iterator get_line_start(Iterator lower_bound, Iterator current)
+    {
+        Iterator latest = lower_bound;
+      
+        for (Iterator i = lower_bound; i != current; ++i) {
+          switch (*i) {
+            case '\r':
+            case '\n':
+              latest = i;
+          }
+        }
+      
+        return latest;
+    }
+    
+    template <class Iterator>
+    inline iterator_range<Iterator>
+    get_current_line(Iterator lower_bound,
+                     Iterator current,
+                     Iterator upper_bound)
+    {
+        Iterator first = get_line_start(lower_bound, current);
+        Iterator last = get_line_start(current, upper_bound);
+      
+        if (last == current)
+          last = upper_bound;
+      
+        return iterator_range<Iterator>(first, last);
+    }
+    
+    template <class Iterator>
+    inline std::size_t get_column(Iterator lower_bound,
+                                  Iterator current,
+                                  std::size_t tabs)
+    {
+        std::size_t column = 1;
+        Iterator first = get_line_start(lower_bound, current);
+      
+        for (Iterator i = first; i != current; ++i) {
+          switch (*i) {
+            case '\t':
+              column += tabs - (column - 1) % tabs;
+              break;
+            default:
+              ++column;
+          }
+        }
+      
+        return column;
+    }
+
+}}
+
+#endif // BOOST_SPIRIT_SUPPORT_LINE_POS_ITERATOR
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/look_ahead.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/look_ahead.hpp
new file mode 100644 (file)
index 0000000..039dfe2
--- /dev/null
@@ -0,0 +1,69 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_LOOK_AHEAD_MAR_16_2007_1253PM)
+#define BOOST_SPIRIT_ITERATOR_LOOK_AHEAD_MAR_16_2007_1253PM
+
+#include <boost/spirit/home/support/iterators/detail/first_owner_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass.hpp>
+
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  this could be a template typedef, since such a thing doesn't
+    //  exist in C++, we'll use inheritance to accomplish the same thing.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, std::size_t N>
+    class look_ahead :
+        public multi_pass<T
+          , iterator_policies::default_policy<
+                iterator_policies::first_owner
+              , iterator_policies::no_check
+              , iterator_policies::input_iterator
+              , iterator_policies::fixed_size_queue<N> > 
+        >
+    {
+    private:
+        typedef multi_pass<T
+          , iterator_policies::default_policy<
+                iterator_policies::first_owner
+              , iterator_policies::no_check
+              , iterator_policies::input_iterator
+              , iterator_policies::fixed_size_queue<N> > 
+        > base_type;
+
+    public:
+        look_ahead()
+          : base_type() {}
+
+        explicit look_ahead(T x)
+          : base_type(x) {}
+
+        look_ahead(look_ahead const& x)
+          : base_type(x) {}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        look_ahead(int)         // workaround for a bug in the library
+          : base_type() {}      // shipped with gcc 3.1
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+        look_ahead operator= (base_type const& rhs)
+        {
+            this->base_type::operator=(rhs);
+            return *this;
+        }
+
+    // default generated operators destructor and assignment operator are ok.
+    };
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass.hpp
new file mode 100644 (file)
index 0000000..3fc2440
--- /dev/null
@@ -0,0 +1,245 @@
+//  Copyright (c) 2001, Daniel C. Nuffer
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  http://spirit.sourceforge.net/
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1124AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1124AM
+
+#include <boost/config.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
+#include <boost/limits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The default multi_pass instantiation uses a ref-counted std_deque scheme.
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename T, typename Policies>
+    class multi_pass
+      : private boost::base_from_member<
+            typename Policies::BOOST_NESTED_TEMPLATE shared<T>*>
+      , public Policies::BOOST_NESTED_TEMPLATE unique<T>
+    {
+    private:
+        // unique and shared data types
+        typedef typename Policies::BOOST_NESTED_TEMPLATE unique<T>
+            policies_base_type;
+        typedef typename Policies::BOOST_NESTED_TEMPLATE shared<T>
+            shared_data_type;
+
+        typedef boost::base_from_member<shared_data_type*> member_base;
+
+        // define the types the standard embedded iterator typedefs are taken
+        // from
+        typedef typename policies_base_type::input_policy iterator_type;
+
+    public:
+        // standard iterator typedefs
+        typedef std::forward_iterator_tag iterator_category;
+        typedef typename iterator_type::value_type value_type;
+        typedef typename iterator_type::difference_type difference_type;
+        typedef typename iterator_type::distance_type distance_type;
+        typedef typename iterator_type::reference reference;
+        typedef typename iterator_type::pointer pointer;
+
+        multi_pass() : member_base(static_cast<shared_data_type*>(0)) {}
+
+        explicit multi_pass(T& input)
+          : member_base(new shared_data_type(input)), policies_base_type(input) {}
+
+        explicit multi_pass(T const& input)
+          : member_base(new shared_data_type(input)), policies_base_type(input) {}
+
+        multi_pass(multi_pass const& x)
+          : member_base(x.member), policies_base_type(x)
+        {
+            policies_base_type::clone(*this);
+        }
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+        // The standard library shipped with gcc-3.1 has a bug in
+        // bits/basic_string.tcc. It tries to use iter::iter(0) to
+        // construct an iterator. Ironically, this  happens in sanity
+        // checking code that isn't required by the standard.
+        // The workaround is to provide an additional constructor that
+        // ignores its int argument and behaves like the default constructor.
+        multi_pass(int) : member_base(static_cast<shared_data_type*>(0)) {}
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+        ~multi_pass()
+        {
+            if (policies_base_type::release(*this)) {
+                policies_base_type::destroy(*this);
+                delete this->member;
+            }
+        }
+
+        multi_pass& operator=(multi_pass const& x)
+        {
+            if (this != &x) {
+                multi_pass temp(x);
+                temp.swap(*this);
+            }
+            return *this;
+        }
+
+        void swap(multi_pass& x)
+        {
+            boost::swap(this->member, x.member);
+            this->policies_base_type::swap(x);
+        }
+
+        reference operator*() const
+        {
+            policies_base_type::docheck(*this);
+            return policies_base_type::dereference(*this);
+        }
+        pointer operator->() const
+        {
+            return &(operator*());
+        }
+
+        multi_pass& operator++()
+        {
+            policies_base_type::docheck(*this);
+            policies_base_type::increment(*this);
+            return *this;
+        }
+        multi_pass operator++(int)
+        {
+            multi_pass tmp(*this);
+            ++*this;
+            return tmp;
+        }
+
+        void clear_queue(BOOST_SCOPED_ENUM(traits::clear_mode) mode =
+            traits::clear_mode::clear_if_enabled)
+        {
+            if (mode == traits::clear_mode::clear_always || !inhibit_clear_queue())
+                policies_base_type::clear_queue(*this);
+        }
+        bool inhibit_clear_queue() const
+        {
+            return this->member->inhibit_clear_queue_;
+        }
+        void inhibit_clear_queue(bool flag)
+        {
+            this->member->inhibit_clear_queue_ = flag;
+        }
+
+        bool operator==(multi_pass const& y) const
+        {
+            if (is_eof())
+                return y.is_eof();
+            if (y.is_eof())
+                return false;
+
+            return policies_base_type::equal_to(*this, y);
+        }
+        bool operator<(multi_pass const& y) const
+        {
+            return policies_base_type::less_than(*this, y);
+        }
+
+        bool operator!=(multi_pass const& y)
+        {
+            return !(*this == y);
+        }
+        bool operator>(multi_pass const& y)
+        {
+            return y < *this;
+        }
+        bool operator>=(multi_pass const& y)
+        {
+            return !(*this < y);
+        }
+        bool operator<=(multi_pass const& y)
+        {
+            return !(y < *this);
+        }
+
+        // allow access to base member
+        shared_data_type* shared() const { return this->member; }
+
+    private: // helper functions
+        bool is_eof() const
+        {
+            return (0 == this->member) || policies_base_type::is_eof(*this);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Generator function
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Policies, typename T>
+    inline multi_pass<T, Policies>
+    make_multi_pass(T& i)
+    {
+        return multi_pass<T, Policies>(i);
+    }
+    template <typename Policies, typename T>
+    inline multi_pass<T, Policies>
+    make_multi_pass(T const& i)
+    {
+        return multi_pass<T, Policies>(i);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    inline multi_pass<T>
+    make_default_multi_pass(T& i)
+    {
+        return multi_pass<T>(i);
+    }
+    template <typename T>
+    inline multi_pass<T>
+    make_default_multi_pass(T const& i)
+    {
+        return multi_pass<T>(i);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Policies>
+    inline void
+    swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y)
+    {
+        x.swap(y);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // define special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+    namespace traits
+    {
+        template <typename T, typename Policies>
+        void clear_queue(multi_pass<T, Policies>& mp
+          , BOOST_SCOPED_ENUM(traits::clear_mode) mode)
+        {
+            mp.clear_queue(mode);
+        }
+
+        template <typename T, typename Policies>
+        void inhibit_clear_queue(multi_pass<T, Policies>& mp, bool flag)
+        {
+            mp.inhibit_clear_queue(flag);
+        }
+
+        template <typename T, typename Policies>
+        bool inhibit_clear_queue(multi_pass<T, Policies>& mp)
+        {
+            return mp.inhibit_clear_queue();
+        }
+    }
+
+}} // namespace boost::spirit
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
new file mode 100644 (file)
index 0000000..4724d11
--- /dev/null
@@ -0,0 +1,91 @@
+/*=============================================================================
+    Copyright (c) 2007 Tobias Schwinger
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM
+
+#include <cstddef>
+#include <boost/spirit/home/support/multi_pass_wrapper.hpp>
+#include <boost/swap.hpp>
+
+namespace boost { namespace spirit {
+
+    namespace iterator_policies
+    {
+        // input policies
+        struct input_iterator;
+        struct buffering_input_iterator;
+        struct istream;
+        struct lex_input;
+        struct functor_input;
+        struct split_functor_input;
+
+        // ownership policies
+        struct ref_counted;
+        struct first_owner;
+
+        // checking policies
+        class illegal_backtracking;
+        struct buf_id_check;
+        struct no_check;
+
+        // storage policies
+        struct split_std_deque;
+        template<std::size_t N> struct fixed_size_queue;
+
+        // policy combiner
+#if defined(BOOST_SPIRIT_DEBUG)
+        template<typename Ownership = ref_counted
+          , typename Checking = buf_id_check
+          , typename Input = buffering_input_iterator
+          , typename Storage = split_std_deque>
+        struct default_policy;
+#else
+        template<typename Ownership = ref_counted
+          , typename Checking = no_check
+          , typename Input = buffering_input_iterator
+          , typename Storage = split_std_deque>
+        struct default_policy;
+#endif
+    }
+
+    template <typename T
+      , typename Policies = iterator_policies::default_policy<> >
+    class multi_pass;
+
+    template <typename T, typename Policies>
+    void swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y);
+
+}} // namespace boost::spirit
+
+namespace boost { namespace spirit { namespace traits
+{
+    // declare special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+
+    // multi_pass iterators require special handling (for the non-specialized
+    // versions of these functions see support/multi_pass_wrapper.hpp)
+    template <typename T, typename Policies>
+    void clear_queue(multi_pass<T, Policies>&
+      , BOOST_SCOPED_ENUM(clear_mode) mode = clear_mode::clear_if_enabled);
+
+    template <typename T, typename Policies>
+    void inhibit_clear_queue(multi_pass<T, Policies>&, bool);
+
+    template <typename T, typename Policies>
+    bool inhibit_clear_queue(multi_pass<T, Policies>&);
+
+    // Helper template to recognize a multi_pass iterator. This specialization
+    // will be instantiated for any multi_pass iterator.
+    template <typename T, typename Policies>
+    struct is_multi_pass<multi_pass<T, Policies> > : mpl::true_ {};
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/ostream_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/iterators/ostream_iterator.hpp
new file mode 100644 (file)
index 0000000..b51e8ca
--- /dev/null
@@ -0,0 +1,16 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_OSTREAM_ITERATOR_JAN_13_2010_0211PM)
+#define BOOST_SPIRIT_OSTREAM_ITERATOR_JAN_13_2010_0211PM
+
+#include <boost/spirit/home/karma/stream/ostream_iterator.hpp>
+
+namespace boost { namespace spirit 
+{
+    typedef karma::ostream_iterator<char, char> ostream_iterator;
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/lazy.hpp
new file mode 100644 (file)
index 0000000..5af9846
--- /dev/null
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_LAZY_NOVEMBER_04_2008_1157AM)
+#define BOOST_SPIRIT_LAZY_NOVEMBER_04_2008_1157AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/proto/proto.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename Eval>
+    typename proto::terminal<phoenix::actor<Eval> >::type
+    lazy(phoenix::actor<Eval> const& f)
+    {
+        return proto::terminal<phoenix::actor<Eval> >::type::make(f);
+    }
+
+    namespace tag
+    {
+        struct lazy_eval 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
+    }
+
+    template <typename Domain>
+    struct is_modifier_directive<Domain, tag::lazy_eval>
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/limits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/limits.hpp
new file mode 100644 (file)
index 0000000..8abb4f1
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_SUPPORT_LIMITS_MAR_26_2011_0833PM)
+#define BOOST_SPIRIT_SUPPORT_LIMITS_MAR_26_2011_0833PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+
+#if !defined(SPIRIT_ARGUMENTS_LIMIT)
+# define SPIRIT_ARGUMENTS_LIMIT BOOST_PHOENIX_LIMIT
+#endif
+#if !defined(SPIRIT_ATTRIBUTES_LIMIT)
+# define SPIRIT_ATTRIBUTES_LIMIT BOOST_PHOENIX_LIMIT
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/make_component.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/make_component.hpp
new file mode 100644 (file)
index 0000000..3868475
--- /dev/null
@@ -0,0 +1,447 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MAKE_COMPONENT_OCTOBER_16_2008_1250PM
+#define BOOST_SPIRIT_MAKE_COMPONENT_OCTOBER_16_2008_1250PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/proto/proto.hpp>
+#include <boost/spirit/home/support/detail/make_cons.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+
+namespace boost { namespace spirit
+{
+    // There is no real "component" class. Each domain is responsible
+    // for creating its own components. You need to specialize this for
+    // each component in your domain. Use this as a guide.
+
+    template <typename Domain, typename Tag, typename Enable = void>
+    struct make_component
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Elements, typename Modifiers>
+        struct result<This(Elements, Modifiers)>;
+
+        template <typename Elements, typename Modifiers>
+        typename result<make_component(Elements, Modifiers)>::type
+        operator()(Elements const& elements, Modifiers const& modifiers) const;
+    };
+
+    namespace tag
+    {
+        // Normally, we use proto tags as-is to distinguish operators.
+        // The special case is proto::tag::subscript. Spirit uses this
+        // as either sementic actions or directives. To distinguish between
+        // the two, we use these special tags below.
+
+        struct directive;
+        struct action;
+    }
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct flatten_tree;
+}}
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename Expr, typename State, typename Data, typename Domain>
+    struct make_terminal_impl
+      : proto::transform_impl<Expr, State, Data>
+    {
+        typedef typename
+            proto::result_of::value<Expr>::type 
+        value;
+
+        typedef typename result_of::make_cons<value>::type elements;
+
+        typedef
+            make_component<Domain, proto::tag::terminal>
+        make_component_;
+
+        typedef typename
+            make_component_::template
+                result<make_component_(elements, Data)>::type
+        result_type;
+
+        result_type operator()(
+            typename make_terminal_impl::expr_param expr
+          , typename make_terminal_impl::state_param /*state*/
+          , typename make_terminal_impl::data_param data
+        ) const
+        {
+            return typename make_terminal_impl::make_component_()(
+                detail::make_cons(proto::value(expr))
+              , data
+            );
+        }
+    };
+
+    template <typename Expr, typename State, typename Data, typename Domain>
+    struct make_terminal_impl<phoenix::actor<Expr>, State, Data, Domain>
+      : proto::transform_impl<phoenix::actor<Expr>, State, Data>
+    {
+        typedef phoenix::actor<Expr> value;
+        typedef typename result_of::make_cons<value>::type elements;
+        typedef make_component<Domain, proto::tag::terminal> make_component_;
+
+        typedef typename
+            make_component_::template
+                result<make_component_(elements, Data)>::type
+        result_type;
+
+        result_type operator()(
+            typename make_terminal_impl::expr_param expr
+          , typename make_terminal_impl::state_param /*state*/
+          , typename make_terminal_impl::data_param data
+        ) const
+        {
+            return typename make_terminal_impl::make_component_()(
+                detail::make_cons(expr)
+              , data
+            );
+        }
+    };
+
+    template <typename Expr, typename State, typename Data, typename Domain>
+    struct make_terminal_impl<phoenix::actor<Expr> &, State, Data, Domain>
+        : make_terminal_impl<phoenix::actor<Expr>, State, Data, Domain>
+    {};
+
+    template <typename Expr, typename State, typename Data, typename Domain>
+    struct make_terminal_impl<phoenix::actor<Expr> const &, State, Data, Domain>
+        : make_terminal_impl<phoenix::actor<Expr>, State, Data, Domain>
+    {};
+
+    template <typename Domain>
+    struct make_terminal : proto::transform<make_terminal<Domain> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : make_terminal_impl<Expr, State, Data, Domain> {};
+    };
+
+    template <typename Domain, typename Tag, typename Grammar>
+    struct make_unary : proto::transform<make_unary<Domain, Tag, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::result_of::child_c<Expr, 0>::type
+            child;
+
+            typedef typename Grammar::
+                template result<Grammar(child, State, Data)>::type
+            child_component;
+
+            typedef typename
+                result_of::make_cons<child_component>::type
+            elements;
+
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return typename impl::make_component_()(
+                    detail::make_cons(
+                        Grammar()(proto::child(expr), state, data))
+                  , data
+                );
+            }
+        };
+    };
+
+    // un-flattened version
+    template <typename Domain, typename Tag, typename Grammar,
+        bool flatten = flatten_tree<Domain, Tag>::value>
+    struct make_binary
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 0>::type
+                  , State, Data)>::type
+            lhs_component;
+
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 1>::type
+                  , State, Data)>::type
+            rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    lhs_component
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                elements_type elements =
+                    detail::make_cons(
+                        Grammar()(
+                            proto::child_c<0>(expr), state, data)       // LHS
+                      , detail::make_cons(
+                            Grammar()(
+                                proto::child_c<1>(expr), state, data)   // RHS
+                        )
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+
+    template <typename Grammar>
+    struct make_binary_helper : proto::transform<make_binary_helper<Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(Expr, State, Data)>::type
+            lhs;
+
+            typedef typename result_of::make_cons<lhs, State>::type result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return detail::make_cons(Grammar()(expr, state, data), state);
+            }
+        };
+    };
+
+    // Flattened version
+    template <typename Domain, typename Tag, typename Grammar>
+    struct make_binary<Domain, Tag, Grammar, true>
+      : proto::transform<make_binary<Domain, Tag, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::reverse_fold_tree<
+                    proto::_
+                  , proto::make<fusion::nil_>
+                  , make_binary_helper<Grammar>
+                >::template impl<Expr, State, Data>
+            reverse_fold_tree;
+
+            typedef typename reverse_fold_tree::result_type elements;
+            typedef make_component<Domain, Tag> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return make_component_()(
+                    reverse_fold_tree()(expr, state, data), data);
+            }
+        };
+    };
+
+    template <typename Domain, typename Grammar>
+    struct make_directive : proto::transform<make_directive<Domain, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename
+                proto::result_of::child_c<Expr, 0>::type
+            lhs;
+
+            typedef typename
+                proto::result_of::value<lhs>::type
+            tag_type;
+
+            typedef typename modify<Domain>::
+                template result<modify<Domain>(tag_type, Data)>::type
+            modifier_type;
+
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 1>::type
+                  , State
+                  , modifier_type
+                )>::type
+            rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    tag_type
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, tag::directive> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                tag_type tag = proto::value(proto::child_c<0>(expr));
+                typename remove_reference<modifier_type>::type
+                    modifier = modify<Domain>()(tag, data);
+
+                elements_type elements =
+                    detail::make_cons(
+                        tag                                 // LHS
+                      , detail::make_cons(
+                            Grammar()(
+                                proto::child_c<1>(expr)     // RHS
+                              , state, modifier)
+                        )
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+
+    template <typename Domain, typename Grammar>
+    struct make_action : proto::transform<make_action<Domain, Grammar> >
+    {
+        template<typename Expr, typename State, typename Data>
+        struct impl : proto::transform_impl<Expr, State, Data>
+        {
+            typedef typename Grammar::
+                template result<Grammar(
+                    typename proto::result_of::child_c<Expr, 0>::type
+                  , State
+                  , Data
+                )>::type
+            lhs_component;
+
+            typedef
+                typename mpl::eval_if_c<
+                    phoenix::is_actor<
+                        typename proto::result_of::child_c<Expr, 1>::type
+                    >::type::value
+                  , proto::result_of::child_c<Expr, 1>
+                  , proto::result_of::value<
+                        typename proto::result_of::child_c<Expr, 1>::type
+                    >
+                >::type
+                rhs_component;
+
+            typedef typename
+                result_of::make_cons<
+                    lhs_component
+                  , typename result_of::make_cons<rhs_component>::type
+                >::type
+            elements_type;
+
+            typedef make_component<Domain, tag::action> make_component_;
+
+            typedef typename
+                make_component_::template
+                    result<make_component_(elements_type, Data)>::type
+            result_type;
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+            ) const
+            {
+                return
+                    (*this)(
+                        expr
+                      , state
+                      , data
+                      , typename phoenix::is_actor<
+                            typename proto::result_of::child_c<Expr, 1>::type
+                        >::type()
+                    );
+            }
+            
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+              , mpl::false_
+            ) const
+            {
+                elements_type elements =
+                    detail::make_cons(
+                        Grammar()(
+                            proto::child_c<0>(expr), state, data)   // LHS
+                      , detail::make_cons(
+                            proto::value(proto::child_c<1>(expr)))  // RHS
+                    );
+
+                return make_component_()(elements, data);
+            }
+
+            result_type operator()(
+                typename impl::expr_param expr
+              , typename impl::state_param state
+              , typename impl::data_param data
+              , mpl::true_
+            ) const
+            {
+                elements_type elements =
+                    detail::make_cons(
+                        Grammar()(
+                            proto::child_c<0>(expr), state, data)   // LHS
+                      , detail::make_cons(
+                            proto::child_c<1>(expr))               // RHS
+                    );
+
+                return make_component_()(elements, data);
+            }
+        };
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/meta_compiler.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/meta_compiler.hpp
new file mode 100644 (file)
index 0000000..a525ef3
--- /dev/null
@@ -0,0 +1,320 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_1258PM
+#define BOOST_SPIRIT_META_COMPILER_OCTOBER_16_2008_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/spirit/include/phoenix_limits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/spirit/include/phoenix_limits.hpp>      // needs to be included before proto
+#include <boost/proto/proto.hpp>
+#include <boost/spirit/home/support/make_component.hpp>
+#include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/detail/make_cons.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace spirit
+{
+    // Some defaults...
+
+    template <typename Domain, typename Tag, typename Enable = void>
+    struct use_operator : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_function : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_directive : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable /* = void */>
+    struct is_modifier_directive : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable = void>
+    struct use_terminal : mpl::false_ {};
+
+    template <typename Domain, typename T, typename Enable /*= void*/>
+    struct flatten_tree : mpl::false_ {};
+
+    // Our meta-compiler. This is the main engine that hooks Spirit
+    // to the proto expression template engine.
+
+    template <typename Domain>
+    struct meta_compiler
+    {
+        struct meta_grammar;
+
+        BOOST_SPIRIT_ASSERT_MSG((
+            !use_operator<Domain, proto::tag::subscript>::value
+        ), error_proto_tag_subscript_cannot_be_used, ());
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        // this is the non-broken part for compilers properly supporting 
+        // partial template specialization (VC7.1 does not)
+        struct cases
+        {
+            template <typename Tag, typename Enable = void>
+            struct case_
+              : proto::not_<proto::_>
+            {};
+
+            ///////////////////////////////////////////////////////////////////
+            // terminals
+            ///////////////////////////////////////////////////////////////////
+            template <typename Enable>
+            struct case_<proto::tag::terminal, Enable>
+              : proto::when<
+                    proto::if_<use_terminal<Domain, proto::_value>()>,
+                    detail::make_terminal<Domain>
+                >
+            {};
+
+            template <typename Tag>
+            struct case_<Tag, typename enable_if<use_operator<Domain, Tag> >::type>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // binary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<Tag, meta_grammar, meta_grammar>,
+                        detail::make_binary<Domain, Tag, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // unary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::unary_expr<Tag, meta_grammar>,
+                        detail::make_unary<Domain, Tag, meta_grammar>
+                    >
+                >
+            {};
+
+            template <typename Enable>
+            struct case_<proto::tag::subscript, Enable>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // directives
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , proto::and_<
+                            proto::terminal<proto::_>
+                          , proto::if_<use_directive<Domain, proto::_value >()> >
+                      , meta_grammar>,
+                        detail::make_directive<Domain, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // semantic actions
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , meta_grammar, proto::_>,
+                        detail::make_action<Domain, meta_grammar>
+                    >
+                >
+            {};
+        };
+#else
+        // this part actually constitutes invalid C++ code, but it allows us to
+        // convince VC7.1 to do what we want
+        struct cases
+        {
+            template <typename Tag, typename Enable = void>
+            struct case_
+              : proto::not_<proto::_>
+            {};
+
+            ///////////////////////////////////////////////////////////////////
+            // terminals
+            ///////////////////////////////////////////////////////////////////
+            template <>
+            struct case_<proto::tag::terminal>
+              : proto::when<
+                    proto::if_<use_terminal<Domain, proto::_value>()>,
+                    detail::make_terminal<Domain>
+                >
+            {};
+
+            template <typename Tag>
+            struct case_<Tag>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // binary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<
+                        typename enable_if<use_operator<Domain, Tag>, Tag>::type
+                          , meta_grammar, meta_grammar>
+                      , detail::make_binary<Domain, Tag, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // unary operators
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::unary_expr<
+                        typename enable_if<use_operator<Domain, Tag>, Tag>::type
+                          , meta_grammar>
+                      , detail::make_unary<Domain, Tag, meta_grammar>
+                    >
+                >
+            {};
+
+            template <>
+            struct case_<proto::tag::subscript>
+              : proto::or_<
+            ///////////////////////////////////////////////////////////////////
+            // directives
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , proto::and_<
+                            proto::terminal<proto::_>
+                          , proto::if_<use_directive<Domain, proto::_value >()> >
+                      , meta_grammar>,
+                        detail::make_directive<Domain, meta_grammar>
+                    >,
+            ///////////////////////////////////////////////////////////////////
+            // semantic actions
+            ///////////////////////////////////////////////////////////////////
+                    proto::when<proto::binary_expr<proto::tag::subscript
+                      , meta_grammar, proto::_>,
+                        detail::make_action<Domain, meta_grammar>
+                    >
+                >
+            {};
+        };
+#endif
+
+        struct meta_grammar
+          : proto::switch_<cases>
+        {};
+    };
+
+    namespace result_of
+    {
+        // Default case
+        template <typename Domain, typename Expr
+          , typename Modifiers = unused_type, typename Enable = void>
+        struct compile
+        {
+            typedef typename meta_compiler<Domain>::meta_grammar meta_grammar;
+            typedef typename meta_grammar::
+                template result<meta_grammar(Expr, mpl::void_, Modifiers)>::type
+            type;
+        };
+
+        // If Expr is not a proto expression, make it a terminal
+        template <typename Domain, typename Expr, typename Modifiers>
+        struct compile<Domain, Expr, Modifiers,
+            typename disable_if<proto::is_expr<Expr> >::type>
+          : compile<Domain, typename proto::terminal<Expr>::type, Modifiers> {};
+    }
+
+    namespace traits
+    {
+        // Check if Expr matches the domain's grammar
+        template <typename Domain, typename Expr>
+        struct matches :
+            proto::matches<
+                typename proto::result_of::as_expr<
+                    typename remove_reference<Expr>::type>::type,
+                typename meta_compiler<Domain>::meta_grammar
+            >
+        {
+        };
+    }
+
+    namespace detail
+    {
+        template <typename Domain>
+        struct compiler
+        {
+            // Default case
+            template <typename Expr, typename Modifiers>
+            static typename spirit::result_of::compile<Domain, Expr, Modifiers>::type
+            compile(Expr const& expr, Modifiers modifiers, mpl::true_)
+            {
+                typename meta_compiler<Domain>::meta_grammar compiler;
+                return compiler(expr, mpl::void_(), modifiers);
+            }
+
+            // If Expr is not a proto expression, make it a terminal
+            template <typename Expr, typename Modifiers>
+            static typename spirit::result_of::compile<Domain, Expr, Modifiers>::type
+            compile(Expr const& expr, Modifiers modifiers, mpl::false_)
+            {
+                typename meta_compiler<Domain>::meta_grammar compiler;
+                typedef typename detail::as_meta_element<Expr>::type expr_;
+                typename proto::terminal<expr_>::type term = {expr};
+                return compiler(term, mpl::void_(), modifiers);
+            }
+        };
+    }
+
+    template <typename Domain, typename Expr>
+    inline typename result_of::compile<Domain, Expr, unused_type>::type
+    compile(Expr const& expr)
+    {
+        typedef typename proto::is_expr<Expr>::type is_expr;
+        return detail::compiler<Domain>::compile(expr, unused, is_expr());
+    }
+
+    template <typename Domain, typename Expr, typename Modifiers>
+    inline typename result_of::compile<Domain, Expr, Modifiers>::type
+    compile(Expr const& expr, Modifiers modifiers)
+    {
+        typedef typename proto::is_expr<Expr>::type is_expr;
+        return detail::compiler<Domain>::compile(expr, modifiers, is_expr());
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, template <typename Subject> class generator>
+    struct make_unary_composite
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        element_type;
+        typedef generator<element_type> result_type;
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(elements));
+        }
+    };
+
+    template <typename Elements, template <typename Left, typename Right> class generator>
+    struct make_binary_composite
+    {
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 0>::type
+        left_type;
+        typedef typename
+            fusion::result_of::value_at_c<Elements, 1>::type
+        right_type;
+        typedef generator<left_type, right_type> result_type;
+
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(
+                fusion::at_c<0>(elements)
+              , fusion::at_c<1>(elements)
+            );
+        }
+    };
+
+    template <typename Elements, template <typename Elements_> class generator>
+    struct make_nary_composite
+    {
+        typedef generator<Elements> result_type;
+        result_type operator()(Elements const& elements, unused_type) const
+        {
+            return result_type(elements);
+        }
+    };
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/modify.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/modify.hpp
new file mode 100644 (file)
index 0000000..80d2f71
--- /dev/null
@@ -0,0 +1,124 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_MODIFY_OCTOBER_25_2008_0142PM
+#define BOOST_SPIRIT_MODIFY_OCTOBER_25_2008_0142PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_limits.hpp>      // needs to be included before proto
+#include <boost/proto/proto.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename Domain, typename T, typename Enable = void>
+    struct is_modifier_directive;
+
+    // Testing if a modifier set includes a modifier T involves
+    // checking for inheritance (i.e. Modifiers is derived from T)
+    template <typename Modifiers, typename T>
+    struct has_modifier
+        : is_base_of<T, Modifiers> {};
+
+    // Adding modifiers is done using multi-inheritance
+    template <typename Current, typename New, typename Enable = void>
+    struct compound_modifier : Current, New
+    {
+        compound_modifier()
+          : Current(), New() {}
+
+        compound_modifier(Current const& current, New const& new_)
+          : Current(current), New(new_) {}
+    };
+
+    // Don't add if New is already in Current
+    template <typename Current, typename New>
+    struct compound_modifier<
+        Current, New, typename enable_if<has_modifier<Current, New> >::type>
+      : Current
+    {
+        compound_modifier()
+          : Current() {}
+
+        compound_modifier(Current const& current, New const&)
+          : Current(current) {}
+    };
+
+    // Special case if Current is unused_type
+    template <typename New, typename Enable>
+    struct compound_modifier<unused_type, New, Enable> : New
+    {
+        compound_modifier()
+          : New() {}
+
+        compound_modifier(unused_type, New const& new_)
+          : New(new_) {}
+    };
+
+    // Domains may specialize this modify metafunction to allow
+    // directives to add information to the Modifier template
+    // parameter that is passed to the make_component metafunction.
+    // By default, we return the modifiers untouched
+    template <typename Domain, typename Enable = void>
+    struct modify
+    {
+        template <typename Sig>
+        struct result;
+
+        template <typename This, typename Tag, typename Modifiers>
+        struct result<This(Tag, Modifiers)>
+        {
+            typedef typename remove_const<
+                typename remove_reference<Tag>::type>::type
+            tag_type;
+            typedef typename remove_const<
+                typename remove_reference<Modifiers>::type>::type
+            modifiers_type;
+
+            typedef typename mpl::if_<
+                is_modifier_directive<Domain, tag_type>
+              , compound_modifier<modifiers_type, tag_type>
+              , Modifiers>::type
+            type;
+        };
+
+        template <typename Tag, typename Modifiers>
+        typename result<modify(Tag, Modifiers)>::type
+        operator()(Tag tag, Modifiers modifiers) const
+        {
+            return op(tag, modifiers, is_modifier_directive<Domain, Tag>());
+        }
+
+        template <typename Tag, typename Modifiers>
+        Modifiers
+        op(Tag /*tag*/, Modifiers modifiers, mpl::false_) const
+        {
+            return modifiers;
+        }
+
+        template <typename Tag, typename Modifiers>
+        compound_modifier<Modifiers, Tag>
+        op(Tag tag, Modifiers modifiers, mpl::true_) const
+        {
+            return compound_modifier<Modifiers, Tag>(modifiers, tag);
+        }
+    };
+}}
+
+namespace boost { namespace proto
+{
+    template <typename Domain, typename Enable>
+    struct is_callable<spirit::modify<Domain, Enable> >
+      : mpl::true_ {};
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass.hpp
new file mode 100644 (file)
index 0000000..74f4a23
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (c) 2001-2009, Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_0201AM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_0201AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//  Include everything needed for the multi_pass
+//  Ownership policies
+#include <boost/spirit/home/support/iterators/detail/first_owner_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp>
+
+//  Input policies
+#include <boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/istream_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/lex_input_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/functor_input_policy.hpp>
+
+//  Checking policies
+#include <boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/no_check_policy.hpp>
+
+//  Storage policies
+#include <boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp>
+#include <boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp>
+
+//  Main multi_pass iterator 
+#include <boost/spirit/home/support/iterators/detail/combine_policies.hpp>
+#include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
+#include <boost/spirit/home/support/iterators/multi_pass.hpp>
+
+#endif 
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass_wrapper.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/multi_pass_wrapper.hpp
new file mode 100644 (file)
index 0000000..ec5fa36
--- /dev/null
@@ -0,0 +1,52 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_WRAPPER_JUL_12_2009_0914PM)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_WRAPPER_JUL_12_2009_0914PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/support/detail/scoped_enum_emulation.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    // declare special functions allowing to integrate any multi_pass iterator
+    // with expectation points
+
+    // normal iterators require no special handling
+    BOOST_SCOPED_ENUM_START(clear_mode) 
+    {
+        clear_if_enabled,
+        clear_always
+    };
+    BOOST_SCOPED_ENUM_END
+
+    template <typename Iterator>
+    void clear_queue(Iterator&
+      , BOOST_SCOPED_ENUM(clear_mode) /*mode*/ = clear_mode::clear_if_enabled) 
+    {}
+
+    template <typename Iterator>
+    void inhibit_clear_queue(Iterator&, bool) 
+    {}
+
+    template <typename Iterator>
+    bool inhibit_clear_queue(Iterator&) 
+    { 
+        return false; 
+    }
+
+    // Helper template to recognize a multi_pass iterator. This specialization
+    // will be instantiated for any non-multi_pass iterator.
+    template <typename Iterator>
+    struct is_multi_pass : mpl::false_ {};
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/expand_arg.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/expand_arg.hpp
new file mode 100644 (file)
index 0000000..f214096
--- /dev/null
@@ -0,0 +1,88 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EXPAND_ARG_FEB_19_2007_1107AM)
+#define BOOST_SPIRIT_EXPAND_ARG_FEB_19_2007_1107AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Context>
+    struct expand_arg
+    {
+        template <typename T>
+        struct result_type
+        {
+            // This is a temporary hack. The better way is to detect if T
+            // can be called given unused context.
+            typedef typename
+                mpl::eval_if<
+                    mpl::or_<is_scalar<T>, traits::is_string<T> >
+                  , mpl::identity<T const &>
+                  , boost::result_of<T(unused_type, Context)>
+                >::type
+            type;
+        };
+
+        template <typename T>
+        struct result;
+
+        template <typename F, typename A0>
+        struct result<F(A0)>
+          : result_type<A0> {};
+
+        template <typename F, typename A0>
+        struct result<F(A0&)>
+          : result_type<A0> {};
+
+        expand_arg(Context& context_)
+          : context(context_)
+        {
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        call(T const& f, mpl::false_) const
+        {
+            return f(unused, context);
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        call(T const& val, mpl::true_) const
+        {
+            return val;
+        }
+
+        template <typename T>
+        typename result_type<T>::type
+        operator()(T const& x) const
+        {
+            return call(x, mpl::or_<is_scalar<T>, traits::is_string<T> >());
+        }
+
+        Context& context;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        expand_arg& operator= (expand_arg const&);
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/extract_param.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/extract_param.hpp
new file mode 100644 (file)
index 0000000..6149932
--- /dev/null
@@ -0,0 +1,123 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM)
+#define BOOST_SPIRIT_EXTRACT_PARAM_AUGUST_08_2009_0848AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+
+#include <boost/function_types/is_function.hpp>
+#include <boost/function_types/parameter_types.hpp>
+#include <boost/function_types/result_type.hpp>
+#include <boost/fusion/include/as_list.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Helpers to extract params (locals, attributes, ...) from nonterminal
+    // template arguments
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types, typename Pred, typename Default>
+    struct extract_param
+    {
+        typedef typename mpl::find_if<Types, Pred>::type pos;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<pos, typename mpl::end<Types>::type>
+              , mpl::identity<Default>
+              , mpl::deref<pos>
+            >::type
+        type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_locals
+      : fusion::result_of::as_vector<
+            typename extract_param<
+                Types
+              , is_locals<mpl::_>
+              , locals<>
+            >::type
+        >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Domain, typename Types>
+    struct extract_component
+      : spirit::result_of::compile<
+            Domain
+          , typename extract_param<
+                Types
+              , traits::matches<Domain, mpl::_>
+              , unused_type
+            >::type
+        >
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_sig
+      : extract_param<
+            Types
+          , function_types::is_function<mpl::_>
+          , void()
+        >
+    {};
+
+    template <typename Sig>
+    struct attr_from_sig
+    {
+        typedef typename function_types::result_type<Sig>::type attr;
+
+        typedef typename
+            mpl::if_<
+                is_same<attr, void>
+              , unused_type
+              , attr
+            >::type
+        type;
+    };
+
+    template <typename Sig>
+    struct params_from_sig
+    {
+        typedef typename function_types::parameter_types<Sig>::type params;
+
+        typedef typename fusion::result_of::as_list<params>::type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Types>
+    struct extract_encoding
+      : extract_param<
+            Types
+          , is_char_encoding<mpl::_>
+          , unused_type
+        >
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/locals.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/nonterminal/locals.hpp
new file mode 100644 (file)
index 0000000..4db0349
--- /dev/null
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM)
+#define BOOST_SPIRIT_LOCALS_APRIL_03_2007_0506PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if !defined(BOOST_SPIRIT_MAX_LOCALS_SIZE)
+# define BOOST_SPIRIT_MAX_LOCALS_SIZE 10
+#else
+# if BOOST_SPIRIT_MAX_LOCALS_SIZE < 3
+#   undef BOOST_SPIRIT_MAX_LOCALS_SIZE
+#   define BOOST_SPIRIT_MAX_LOCALS_SIZE 10
+# endif
+#endif
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+            BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T, mpl::na)
+    >
+    struct locals
+      : mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct is_locals
+          : mpl::false_
+        {};
+
+        template <BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, typename T)>
+        struct is_locals<locals<BOOST_PP_ENUM_PARAMS(BOOST_SPIRIT_MAX_LOCALS_SIZE, T)> >
+          : mpl::true_
+        {};
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/numeric_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/numeric_traits.hpp
new file mode 100644 (file)
index 0000000..01771dd
--- /dev/null
@@ -0,0 +1,127 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_NUMERIC_TRAITS_JAN_07_2011_0722AM)
+#define BOOST_SPIRIT_NUMERIC_TRAITS_JAN_07_2011_0722AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a boolean type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_bool : mpl::false_ {};
+
+    template <typename T>
+    struct is_bool<T const> : is_bool<T> {};
+
+    template <>
+    struct is_bool<bool> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a signed integer type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_int : mpl::false_ {};
+
+    template <typename T>
+    struct is_int<T const> : is_int<T> {};
+
+    template <>
+    struct is_int<short> : mpl::true_ {};
+
+    template <>
+    struct is_int<int> : mpl::true_ {};
+
+    template <>
+    struct is_int<long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct is_int<boost::long_long_type> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is an unsigned integer type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_uint : mpl::false_ {};
+
+    template <typename T>
+    struct is_uint<T const> : is_uint<T> {};
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <>
+    struct is_uint<unsigned short> : mpl::true_ {};
+#endif
+
+    template <>
+    struct is_uint<unsigned int> : mpl::true_ {};
+
+    template <>
+    struct is_uint<unsigned long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct is_uint<boost::ulong_long_type> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a floating point type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_real : mpl::false_ {};
+
+    template <typename T>
+    struct is_real<T const> : is_uint<T> {};
+
+    template <>
+    struct is_real<float> : mpl::true_ {};
+
+    template <>
+    struct is_real<double> : mpl::true_ {};
+
+    template <>
+    struct is_real<long double> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // customization points for numeric operations
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct absolute_value;
+
+    template <typename T, typename Enable = void>
+    struct is_negative;
+
+    template <typename T, typename Enable = void>
+    struct is_zero;
+
+    template <typename T, typename Enable = void>
+    struct pow10_helper;
+
+    template <typename T, typename Enable = void>
+    struct is_nan;
+
+    template <typename T, typename Enable = void>
+    struct is_infinite;
+    
+    template <typename T, typename Enable = void>
+    struct check_overflow : mpl::false_ {};
+        
+    template <typename T>
+    struct check_overflow<T, typename enable_if_c<integer_traits<T>::is_integral>::type>
+        : mpl::true_ {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/sequence_base_id.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/sequence_base_id.hpp
new file mode 100644 (file)
index 0000000..df9c177
--- /dev/null
@@ -0,0 +1,39 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENCE_BASE_ID_MAR_15_2009_1243PM)
+#define SPIRIT_SEQUENCE_BASE_ID_MAR_15_2009_1243PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+
+namespace boost { namespace spirit { namespace traits
+{
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(sequence_base_id)
+    }
+
+    // We specialize this for sequences (see support/attributes.hpp).
+    // For sequences, we only wrap the attribute in a tuple IFF
+    // it is not already a fusion tuple.
+    //
+    // Note: in the comment above, "sequence" is a spirit sequence
+    // component (parser or generator), and a tuple is a fusion sequence 
+    // (to avoid terminology confusion).
+    template <typename Derived, typename Attribute>
+    struct pass_attribute<Derived, Attribute,
+        typename enable_if<detail::has_sequence_base_id<Derived> >::type>
+      : wrap_if_not_tuple<Attribute> {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/string_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/string_traits.hpp
new file mode 100644 (file)
index 0000000..f970012
--- /dev/null
@@ -0,0 +1,358 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_STRING_TRAITS_OCTOBER_2008_1252PM)
+#define BOOST_SPIRIT_STRING_TRAITS_OCTOBER_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/container.hpp>
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/proto/proto_fwd.hpp>
+#include <boost/type_traits/is_const.hpp>
+#if defined(__GNUC__) && (__GNUC__ < 4)
+#include <boost/type_traits/add_const.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a character type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_char : mpl::false_ {};
+
+    template <typename T>
+    struct is_char<T const> : is_char<T> {};
+
+    template <>
+    struct is_char<char> : mpl::true_ {};
+
+    template <>
+    struct is_char<wchar_t> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_string : mpl::false_ {};
+
+    template <typename T>
+    struct is_string<T const> : is_string<T> {};
+
+    template <>
+    struct is_string<char const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<char*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t*> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const(&)[N]> : mpl::true_ {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct is_string<std::basic_string<T, Traits, Allocator> > : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the underlying char type of a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct char_type_of;
+
+    template <typename T>
+    struct char_type_of<T const> : char_type_of<T> {};
+
+    template <>
+    struct char_type_of<char> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t> : mpl::identity<wchar_t> {};
+
+    template <>
+    struct char_type_of<char const*> : mpl::identity<char const> {};
+
+    template <>
+    struct char_type_of<wchar_t const*> : mpl::identity<wchar_t const> {};
+
+    template <>
+    struct char_type_of<char*> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t*> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const[N]> : mpl::identity<wchar_t const> {};
+
+    template <std::size_t N>
+    struct char_type_of<char(&)[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t(&)[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const(&)[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const(&)[N]> : mpl::identity<wchar_t const> {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct char_type_of<std::basic_string<T, Traits, Allocator> >
+      : mpl::identity<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the C string from a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String>
+    struct extract_c_string;
+
+    template <typename String>
+    struct extract_c_string
+    {
+        typedef typename char_type_of<String>::type char_type;
+
+        template <typename T>
+        static T const* call (T* str)
+        {
+            return (T const*)str; 
+        }
+
+        template <typename T>
+        static T const* call (T const* str)
+        {
+            return str; 
+        }
+    }; 
+    
+    // Forwarder that strips const
+    template <typename T>
+    struct extract_c_string<T const>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T const str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips references
+    template <typename T>
+    struct extract_c_string<T&>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips const references
+    template <typename T>
+    struct extract_c_string<T const&>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T const& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    template <typename T, typename Traits, typename Allocator>
+    struct extract_c_string<std::basic_string<T, Traits, Allocator> >
+    {
+        typedef T char_type;
+
+        typedef std::basic_string<T, Traits, Allocator> string;
+
+        static T const* call (string const& str)
+        {
+            return str.c_str();
+        }
+    };
+    
+    template <typename T>
+    typename extract_c_string<T*>::char_type const*
+    get_c_string (T* str)
+    {
+        return extract_c_string<T*>::call(str);
+    }
+
+    template <typename T>
+    typename extract_c_string<T const*>::char_type const*
+    get_c_string (T const* str)
+    {
+        return extract_c_string<T const*>::call(str);
+    }
+    
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string (String& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string (String const& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the begin/end iterators from a string
+    ///////////////////////////////////////////////////////////////////////////
+
+    // Implementation for C-style strings.
+
+// gcc 3.x.x has problems resolving ambiguities here
+#if defined(__GNUC__) && (__GNUC__ < 4)
+    template <typename T>
+    inline typename add_const<T>::type * get_begin(T* str) { return str; }
+
+    template <typename T>
+    inline typename add_const<T>::type* get_end(T* str)
+    {
+        T* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+#else
+    template <typename T>
+    inline T const* get_begin(T const* str) { return str; }
+
+    template <typename T>
+    inline T* get_begin(T* str) { return str; }
+
+    template <typename T>
+    inline T const* get_end(T const* str)
+    {
+        T const* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+
+    template <typename T>
+    inline T* get_end(T* str)
+    {
+        T* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+#endif
+
+    // Implementation for containers (includes basic_string).
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_begin(Str const& str)
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_begin(Str& str BOOST_PROTO_DISABLE_IF_IS_CONST(Str))
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_end(Str const& str)
+    { return str.end(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_end(Str& str BOOST_PROTO_DISABLE_IF_IS_CONST(Str))
+    { return str.end(); }
+
+    // Default implementation for other types: try a C-style string
+    // conversion.
+    // These overloads are explicitly disabled for containers,
+    // as they would be ambiguous with the previous ones.
+    template <typename T, typename Str>
+    inline typename disable_if<is_container<Str>
+      , T const*>::type get_begin(Str const& str)
+    { return str; }
+
+    template <typename T, typename Str>
+    inline typename disable_if<is_container<Str>
+      , T const*>::type get_end(Str const& str)
+    { return get_end(get_begin<T>(str)); }
+}
+
+namespace result_of
+{
+    template <typename Char, typename T, typename Enable = void>
+    struct get_begin
+    {
+        typedef typename traits::char_type_of<T>::type char_type;
+
+        typedef typename mpl::if_<
+            is_const<char_type>
+          , char_type const 
+          , char_type
+        >::type* type;
+    };
+
+    template <typename Char, typename Str>
+    struct get_begin<Char, Str
+      , typename enable_if<traits::is_container<Str> >::type>
+    {
+        typedef typename mpl::if_<
+            is_const<Str>
+          , typename Str::const_iterator
+          , typename Str::iterator
+        >::type type;
+    };
+
+    template <typename Char, typename T>
+    struct get_end : get_begin<Char, T> {};
+}
+
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/terminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/terminal.hpp
new file mode 100644 (file)
index 0000000..3ef8c83
--- /dev/null
@@ -0,0 +1,657 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TERMINAL_NOVEMBER_04_2008_0906AM)
+#define BOOST_SPIRIT_TERMINAL_NOVEMBER_04_2008_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_function.hpp>
+#include <boost/proto/proto.hpp>
+#include <boost/fusion/include/void.hpp>
+#include <boost/spirit/home/support/meta_compiler.hpp>
+#include <boost/spirit/home/support/detail/make_vector.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+
+#include <boost/spirit/home/support/terminal_expression.hpp>
+
+namespace boost { namespace spirit
+{
+    template <typename Terminal, typename Args>
+    struct terminal_ex
+    {
+        typedef Terminal terminal_type;
+        typedef Args args_type;
+
+        terminal_ex(Args const& args_)
+          : args(args_) {}
+        terminal_ex(Args const& args_, Terminal const& term_)
+          : args(args_), term(term_) {}
+
+        Args args;  // Args is guaranteed to be a fusion::vectorN so you
+                    // can use that template for detection and specialization
+        Terminal term;
+    };
+
+    template <typename Terminal, typename Actor, int Arity>
+    struct lazy_terminal
+    {
+        typedef Terminal terminal_type;
+        typedef Actor actor_type;
+        static int const arity = Arity;
+
+        lazy_terminal(Actor const& actor_)
+          : actor(actor_) {}
+        lazy_terminal(Actor const& actor_, Terminal const& term_)
+          : actor(actor_), term(term_) {}
+
+        Actor actor;
+        Terminal term;
+    };
+
+    template <typename Domain, typename Terminal, int Arity, typename Enable = void>
+    struct use_lazy_terminal : mpl::false_ {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Enable = void>
+    struct use_lazy_directive : mpl::false_ {};
+
+    template <typename Terminal>
+    struct terminal;
+
+    template <typename Domain, typename Terminal>
+    struct use_terminal<Domain, terminal<Terminal> >
+        : use_terminal<Domain, Terminal> {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Actor>
+    struct use_terminal<Domain, lazy_terminal<Terminal, Actor, Arity> >
+        : use_lazy_terminal<Domain, Terminal, Arity> {};
+
+    template <typename Domain, typename Terminal, int Arity, typename Actor>
+    struct use_directive<Domain, lazy_terminal<Terminal, Actor, Arity> >
+        : use_lazy_directive<Domain, Terminal, Arity> {};
+
+    template <
+        typename F
+      , typename A0 = unused_type
+      , typename A1 = unused_type
+      , typename A2 = unused_type
+      , typename Unused = unused_type
+    >
+    struct make_lazy;
+
+    template <typename F, typename A0>
+    struct make_lazy<F, A0>
+    {
+        typedef typename
+            proto::terminal<
+                lazy_terminal<
+                    typename F::terminal_type
+                  , typename phoenix::detail::expression::function_eval<F, A0>::type
+                  , 1 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0_) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::detail::expression::function_eval<F, A0>::make(f, _0_)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    template <typename F, typename A0, typename A1>
+    struct make_lazy<F, A0, A1>
+    {
+        typedef typename
+            proto::terminal<
+               lazy_terminal<
+                    typename F::terminal_type
+                  , typename phoenix::detail::expression::function_eval<F, A0, A1>::type
+                  , 2 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0_, A1 const& _1_) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::detail::expression::function_eval<F, A0, A1>::make(f, _0_, _1_)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    template <typename F, typename A0, typename A1, typename A2>
+    struct make_lazy<F, A0, A1, A2>
+    {
+        typedef typename
+            proto::terminal<
+               lazy_terminal<
+                    typename F::terminal_type
+                  , typename phoenix::detail::expression::function_eval<F, A0, A1, A2>::type
+                  , 3 // arity
+                >
+            >::type
+        result_type;
+        typedef result_type type;
+
+        result_type
+        operator()(F f, A0 const& _0_, A1 const& _1_, A2 const& _2_) const
+        {
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(child_type(
+                phoenix::detail::expression::function_eval<F, A0, A1, A2>::make(f, _0_, _1_, _2_)
+              , f.proto_base().child0
+            ));
+        }
+    };
+
+    namespace detail
+    {
+        // Helper struct for SFINAE purposes
+        template <bool C> struct bool_;
+
+        template <>
+        struct bool_<true> : mpl::bool_<true>
+        { 
+            typedef bool_<true>* is_true; 
+        };
+
+        template <>
+        struct bool_<false> : mpl::bool_<false>
+        { 
+            typedef bool_<false>* is_false; 
+        };
+
+        // Metafunction to detect if at least one arg is a Phoenix actor
+        template <
+            typename A0
+          , typename A1 = unused_type
+          , typename A2 = unused_type
+        >
+        struct contains_actor
+            : bool_<
+                  phoenix::is_actor<A0>::value
+               || phoenix::is_actor<A1>::value
+               || phoenix::is_actor<A2>::value
+              >
+        {};
+
+        // to_lazy_arg: convert a terminal arg type to the type make_lazy needs
+        template <typename A>
+        struct to_lazy_arg
+          : phoenix::as_actor<A> // wrap A in a Phoenix actor if not already one
+        {};
+
+        template <typename A>
+        struct to_lazy_arg<const A>
+          : to_lazy_arg<A>
+        {};
+        
+        template <typename A>
+        struct to_lazy_arg<A &>
+          : to_lazy_arg<A>
+        {};
+
+        template <>
+        struct to_lazy_arg<unused_type>
+        {
+            // unused arg: make_lazy wants unused_type
+            typedef unused_type type;
+        };
+
+        // to_nonlazy_arg: convert a terminal arg type to the type make_vector needs
+        template <typename A>
+        struct to_nonlazy_arg
+        {
+            // identity
+            typedef A type;
+        };
+
+        template <typename A>
+        struct to_nonlazy_arg<const A>
+          : to_nonlazy_arg<A>
+        {};
+
+        template <typename A>
+        struct to_nonlazy_arg<A &>
+          : to_nonlazy_arg<A>
+        {};
+
+        template <>
+        struct to_nonlazy_arg<unused_type>
+        {
+            // unused arg: make_vector wants fusion::void_
+            typedef fusion::void_ type;
+        };
+    }
+
+    template <typename Terminal>
+    struct terminal
+      : proto::extends<
+            typename proto::terminal<Terminal>::type
+          , terminal<Terminal>
+        >
+    {
+        typedef terminal<Terminal> this_type;
+        typedef Terminal terminal_type;
+
+        typedef proto::extends<
+            typename proto::terminal<Terminal>::type
+          , terminal<Terminal>
+        > base_type;
+
+        terminal() {}
+
+        terminal(Terminal const& t)
+          : base_type(proto::terminal<Terminal>::type::make(t)) 
+        {}
+
+        template <
+            bool Lazy
+          , typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper;
+
+        template <
+            typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper<false, A0, A1, A2>
+        {
+            typedef typename
+                proto::terminal<
+                    terminal_ex<
+                        Terminal
+                      , typename detail::result_of::make_vector<
+                            typename detail::to_nonlazy_arg<A0>::type
+                          , typename detail::to_nonlazy_arg<A1>::type
+                          , typename detail::to_nonlazy_arg<A2>::type>::type>
+                >::type
+            type;
+        };
+
+        template <
+            typename A0
+          , typename A1
+          , typename A2
+        >
+        struct result_helper<true, A0, A1, A2>
+        {
+            typedef typename
+                make_lazy<this_type
+                  , typename detail::to_lazy_arg<A0>::type
+                  , typename detail::to_lazy_arg<A1>::type
+                  , typename detail::to_lazy_arg<A2>::type>::type
+            type;
+        };
+
+        // FIXME: we need to change this to conform to the result_of protocol
+        template <
+            typename A0
+          , typename A1 = unused_type
+          , typename A2 = unused_type      // Support up to 3 args
+        >
+        struct result
+        {
+            typedef typename
+                result_helper<
+                    detail::contains_actor<A0, A1, A2>::value
+                  , A0, A1, A2
+                >::type
+            type;
+        };
+
+        template <typename This, typename A0>
+        struct result<This(A0)>
+        {
+            typedef typename
+                result_helper<
+                    detail::contains_actor<A0, unused_type, unused_type>::value
+                  , A0, unused_type, unused_type
+                >::type
+            type;
+        };
+
+        template <typename This, typename A0, typename A1>
+        struct result<This(A0, A1)>
+        {
+            typedef typename
+                result_helper<
+                    detail::contains_actor<A0, A1, unused_type>::value
+                  , A0, A1, unused_type
+                >::type
+            type;
+        };
+
+
+        template <typename This, typename A0, typename A1, typename A2>
+        struct result<This(A0, A1, A2)>
+        {
+            typedef typename
+                result_helper<
+                     detail::contains_actor<A0, A1, A2>::value
+                   , A0, A1, A2
+                 >::type
+                 type;
+        };
+
+        // Note: in the following overloads, SFINAE cannot
+        // be done on return type because of gcc bug #24915:
+        //   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24915
+        // Hence an additional, fake argument is used for SFINAE,
+        // using a type which can never be a real argument type.
+
+        // Non-lazy overloads. Only enabled when all
+        // args are immediates (no Phoenix actor).
+
+        template <typename A0>
+        typename result<A0>::type
+        operator()(A0 const& _0_
+          , typename detail::contains_actor<A0>::is_false = 0) const
+        {
+            typedef typename result<A0>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0_)
+                  , this->proto_base().child0)
+            );
+        }
+
+        template <typename A0, typename A1>
+        typename result<A0, A1>::type
+        operator()(A0 const& _0_, A1 const& _1_
+          , typename detail::contains_actor<A0, A1>::is_false = 0) const
+        {
+            typedef typename result<A0, A1>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0_, _1_)
+                  , this->proto_base().child0)
+            );
+        }
+
+        template <typename A0, typename A1, typename A2>
+        typename result<A0, A1, A2>::type
+        operator()(A0 const& _0_, A1 const& _1_, A2 const& _2_
+          , typename detail::contains_actor<A0, A1, A2>::is_false = 0) const
+        {
+            typedef typename result<A0, A1, A2>::type result_type;
+            typedef typename result_type::proto_child0 child_type;
+            return result_type::make(
+                child_type(
+                    detail::make_vector(_0_, _1_, _2_)
+                  , this->proto_base().child0)
+            );
+        }
+
+        // Lazy overloads. Enabled when at
+        // least one arg is a Phoenix actor.
+        template <typename A0>
+        typename result<A0>::type
+        operator()(A0 const& _0_
+          , typename detail::contains_actor<A0>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0_));
+        }
+
+        template <typename A0, typename A1>
+        typename result<A0, A1>::type
+        operator()(A0 const& _0_, A1 const& _1_
+          , typename detail::contains_actor<A0, A1>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type
+              , typename phoenix::as_actor<A1>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0_)
+              , phoenix::as_actor<A1>::convert(_1_));
+        }
+
+        template <typename A0, typename A1, typename A2>
+        typename result<A0, A1, A2>::type
+        operator()(A0 const& _0_, A1 const& _1_, A2 const& _2_
+          , typename detail::contains_actor<A0, A1, A2>::is_true = 0) const
+        {
+            return make_lazy<this_type
+              , typename phoenix::as_actor<A0>::type
+              , typename phoenix::as_actor<A1>::type
+              , typename phoenix::as_actor<A2>::type>()(*this
+              , phoenix::as_actor<A0>::convert(_0_)
+              , phoenix::as_actor<A1>::convert(_1_)
+              , phoenix::as_actor<A2>::convert(_2_));
+        }
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        terminal& operator= (terminal const&);
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace result_of
+    {
+        // Calculate the type of the compound terminal if generated by one of
+        // the spirit::terminal::operator() overloads above
+
+        // The terminal type itself is passed through without modification
+        template <typename Tag>
+        struct terminal
+        {
+            typedef spirit::terminal<Tag> type;
+        };
+
+        template <typename Tag, typename A0>
+        struct terminal<Tag(A0)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0>::type type;
+        };
+
+        template <typename Tag, typename A0, typename A1>
+        struct terminal<Tag(A0, A1)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0, A1>::type type;
+        };
+
+        template <typename Tag, typename A0, typename A1, typename A2>
+        struct terminal<Tag(A0, A1, A2)>
+        {
+            typedef typename spirit::terminal<Tag>::
+                template result<A0, A1, A2>::type type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // support for stateful tag types
+    namespace tag
+    {
+        template <
+            typename Data, typename Tag
+          , typename DataTag1 = unused_type, typename DataTag2 = unused_type>
+        struct stateful_tag
+        {
+            BOOST_SPIRIT_IS_TAG()
+
+            typedef Data data_type;
+
+            stateful_tag() {}
+            stateful_tag(data_type const& data) : data_(data) {}
+
+            data_type data_;
+
+        private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            stateful_tag& operator= (stateful_tag const&);
+        };
+    }
+
+    template <
+        typename Data, typename Tag
+      , typename DataTag1 = unused_type, typename DataTag2 = unused_type>
+    struct stateful_tag_type
+      : spirit::terminal<tag::stateful_tag<Data, Tag, DataTag1, DataTag2> >
+    {
+        typedef tag::stateful_tag<Data, Tag, DataTag1, DataTag2> tag_type;
+
+        stateful_tag_type() {}
+        stateful_tag_type(Data const& data)
+          : spirit::terminal<tag_type>(data) 
+        {}
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        stateful_tag_type& operator= (stateful_tag_type const&);
+    };
+
+    namespace detail
+    {
+        // extract expression if this is a Tag
+        template <typename StatefulTag>
+        struct get_stateful_data
+        {
+            typedef typename StatefulTag::data_type data_type;
+
+            // is invoked if given tag is != Tag
+            template <typename Tag_>
+            static data_type call(Tag_) { return data_type(); }
+
+            // this is invoked if given tag is same as'Tag'
+            static data_type const& call(StatefulTag const& t) { return t.data_; }
+        };
+    }
+
+}}
+
+namespace boost { namespace phoenix
+{
+    template <typename Tag>
+    struct is_custom_terminal<Tag, typename Tag::is_spirit_tag>
+      : mpl::true_
+    {};
+
+    template <typename Tag>
+    struct custom_terminal<Tag, typename Tag::is_spirit_tag>
+    {
+#ifndef BOOST_PHOENIX_NO_SPECIALIZE_CUSTOM_TERMINAL
+        typedef void _is_default_custom_terminal; // fix for #7730
+#endif
+
+        typedef spirit::terminal<Tag> result_type;
+
+        template <typename Context>
+        result_type operator()(Tag const & t, Context const &)
+        {
+            return spirit::terminal<Tag>(t);
+        }
+    };
+}}
+
+// Define a spirit terminal. This macro may be placed in any namespace.
+// Common placeholders are placed in the main boost::spirit namespace
+// (see common_terminals.hpp)
+
+#define BOOST_SPIRIT_TERMINAL_X(x, y) ((x, y)) BOOST_SPIRIT_TERMINAL_Y
+#define BOOST_SPIRIT_TERMINAL_Y(x, y) ((x, y)) BOOST_SPIRIT_TERMINAL_X
+#define BOOST_SPIRIT_TERMINAL_X0
+#define BOOST_SPIRIT_TERMINAL_Y0
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define BOOST_SPIRIT_TERMINAL_NAME(name, type_name)                             \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
+    typedef boost::proto::terminal<tag::name>::type type_name;                  \
+    type_name const name = {{}};                                                \
+    inline void BOOST_PP_CAT(silence_unused_warnings_, name)() { (void) name; } \
+    /***/
+
+#else
+
+#define BOOST_SPIRIT_TERMINAL_NAME(name, type_name)                             \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
+    typedef boost::proto::terminal<tag::name>::type type_name;                  \
+    /***/
+
+#endif
+
+#define BOOST_SPIRIT_TERMINAL(name)                                             \
+    BOOST_SPIRIT_TERMINAL_NAME(name, name ## _type)                             \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_NAME_A(r, _, names)                       \
+    BOOST_SPIRIT_TERMINAL_NAME(                                                 \
+        BOOST_PP_TUPLE_ELEM(2, 0, names),                                       \
+        BOOST_PP_TUPLE_ELEM(2, 1, names)                                        \
+    )                                                                           \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_NAME(seq)                                 \
+    BOOST_PP_SEQ_FOR_EACH(BOOST_SPIRIT_DEFINE_TERMINALS_NAME_A, _,              \
+        BOOST_PP_CAT(BOOST_SPIRIT_TERMINAL_X seq, 0))                           \
+    /***/
+
+// Define a spirit extended terminal. This macro may be placed in any namespace.
+// Common placeholders are placed in the main boost::spirit namespace
+// (see common_terminals.hpp)
+
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+
+#define BOOST_SPIRIT_TERMINAL_NAME_EX(name, type_name)                          \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
+    typedef boost::spirit::terminal<tag::name> type_name;                       \
+    type_name const name = type_name();                                         \
+    inline void BOOST_PP_CAT(silence_unused_warnings_, name)() { (void) name; } \
+    /***/
+
+#else
+
+#define BOOST_SPIRIT_TERMINAL_NAME_EX(name, type_name)                          \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
+    typedef boost::spirit::terminal<tag::name> type_name;                       \
+    /***/
+
+#endif
+
+#define BOOST_SPIRIT_TERMINAL_EX(name)                                          \
+    BOOST_SPIRIT_TERMINAL_NAME_EX(name, name ## _type)                          \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX_A(r, _, names)                    \
+    BOOST_SPIRIT_TERMINAL_NAME_EX(                                              \
+        BOOST_PP_TUPLE_ELEM(2, 0, names),                                       \
+        BOOST_PP_TUPLE_ELEM(2, 1, names)                                        \
+    )                                                                           \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX(seq)                              \
+    BOOST_PP_SEQ_FOR_EACH(BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX_A, _,           \
+        BOOST_PP_CAT(BOOST_SPIRIT_TERMINAL_X seq, 0))                           \
+    /***/
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/terminal_expression.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/terminal_expression.hpp
new file mode 100644 (file)
index 0000000..0d206bf
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Thomas Heller
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_TERMINAL_EXPRESSION_MARCH_24_2011_1210AM)
+#define BOOST_SPIRIT_TERMINAL_EXPRESSION_MARCH_24_2011_1210AM
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/unused.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/unused.hpp
new file mode 100644 (file)
index 0000000..4197d6a
--- /dev/null
@@ -0,0 +1,105 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UNUSED_APRIL_16_2006_0616PM)
+#define BOOST_SPIRIT_UNUSED_APRIL_16_2006_0616PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4522) // multiple assignment operators specified warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // We do not import fusion ::unused_type anymore to avoid boost::fusion
+    // being turned into an associate namespace for boost::spirit, as this
+    // interferes with ADL in unexpected ways. We rather copy the full 
+    // unused_type implementation from boost::fusion.
+    ///////////////////////////////////////////////////////////////////////////
+    struct unused_type
+    {
+        unused_type()
+        {
+        }
+
+        template <typename T>
+        unused_type(T const&)
+        {
+        }
+
+        template <typename T>
+        unused_type const&
+        operator=(T const&) const
+        {
+            return *this;
+        }
+
+        template <typename T>
+        unused_type&
+        operator=(T const&)
+        {
+            return *this;
+        }
+
+        unused_type const&
+        operator=(unused_type const&) const
+        {
+            return *this;
+        }
+
+        unused_type&
+        operator=(unused_type const&)
+        {
+            return *this;
+        }
+    };
+
+    unused_type const unused = unused_type();
+
+    namespace detail
+    {
+        struct unused_only
+        {
+            unused_only(unused_type const&) {}
+        };
+    }
+
+    template <typename Out>
+    inline Out& operator<<(Out& out, detail::unused_only const&)
+    {
+        return out;
+    }
+
+    template <typename In>
+    inline In& operator>>(In& in, unused_type&)
+    {
+        return in;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace traits
+    {
+        // We use this test to detect if the argument is not an unused_type
+        template <typename T> struct not_is_unused : mpl::true_ {};
+        template <> struct not_is_unused<unused_type> : mpl::false_ {};
+    }
+}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utf8.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utf8.hpp
new file mode 100644 (file)
index 0000000..c488342
--- /dev/null
@@ -0,0 +1,72 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UC_TYPES_NOVEMBER_23_2008_0840PM)
+#define BOOST_SPIRIT_UC_TYPES_NOVEMBER_23_2008_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/foreach.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <string>
+
+namespace boost { namespace spirit
+{
+    typedef ::boost::uint32_t ucs4_char;
+    typedef char utf8_char;
+    typedef std::basic_string<ucs4_char> ucs4_string;
+    typedef std::basic_string<utf8_char> utf8_string;
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char value)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        *utf8_iter = (UChar)value;
+        return result;
+    }
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char const* str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        while (*str)
+            *utf8_iter++ = (UChar)*str++;
+        return result;
+    }
+
+    template <typename Char, typename Traits, typename Allocator>
+    inline utf8_string 
+    to_utf8(std::basic_string<Char, Traits, Allocator> const& str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        BOOST_FOREACH(Char ch, str)
+        {
+            *utf8_iter++ = (UChar)ch;
+        }
+        return result;
+    }
+}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree.hpp
new file mode 100644 (file)
index 0000000..8b85047
--- /dev/null
@@ -0,0 +1,20 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_UTREE_NOV_30_2010_1246PM)
+#define BOOST_SPIRIT_UTREE_NOV_30_2010_1246PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/utree/utree_traits_fwd.hpp>
+#include <boost/spirit/home/support/utree/utree.hpp>
+#include <boost/spirit/home/support/utree/operators.hpp>
+#include <boost/spirit/home/support/utree/detail/utree_detail2.hpp>
+#include <boost/spirit/home/support/utree/utree_traits.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail1.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail1.hpp
new file mode 100644 (file)
index 0000000..dc5a9c4
--- /dev/null
@@ -0,0 +1,146 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTREE_DETAIL1)
+#define BOOST_SPIRIT_UTREE_DETAIL1
+
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    template <typename UTreeX, typename UTreeY>
+    struct visit_impl;
+
+    struct index_impl;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Our POD double linked list. Straightforward implementation.
+    // This implementation is very primitive and is not meant to be
+    // used stand-alone. This is the internal data representation
+    // of lists in our utree.
+    ///////////////////////////////////////////////////////////////////////////
+    struct list // keep this a POD!
+    {
+        struct node;
+
+        template <typename Value>
+        class node_iterator;
+
+        void free();
+        void copy(list const& other);
+        void default_construct();
+
+        template <typename T, typename Iterator>
+        void insert(T const& val, Iterator pos);
+
+        template <typename T>
+        void push_front(T const& val);
+
+        template <typename T>
+        void push_back(T const& val);
+
+        void pop_front();
+        void pop_back();
+        node* erase(node* pos);
+
+        node* first;
+        node* last;
+        std::size_t size;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // A range of utree(s) using an iterator range (begin/end) of node(s)
+    ///////////////////////////////////////////////////////////////////////////
+    struct range
+    {
+        list::node* first;
+        list::node* last;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // A range of char*s
+    ///////////////////////////////////////////////////////////////////////////
+    struct string_range
+    {
+        char const* first;
+        char const* last;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // A void* plus type_info
+    ///////////////////////////////////////////////////////////////////////////
+    struct void_ptr
+    {
+        void* p;
+        std::type_info const* i;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Our POD fast string. This implementation is very primitive and is not
+    // meant to be used stand-alone. This is the internal data representation
+    // of strings in our utree. This is deliberately a POD to allow it to be
+    // placed in a union. This POD fast string specifically utilizes
+    // (sizeof(list) * alignment_of(list)) - (2 * sizeof(char)). In a 32 bit
+    // system, this is 14 bytes. The two extra bytes are used by utree to store
+    // management info.
+    //
+    // It is a const string (i.e. immutable). It stores the characters directly
+    // if possible and only uses the heap if the string does not fit. Null
+    // characters are allowed, making it suitable to encode raw binary. The
+    // string length is encoded in the first byte if the string is placed in-situ,
+    // else, the length plus a pointer to the string in the heap are stored.
+    ///////////////////////////////////////////////////////////////////////////
+    struct fast_string // Keep this a POD!
+    {
+        static std::size_t const
+            buff_size = (sizeof(list) + boost::alignment_of<list>::value)
+                / sizeof(char);
+
+        static std::size_t const
+            small_string_size = buff_size-sizeof(char);
+
+        static std::size_t const
+            max_string_len = small_string_size - 3;
+
+        struct heap_store
+        {
+            char* str;
+            std::size_t size;
+        };
+
+        union
+        {
+            char buff[buff_size];
+            long lbuff[buff_size / (sizeof(long)/sizeof(char))];   // for initialize 
+            heap_store heap;
+        };
+
+        int get_type() const;
+        void set_type(int t);
+        bool is_heap_allocated() const;
+
+        std::size_t size() const;
+        char const* str() const;
+
+        template <typename Iterator>
+        void construct(Iterator f, Iterator l);
+
+        void swap(fast_string& other);
+        void free();
+        void copy(fast_string const& other);
+        void initialize();
+
+        char& info();
+        char info() const;
+
+        short tag() const;
+        void tag(short tag);
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail2.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/detail/utree_detail2.hpp
new file mode 100644 (file)
index 0000000..d4be2c5
--- /dev/null
@@ -0,0 +1,1632 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTREE_DETAIL2)
+#define BOOST_SPIRIT_UTREE_DETAIL2
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4800)
+#endif
+
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost { namespace spirit { namespace detail
+{
+    inline char& fast_string::info()
+    {
+        return buff[small_string_size];
+    }
+
+    inline char fast_string::info() const
+    {
+        return buff[small_string_size];
+    }
+
+    inline int fast_string::get_type() const
+    {
+        return info() >> 1;
+    }
+
+    inline void fast_string::set_type(int t)
+    {
+        info() = (t << 1) | (info() & 1);
+    }
+
+    inline short fast_string::tag() const
+    {
+        return (int(buff[small_string_size-2]) << 8) + (unsigned char)buff[small_string_size-1];
+    }
+
+    inline void fast_string::tag(short tag)
+    {
+        buff[small_string_size-2] = tag >> 8;
+        buff[small_string_size-1] = tag & 0xff;
+    }
+
+    inline bool fast_string::is_heap_allocated() const
+    {
+        return info() & 1;
+    }
+
+    inline std::size_t fast_string::size() const
+    {
+        if (is_heap_allocated())
+            return heap.size;
+        else
+            return max_string_len - buff[max_string_len];
+    }
+
+    inline char const* fast_string::str() const
+    {
+        if (is_heap_allocated())
+            return heap.str;
+        else
+            return buff;
+    }
+
+    template <typename Iterator>
+    inline void fast_string::construct(Iterator f, Iterator l)
+    {
+        unsigned const size = l-f;
+        char* str;
+        if (size < max_string_len)
+        {
+            // if it fits, store it in-situ; small_string_size minus the length
+            // of the string is placed in buff[small_string_size - 1]
+            str = buff;
+            buff[max_string_len] = static_cast<char>(max_string_len - size);
+            info() &= ~0x1;
+        }
+        else
+        {
+            // else, store it in the heap
+            str = new char[size + 1]; // add one for the null char
+            heap.str = str;
+            heap.size = size;
+            info() |= 0x1;
+        }
+        for (std::size_t i = 0; i != size; ++i)
+        {
+            *str++ = *f++;
+        }
+        *str = '\0'; // add the null char
+    }
+
+    inline void fast_string::swap(fast_string& other)
+    {
+        std::swap(*this, other);
+    }
+
+    inline void fast_string::free()
+    {
+        if (is_heap_allocated())
+        {
+            delete [] heap.str;
+        }
+    }
+
+    inline void fast_string::copy(fast_string const& other)
+    {
+        construct(other.str(), other.str() + other.size());
+    }
+
+    inline void fast_string::initialize()
+    {
+        for (std::size_t i = 0; i != buff_size / (sizeof(long)/sizeof(char)); ++i)
+            lbuff[i] = 0;
+    }
+
+    struct list::node : boost::noncopyable
+    {
+        template <typename T>
+        node(T const& val, node* next, node* prev)
+          : val(val), next(next), prev(prev) {}
+
+        void unlink()
+        {
+            prev->next = next;
+            next->prev = prev;
+        }
+
+        utree val;
+        node* next;
+        node* prev;
+    };
+
+    template <typename Value>
+    class list::node_iterator
+      : public boost::iterator_facade<
+            node_iterator<Value>
+          , Value
+          , boost::bidirectional_traversal_tag>
+    {
+    public:
+
+        node_iterator()
+          : node(0), prev(0) {}
+
+        node_iterator(list::node* node, list::node* prev)
+          : node(node), prev(prev) {}
+
+    private:
+
+        friend class boost::iterator_core_access;
+        friend class boost::spirit::utree;
+        friend struct boost::spirit::detail::list;
+
+        void increment()
+        {
+            if (node != 0) // not at end
+            {
+                prev = node;
+                node = node->next;
+            }
+        }
+
+        void decrement()
+        {
+            if (prev != 0) // not at begin
+            {
+                node = prev;
+                prev = prev->prev;
+            }
+        }
+
+        bool equal(node_iterator const& other) const
+        {
+            return node == other.node;
+        }
+
+        typename node_iterator::reference dereference() const
+        {
+            return node->val;
+        }
+
+        list::node* node;
+        list::node* prev;
+    };
+
+    template <typename Value>
+    class list::node_iterator<boost::reference_wrapper<Value> >
+      : public boost::iterator_facade<
+            node_iterator<boost::reference_wrapper<Value> >
+          , boost::reference_wrapper<Value>
+          , boost::bidirectional_traversal_tag>
+    {
+    public:
+
+        node_iterator()
+          : node(0), prev(0), curr(nil_node) {}
+
+        node_iterator(list::node* node, list::node* prev)
+          : node(node), prev(prev), curr(node ? node->val : nil_node) {}
+
+    private:
+
+        friend class boost::iterator_core_access;
+        friend class boost::spirit::utree;
+        friend struct boost::spirit::detail::list;
+
+        void increment()
+        {
+            if (node != 0) // not at end
+            {
+                prev = node;
+                node = node->next;
+                curr = boost::ref(node ? node->val : nil_node);
+            }
+        }
+
+        void decrement()
+        {
+            if (prev != 0) // not at begin
+            {
+                node = prev;
+                prev = prev->prev;
+                curr = boost::ref(node ? node->val : nil_node);
+            }
+        }
+
+        bool equal(node_iterator const& other) const
+        {
+            return node == other.node;
+        }
+
+        typename node_iterator::reference dereference() const
+        {
+            return curr;
+        }
+
+        list::node* node;
+        list::node* prev;
+
+        static Value nil_node;
+        mutable boost::reference_wrapper<Value> curr;
+    };
+
+    template <typename Value>
+    Value list::node_iterator<boost::reference_wrapper<Value> >::nil_node = Value();
+
+    inline void list::free()
+    {
+        node* p = first;
+        while (p != 0)
+        {
+            node* next = p->next;
+            delete p;
+            p = next;
+        }
+    }
+
+    inline void list::copy(list const& other)
+    {
+        node* p = other.first;
+        while (p != 0)
+        {
+            push_back(p->val);
+            p = p->next;
+        }
+    }
+
+    inline void list::default_construct()
+    {
+        first = last = 0;
+        size = 0;
+    }
+
+    template <typename T, typename Iterator>
+    inline void list::insert(T const& val, Iterator pos)
+    {
+        if (!pos.node)
+        {
+            push_back(val);
+            return;
+        }
+
+        detail::list::node* new_node =
+            new detail::list::node(val, pos.node, pos.node->prev);
+
+        if (pos.node->prev)
+            pos.node->prev->next = new_node;
+        else
+            first = new_node;
+
+        pos.node->prev = new_node;
+        ++size;
+    }
+
+    template <typename T>
+    inline void list::push_front(T const& val)
+    {
+        detail::list::node* new_node;
+        if (first == 0)
+        {
+            new_node = new detail::list::node(val, 0, 0);
+            first = last = new_node;
+            ++size;
+        }
+        else
+        {
+            new_node = new detail::list::node(val, first, first->prev);
+            first->prev = new_node;
+            first = new_node;
+            ++size;
+        }
+    }
+
+    template <typename T>
+    inline void list::push_back(T const& val)
+    {
+        if (last == 0)
+            push_front(val);
+        else {
+            detail::list::node* new_node =
+                new detail::list::node(val, last->next, last);
+            last->next = new_node;
+            last = new_node;
+            ++size;
+        }
+    }
+
+    inline void list::pop_front()
+    {
+        BOOST_ASSERT(size != 0);
+        if (first == last) // there's only one item
+        {
+            delete first;
+            size = 0;
+            first = last = 0;
+        }
+        else
+        {
+            node* np = first;
+            first = first->next;
+            first->prev = 0;
+            delete np;
+            --size;
+        }
+    }
+
+    inline void list::pop_back()
+    {
+        BOOST_ASSERT(size != 0);
+        if (first == last) // there's only one item
+        {
+            delete first;
+            size = 0;
+            first = last = 0;
+        }
+        else
+        {
+            node* np = last;
+            last = last->prev;
+            last->next = 0;
+            delete np;
+            --size;
+        }
+    }
+
+    inline list::node* list::erase(node* pos)
+    {
+        BOOST_ASSERT(pos != 0);
+        if (pos == first)
+        {
+            pop_front();
+            return first;
+        }
+        else if (pos == last)
+        {
+            pop_back();
+            return 0;
+        }
+        else
+        {
+            node* next(pos->next);
+            pos->unlink();
+            delete pos;
+            --size;
+            return next;
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // simple binder for binary visitation (we don't want to bring in the big guns)
+    template <typename F, typename X>
+    struct bind_impl
+    {
+        typedef typename F::result_type result_type;
+        X& x; // always by reference
+        F f;
+        bind_impl(F f, X& x) : x(x), f(f) {}
+
+        template <typename Y>
+        typename F::result_type operator()(Y& y) const
+        {
+            return f(x, y);
+        }
+
+        template <typename Y>
+        typename F::result_type operator()(Y const& y) const
+        {
+            return f(x, y);
+        }
+    };
+
+    template <typename F, typename X>
+    bind_impl<F, X const> bind(F f, X const& x)
+    {
+        return bind_impl<F, X const>(f, x);
+    }
+
+    template <typename F, typename X>
+    bind_impl<F, X> bind(F f, X& x)
+    {
+        return bind_impl<F, X>(f, x);
+    }
+
+    template <typename UTreeX, typename UTreeY = UTreeX>
+    struct visit_impl
+    {
+        template <typename F>
+        typename F::result_type
+        static apply(UTreeX& x, F f) // single dispatch
+        {
+            typedef typename
+                boost::mpl::if_<boost::is_const<UTreeX>,
+                typename UTreeX::const_iterator,
+                typename UTreeX::iterator>::type
+            iterator;
+
+            typedef boost::iterator_range<iterator> list_range;
+            typedef utree_type type;
+
+            switch (x.get_type())
+            {
+                default:
+                    BOOST_THROW_EXCEPTION(
+                        bad_type_exception("corrupt utree type", x.get_type()));
+                    break;
+
+                case type::invalid_type:
+                    return f(invalid);
+
+                case type::nil_type:
+                    return f(nil);
+
+                case type::bool_type:
+                    return f(x.b);
+
+                case type::int_type:
+                    return f(x.i);
+
+                case type::double_type:
+                    return f(x.d);
+
+                case type::list_type:
+                    return f(list_range(iterator(x.l.first, 0), iterator(0, x.l.last)));
+
+                case type::range_type:
+                    return f(list_range(iterator(x.r.first, 0), iterator(0, x.r.last)));
+
+                case type::string_type:
+                    return f(utf8_string_range_type(x.s.str(), x.s.size()));
+
+                case type::string_range_type:
+                    return f(utf8_string_range_type(x.sr.first, x.sr.last));
+
+                case type::symbol_type:
+                    return f(utf8_symbol_range_type(x.s.str(), x.s.size()));
+
+                case type::binary_type:
+                    return f(binary_range_type(x.s.str(), x.s.size()));
+
+                case type::reference_type:
+                    return apply(*x.p, f);
+
+                case type::any_type:
+                    return f(any_ptr(x.v.p, x.v.i));
+
+                case type::function_type:
+                    return f(*x.pf);
+            }
+        }
+
+        template <typename F>
+        typename F::result_type
+        static apply(UTreeX& x, UTreeY& y, F f) // double dispatch
+        {
+            typedef typename
+                boost::mpl::if_<boost::is_const<UTreeX>,
+                typename UTreeX::const_iterator,
+                typename UTreeX::iterator>::type
+            iterator;
+
+            typedef boost::iterator_range<iterator> list_range;
+            typedef utree_type type;
+
+            switch (x.get_type())
+            {
+                default:
+                    BOOST_THROW_EXCEPTION(
+                        bad_type_exception("corrupt utree type", x.get_type()));
+                    break;
+
+                case type::invalid_type:
+                    return visit_impl::apply(y, detail::bind(f, invalid));
+
+                case type::nil_type:
+                    return visit_impl::apply(y, detail::bind(f, nil));
+
+                case type::bool_type:
+                    return visit_impl::apply(y, detail::bind(f, x.b));
+
+                case type::int_type:
+                    return visit_impl::apply(y, detail::bind(f, x.i));
+
+                case type::double_type:
+                    return visit_impl::apply(y, detail::bind(f, x.d));
+
+                case type::list_type:
+                    return visit_impl::apply(
+                        y, detail::bind<F, list_range>(f,
+                        list_range(iterator(x.l.first, 0), iterator(0, x.l.last))));
+
+                case type::range_type:
+                    return visit_impl::apply(
+                        y, detail::bind<F, list_range>(f,
+                        list_range(iterator(x.r.first, 0), iterator(0, x.r.last))));
+
+                case type::string_type:
+                    return visit_impl::apply(y, detail::bind(
+                        f, utf8_string_range_type(x.s.str(), x.s.size())));
+
+                case type::string_range_type:
+                    return visit_impl::apply(y, detail::bind(
+                        f, utf8_string_range_type(x.sr.first, x.sr.last)));
+
+                case type::symbol_type:
+                    return visit_impl::apply(y, detail::bind(
+                        f, utf8_symbol_range_type(x.s.str(), x.s.size())));
+
+                case type::binary_type:
+                    return visit_impl::apply(y, detail::bind(
+                        f, binary_range_type(x.s.str(), x.s.size())));
+
+                case type::reference_type:
+                    return apply(*x.p, y, f);
+
+                case type::any_type:
+                    return visit_impl::apply(
+                        y, detail::bind(f, any_ptr(x.v.p, x.v.i)));
+
+                case type::function_type:
+                    return visit_impl::apply(y, detail::bind(f, *x.pf));
+            }
+        }
+    };
+
+    struct index_impl
+    {
+        static utree& apply(utree& ut, std::size_t i)
+        {
+            switch (ut.get_type())
+            {
+                case utree_type::reference_type:
+                    return apply(ut.deref(), i);
+                case utree_type::range_type:
+                    return apply(ut.r.first, i);
+                case utree_type::list_type:
+                    return apply(ut.l.first, i);
+                default:
+                    BOOST_THROW_EXCEPTION(
+                        bad_type_exception
+                            ("index operation performed on non-list utree type",
+                             ut.get_type()));
+            }
+        }
+
+        static utree const& apply(utree const& ut, std::size_t i)
+        {
+            switch (ut.get_type())
+            {
+                case utree_type::reference_type:
+                    return apply(ut.deref(), i);
+                case utree_type::range_type:
+                    return apply(ut.r.first, i);
+                case utree_type::list_type:
+                    return apply(ut.l.first, i);
+                default:
+                    BOOST_THROW_EXCEPTION(
+                        bad_type_exception
+                            ("index operation performed on non-list utree type",
+                             ut.get_type()));
+            }
+        }
+
+        static utree& apply(list::node* node, std::size_t i)
+        {
+            for (; i > 0; --i)
+                node = node->next;
+            return node->val;
+        }
+
+        static utree const& apply(list::node const* node, std::size_t i)
+        {
+            for (; i > 0; --i)
+                node = node->next;
+            return node->val;
+        }
+    };
+}}}
+
+namespace boost { namespace spirit
+{
+    template <typename F>
+    stored_function<F>::stored_function(F f)
+      : f(f)
+    {
+    }
+
+    template <typename F>
+    stored_function<F>::~stored_function()
+    {
+    }
+
+    template <typename F>
+    utree stored_function<F>::operator()(utree const& env) const
+    {
+        return f(env);
+    }
+
+    template <typename F>
+    utree stored_function<F>::operator()(utree& env) const
+    {
+        return f(env);
+    }
+
+    template <typename F>
+    function_base*
+    stored_function<F>::clone() const
+    {
+        return new stored_function<F>(f);
+    }
+
+    template <typename F>
+    referenced_function<F>::referenced_function(F& f)
+      : f(f)
+    {
+    }
+
+    template <typename F>
+    referenced_function<F>::~referenced_function()
+    {
+    }
+
+    template <typename F>
+    utree referenced_function<F>::operator()(utree const& env) const
+    {
+        return f(env);
+    }
+
+    template <typename F>
+    utree referenced_function<F>::operator()(utree& env) const
+    {
+        return f(env);
+    }
+
+    template <typename F>
+    function_base*
+    referenced_function<F>::clone() const
+    {
+        return new referenced_function<F>(f);
+    }
+
+    inline utree::utree(utree::invalid_type)
+    {
+        s.initialize();
+        set_type(type::invalid_type);
+    }
+
+    inline utree::utree(utree::nil_type)
+    {
+        s.initialize();
+        set_type(type::nil_type);
+    }
+
+    inline utree::utree(bool b_)
+    {
+        s.initialize();
+        b = b_;
+        set_type(type::bool_type);
+    }
+
+    inline utree::utree(char c)
+    {
+        s.initialize();
+        // char constructs a single element string
+        s.construct(&c, &c+1);
+        set_type(type::string_type);
+    }
+
+    inline utree::utree(unsigned int i_)
+    {
+        s.initialize();
+        i = i_;
+        set_type(type::int_type);
+    }
+
+    inline utree::utree(int i_)
+    {
+        s.initialize();
+        i = i_;
+        set_type(type::int_type);
+    }
+
+    inline utree::utree(double d_)
+    {
+        s.initialize();
+        d = d_;
+        set_type(type::double_type);
+    }
+
+    inline utree::utree(char const* str)
+    {
+        s.initialize();
+        s.construct(str, str + strlen(str));
+        set_type(type::string_type);
+    }
+
+    inline utree::utree(char const* str, std::size_t len)
+    {
+        s.initialize();
+        s.construct(str, str + len);
+        set_type(type::string_type);
+    }
+
+    inline utree::utree(std::string const& str)
+    {
+        s.initialize();
+        s.construct(str.begin(), str.end());
+        set_type(type::string_type);
+    }
+
+    template <typename Base, utree_type::info type_>
+    inline utree::utree(basic_string<Base, type_> const& bin)
+    {
+        s.initialize();
+        s.construct(bin.begin(), bin.end());
+        set_type(type_);
+    }
+
+    inline utree::utree(boost::reference_wrapper<utree> ref)
+    {
+        s.initialize();
+        p = ref.get_pointer();
+        set_type(type::reference_type);
+    }
+
+    inline utree::utree(any_ptr const& p)
+    {
+        s.initialize();
+        v.p = p.p;
+        v.i = p.i;
+        set_type(type::any_type);
+    }
+
+    inline utree::utree(function_base const& pf_)
+    {
+        s.initialize();
+        pf = pf_.clone();
+        set_type(type::function_type);
+    }
+
+    inline utree::utree(function_base* pf_)
+    {
+        s.initialize();
+        pf = pf_;
+        set_type(type::function_type);
+    }
+
+    template <typename Iter>
+    inline utree::utree(boost::iterator_range<Iter> r)
+    {
+        s.initialize();
+
+        assign(r.begin(), r.end());
+    }
+
+    inline utree::utree(range r, shallow_tag)
+    {
+        s.initialize();
+        this->r.first = r.begin().node;
+        this->r.last = r.end().prev;
+        set_type(type::range_type);
+    }
+
+    inline utree::utree(const_range r, shallow_tag)
+    {
+        s.initialize();
+        this->r.first = r.begin().node;
+        this->r.last = r.end().prev;
+        set_type(type::range_type);
+    }
+
+    inline utree::utree(utf8_string_range_type const& str, shallow_tag)
+    {
+        s.initialize();
+        this->sr.first = str.begin();
+        this->sr.last = str.end();
+        set_type(type::string_range_type);
+    }
+
+    inline utree::utree(utree const& other)
+    {
+        s.initialize();
+        copy(other);
+    }
+
+    inline utree::~utree()
+    {
+        free();
+    }
+
+    inline utree& utree::operator=(utree const& other)
+    {
+        if (this != &other)
+        {
+            free();
+            copy(other);
+        }
+        return *this;
+    }
+
+    inline utree& utree::operator=(nil_type)
+    {
+        free();
+        set_type(type::nil_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(bool b_)
+    {
+        free();
+        b = b_;
+        set_type(type::bool_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(char c)
+    {
+        // char constructs a single element string
+        free();
+        s.construct(&c, &c+1);
+        set_type(type::string_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(unsigned int i_)
+    {
+        free();
+        i = i_;
+        set_type(type::int_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(int i_)
+    {
+        free();
+        i = i_;
+        set_type(type::int_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(double d_)
+    {
+        free();
+        d = d_;
+        set_type(type::double_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(char const* s_)
+    {
+        free();
+        s.construct(s_, s_ + strlen(s_));
+        set_type(type::string_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(std::string const& s_)
+    {
+        free();
+        s.construct(s_.begin(), s_.end());
+        set_type(type::string_type);
+        return *this;
+    }
+
+    template <typename Base, utree_type::info type_>
+    inline utree& utree::operator=(basic_string<Base, type_> const& bin)
+    {
+        free();
+        s.construct(bin.begin(), bin.end());
+        set_type(type_);
+        return *this;
+    }
+
+    inline utree& utree::operator=(boost::reference_wrapper<utree> ref)
+    {
+        free();
+        p = ref.get_pointer();
+        set_type(type::reference_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(any_ptr const& p)
+    {
+        free();
+        v.p = p.p;
+        v.i = p.i;
+        set_type(type::any_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(function_base const& pf_)
+    {
+        free();
+        pf = pf_.clone();
+        set_type(type::function_type);
+        return *this;
+    }
+
+    inline utree& utree::operator=(function_base* pf_)
+    {
+        free();
+        pf = pf_;
+        set_type(type::function_type);
+        return *this;
+    }
+
+    template <typename Iter>
+    inline utree& utree::operator=(boost::iterator_range<Iter> r)
+    {
+        free();
+        assign(r.begin(), r.end());
+        return *this;
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree const&)>::type
+    inline utree::visit(utree const& x, F f)
+    {
+        return detail::visit_impl<utree const>::apply(x, f);
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree&)>::type
+    inline utree::visit(utree& x, F f)
+    {
+        return detail::visit_impl<utree>::apply(x, f);
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree const&, utree const&)>::type
+    inline utree::visit(utree const& x, utree const& y, F f)
+    {
+        return detail::visit_impl<utree const, utree const>::apply(x, y, f);
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree const&, utree&)>::type
+    inline utree::visit(utree const& x, utree& y, F f)
+    {
+        return detail::visit_impl<utree const, utree>::apply(x, y, f);
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree&, utree const&)>::type
+    inline utree::visit(utree& x, utree const& y, F f)
+    {
+        return detail::visit_impl<utree, utree const>::apply(x, y, f);
+    }
+
+    template <typename F>
+    typename boost::result_of<F(utree&, utree&)>::type
+    inline utree::visit(utree& x, utree& y, F f)
+    {
+        return detail::visit_impl<utree, utree>::apply(x, y, f);
+    }
+
+    inline utree::reference get(utree::reference ut, utree::size_type i)
+    { return detail::index_impl::apply(ut, i); }
+
+    inline utree::const_reference
+    get(utree::const_reference ut, utree::size_type i)
+    { return detail::index_impl::apply(ut, i); }
+
+    template <typename T>
+    inline void utree::push_front(T const& val)
+    {
+        if (get_type() == type::reference_type)
+            return p->push_front(val);
+
+        ensure_list_type("push_front()");
+        l.push_front(val);
+    }
+
+    template <typename T>
+    inline void utree::push_back(T const& val)
+    {
+        if (get_type() == type::reference_type)
+            return p->push_back(val);
+
+        ensure_list_type("push_back()");
+        l.push_back(val);
+    }
+
+    template <typename T>
+    inline utree::iterator utree::insert(iterator pos, T const& val)
+    {
+        if (get_type() == type::reference_type)
+            return p->insert(pos, val);
+
+        ensure_list_type("insert()");
+        if (!pos.node)
+        {
+            l.push_back(val);
+            return utree::iterator(l.last, l.last->prev);
+        }
+        l.insert(val, pos);
+        return utree::iterator(pos.node->prev, pos.node->prev->prev);
+    }
+
+    template <typename T>
+    inline void utree::insert(iterator pos, std::size_t n, T const& val)
+    {
+        if (get_type() == type::reference_type)
+            return p->insert(pos, n, val);
+
+        ensure_list_type("insert()");
+        for (std::size_t i = 0; i != n; ++i)
+            insert(pos, val);
+    }
+
+    template <typename Iterator>
+    inline void utree::insert(iterator pos, Iterator first, Iterator last)
+    {
+        if (get_type() == type::reference_type)
+            return p->insert(pos, first, last);
+
+        ensure_list_type("insert()");
+        while (first != last)
+            insert(pos, *first++);
+    }
+
+    template <typename Iterator>
+    inline void utree::assign(Iterator first, Iterator last)
+    {
+        if (get_type() == type::reference_type)
+            return p->assign(first, last);
+
+        clear();
+        set_type(type::list_type);
+
+        while (first != last)
+        {
+            push_back(*first);
+            ++first;
+        }
+    }
+
+    inline void utree::clear()
+    {
+        if (get_type() == type::reference_type)
+            return p->clear();
+
+        // clear will always make this an invalid type
+        free();
+        set_type(type::invalid_type);
+    }
+
+    inline void utree::pop_front()
+    {
+        if (get_type() == type::reference_type)
+            return p->pop_front();
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("pop_front() called on non-list utree type",
+                     get_type()));
+
+        l.pop_front();
+    }
+
+    inline void utree::pop_back()
+    {
+        if (get_type() == type::reference_type)
+            return p->pop_back();
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("pop_back() called on non-list utree type",
+                     get_type()));
+
+        l.pop_back();
+    }
+
+    inline utree::iterator utree::erase(iterator pos)
+    {
+        if (get_type() == type::reference_type)
+            return p->erase(pos);
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("erase() called on non-list utree type",
+                     get_type()));
+
+        detail::list::node* np = l.erase(pos.node);
+        return iterator(np, np?np->prev:l.last);
+    }
+
+    inline utree::iterator utree::erase(iterator first, iterator last)
+    {
+        if (get_type() == type::reference_type)
+            return p->erase(first, last);
+
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("erase() called on non-list utree type",
+                     get_type()));
+        while (first != last)
+            erase(first++);
+        return last;
+    }
+
+    inline utree::iterator utree::begin()
+    {
+        if (get_type() == type::reference_type)
+            return p->begin();
+        else if (get_type() == type::range_type)
+            return iterator(r.first, 0);
+
+        // otherwise...
+        ensure_list_type("begin()");
+        return iterator(l.first, 0);
+    }
+
+    inline utree::iterator utree::end()
+    {
+        if (get_type() == type::reference_type)
+            return p->end();
+        else if (get_type() == type::range_type)
+            return iterator(0, r.first);
+
+        // otherwise...
+        ensure_list_type("end()");
+        return iterator(0, l.last);
+    }
+
+    inline utree::ref_iterator utree::ref_begin()
+    {
+        if (get_type() == type::reference_type)
+            return p->ref_begin();
+        else if (get_type() == type::range_type)
+            return ref_iterator(r.first, 0);
+
+        // otherwise...
+        ensure_list_type("ref_begin()");
+        return ref_iterator(l.first, 0);
+    }
+
+    inline utree::ref_iterator utree::ref_end()
+    {
+        if (get_type() == type::reference_type)
+            return p->ref_end();
+        else if (get_type() == type::range_type)
+            return ref_iterator(0, r.first);
+
+        // otherwise...
+        ensure_list_type("ref_end()");
+        return ref_iterator(0, l.last);
+    }
+
+    inline utree::const_iterator utree::begin() const
+    {
+        if (get_type() == type::reference_type)
+            return ((utree const*)p)->begin();
+        if (get_type() == type::range_type)
+            return const_iterator(r.first, 0);
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("begin() called on non-list utree type",
+                     get_type()));
+
+        return const_iterator(l.first, 0);
+    }
+
+    inline utree::const_iterator utree::end() const
+    {
+        if (get_type() == type::reference_type)
+            return ((utree const*)p)->end();
+        if (get_type() == type::range_type)
+            return const_iterator(0, r.first);
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("end() called on non-list utree type",
+                     get_type()));
+
+        return const_iterator(0, l.last);
+    }
+
+    inline bool utree::empty() const
+    {
+        type::info t = get_type();
+        if (t == type::reference_type)
+            return ((utree const*)p)->empty();
+
+        if (t == type::range_type)
+            return r.first == 0;
+        if (t == type::list_type)
+            return l.size == 0;
+
+        return t == type::nil_type || t == type::invalid_type;
+    }
+
+    inline std::size_t utree::size() const
+    {
+        type::info t = get_type();
+        if (t == type::reference_type)
+            return ((utree const*)p)->size();
+
+        if (t == type::range_type)
+        {
+            // FIXME: O(n), and we have the room to store the size of a range
+            // in the union if we compute it when assigned/constructed.
+            std::size_t size = 0;
+            detail::list::node* n = r.first;
+            while (n)
+            {
+                n = n->next;
+                ++size;
+            }
+            return size;
+        }
+        if (t == type::list_type)
+            return l.size;
+
+        if (t == type::string_type)
+            return s.size();
+
+        if (t == type::symbol_type)
+            return s.size();
+
+        if (t == type::binary_type)
+            return s.size();
+
+        if (t == type::string_range_type)
+            return sr.last - sr.first;
+
+        if (t != type::nil_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("size() called on non-list and non-string utree type",
+                     get_type()));
+
+        return 0;
+    }
+
+    inline utree_type::info utree::which() const
+    {
+        return get_type();
+    }
+
+    inline utree& utree::front()
+    {
+        if (get_type() == type::reference_type)
+            return p->front();
+        if (get_type() == type::range_type)
+        {
+            if (!r.first)
+                BOOST_THROW_EXCEPTION(
+                    empty_exception("front() called on empty utree range"));
+            return r.first->val;
+        }
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("front() called on non-list utree type", get_type()));
+        else if (!l.first)
+            BOOST_THROW_EXCEPTION(
+                empty_exception("front() called on empty utree list"));
+
+        return l.first->val;
+    }
+
+    inline utree& utree::back()
+    {
+        if (get_type() == type::reference_type)
+            return p->back();
+        if (get_type() == type::range_type)
+        {
+            if (!r.last)
+                BOOST_THROW_EXCEPTION(
+                    empty_exception("back() called on empty utree range"));
+            return r.last->val;
+        }
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("back() called on non-list utree type", get_type()));
+        else if (!l.last)
+            BOOST_THROW_EXCEPTION(
+                empty_exception("back() called on empty utree list"));
+
+        return l.last->val;
+    }
+
+    inline utree const& utree::front() const
+    {
+        if (get_type() == type::reference_type)
+            return ((utree const*)p)->front();
+        if (get_type() == type::range_type)
+        {
+            if (!r.first)
+                BOOST_THROW_EXCEPTION(
+                    empty_exception("front() called on empty utree range"));
+            return r.first->val;
+        }
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("front() called on non-list utree type", get_type()));
+        else if (!l.first)
+            BOOST_THROW_EXCEPTION(
+                empty_exception("front() called on empty utree list"));
+
+        return l.first->val;
+    }
+
+    inline utree const& utree::back() const
+    {
+        if (get_type() == type::reference_type)
+            return ((utree const*)p)->back();
+        if (get_type() == type::range_type)
+        {
+            if (!r.last)
+                BOOST_THROW_EXCEPTION(
+                    empty_exception("back() called on empty utree range"));
+            return r.last->val;
+        }
+
+        // otherwise...
+        if (get_type() != type::list_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception
+                    ("back() called on non-list utree type", get_type()));
+        else if (!l.last)
+            BOOST_THROW_EXCEPTION(
+                empty_exception("back() called on empty utree list"));
+
+        return l.last->val;
+    }
+
+    inline void utree::swap(utree& other)
+    {
+        s.swap(other.s);
+    }
+
+    inline utree::type::info utree::get_type() const
+    {
+        // the fast string holds the type info
+        return static_cast<utree::type::info>(s.get_type());
+    }
+
+    inline void utree::set_type(type::info t)
+    {
+        // the fast string holds the type info
+        s.set_type(t);
+    }
+
+    inline void utree::ensure_list_type(char const* failed_in)
+    {
+        type::info t = get_type();
+        if (t == type::invalid_type)
+        {
+            set_type(type::list_type);
+            l.default_construct();
+        }
+        else if (get_type() != type::list_type)
+        {
+            std::string msg = failed_in;
+            msg += "called on non-list and non-invalid utree type";
+            BOOST_THROW_EXCEPTION(bad_type_exception(msg.c_str(), get_type()));
+        }
+    }
+
+    inline void utree::free()
+    {
+        switch (get_type())
+        {
+            case type::binary_type:
+            case type::symbol_type:
+            case type::string_type:
+                s.free();
+                break;
+            case type::list_type:
+                l.free();
+                break;
+            case type::function_type:
+                delete pf;
+                break;
+            default:
+                break;
+        };
+        s.initialize();
+    }
+
+    inline void utree::copy(utree const& other)
+    {
+        set_type(other.get_type());
+        switch (other.get_type())
+        {
+            default:
+                BOOST_THROW_EXCEPTION(
+                    bad_type_exception("corrupt utree type", other.get_type()));
+                break;
+            case type::invalid_type:
+            case type::nil_type:
+                s.tag(other.s.tag());
+                break;
+            case type::bool_type:
+                b = other.b;
+                s.tag(other.s.tag());
+                break;
+            case type::int_type:
+                i = other.i;
+                s.tag(other.s.tag());
+                break;
+            case type::double_type:
+                d = other.d;
+                s.tag(other.s.tag());
+                break;
+            case type::reference_type:
+                p = other.p;
+                s.tag(other.s.tag());
+                break;
+            case type::any_type:
+                v = other.v;
+                s.tag(other.s.tag());
+                break;
+            case type::range_type:
+                r = other.r;
+                s.tag(other.s.tag());
+                break;
+            case type::string_range_type:
+                sr = other.sr;
+                s.tag(other.s.tag());
+                break;
+            case type::function_type:
+                pf = other.pf->clone();
+                s.tag(other.s.tag());
+                break;
+            case type::string_type:
+            case type::symbol_type:
+            case type::binary_type:
+                s.copy(other.s);
+                s.tag(other.s.tag());
+                break;
+            case type::list_type:
+                l.copy(other.l);
+                s.tag(other.s.tag());
+                break;
+        }
+    }
+
+    template <typename T>
+    struct is_iterator_range
+      : boost::mpl::false_
+    {};
+
+    template <typename Iterator>
+    struct is_iterator_range<boost::iterator_range<Iterator> >
+      : boost::mpl::true_
+    {};
+
+    template <typename To>
+    struct utree_cast
+    {
+        typedef To result_type;
+
+        template <typename From>
+        To dispatch(From const& val, boost::mpl::true_) const
+        {
+            return To(val); // From is convertible to To
+        }
+
+        template <typename From>
+        To dispatch(From const&, boost::mpl::false_) const
+        {
+            // From is NOT convertible to To !!!
+            throw std::bad_cast();
+            return To();
+        }
+
+        template <typename From>
+        To operator()(From const& val) const
+        {
+            // boost::iterator_range has a templated constructor, accepting
+            // any argument and hence any type is 'convertible' to it.
+            typedef typename boost::mpl::eval_if<
+                is_iterator_range<To>
+              , boost::is_same<From, To>, boost::is_convertible<From, To>
+            >::type is_convertible;
+            return dispatch(val, is_convertible());
+        }
+    };
+
+    template <typename T>
+    struct utree_cast<T*>
+    {
+        typedef T* result_type;
+
+        template <typename From>
+        T* operator()(From const&) const
+        {
+            // From is NOT convertible to T !!!
+            throw std::bad_cast();
+            return 0;
+        }
+
+        T* operator()(any_ptr const& p) const
+        {
+            return p.get<T*>();
+        }
+    };
+
+    template <typename T>
+    inline T utree::get() const
+    {
+        return utree::visit(*this, utree_cast<T>());
+    }
+
+    inline utree& utree::deref()
+    {
+        return (get_type() == type::reference_type) ? *p : *this;
+    }
+
+    inline utree const& utree::deref() const
+    {
+        return (get_type() == type::reference_type) ? *p : *this;
+    }
+
+    inline short utree::tag() const
+    {
+        return s.tag();
+    }
+
+    inline void utree::tag(short tag)
+    {
+        s.tag(tag);
+    }
+
+    inline utree utree::eval(utree const& env) const
+    {
+        if (get_type() == type::reference_type)
+            return deref().eval(env);
+
+        if (get_type() != type::function_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception(
+                    "eval() called on non-function utree type", get_type()));
+        return (*pf)(env);
+    }
+
+    inline utree utree::eval(utree& env) const
+    {
+        if (get_type() == type::reference_type)
+            return deref().eval(env);
+
+        if (get_type() != type::function_type)
+            BOOST_THROW_EXCEPTION(
+                bad_type_exception(
+                    "eval() called on non-function utree type", get_type()));
+        return (*pf)(env);
+    }
+
+    inline utree utree::operator() (utree const& env) const
+    {
+        return eval(env);
+    }
+
+    inline utree utree::operator() (utree& env) const
+    {
+        return eval(env);
+    }
+}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/operators.hpp
new file mode 100644 (file)
index 0000000..39b1d64
--- /dev/null
@@ -0,0 +1,704 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTREE_OPERATORS)
+#define BOOST_SPIRIT_UTREE_OPERATORS
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4804)
+# pragma warning(disable: 4805)
+#endif
+
+#include <exception>
+#if !defined(BOOST_SPIRIT_DISABLE_UTREE_IO)
+  #include <ios>
+  #include <boost/io/ios_state.hpp>
+#endif
+#include <boost/spirit/home/support/utree/utree.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_integral.hpp>
+
+namespace boost { namespace spirit 
+{
+    // Relational operators
+    bool operator==(utree const& a, utree const& b);
+    bool operator<(utree const& a, utree const& b);
+    bool operator!=(utree const& a, utree const& b);
+    bool operator>(utree const& a, utree const& b);
+    bool operator<=(utree const& a, utree const& b);
+    bool operator>=(utree const& a, utree const& b);
+
+#if !defined(BOOST_SPIRIT_DISABLE_UTREE_IO)
+    // output
+    std::ostream& operator<<(std::ostream& out, utree const& x);
+    std::ostream& operator<<(std::ostream& out, utree::invalid_type const& x);
+    std::ostream& operator<<(std::ostream& out, utree::nil_type const& x);
+#endif
+
+    // Logical operators
+    utree operator&&(utree const& a, utree const& b);
+    utree operator||(utree const& a, utree const& b);
+    utree operator!(utree const& a);
+
+    // Arithmetic operators
+    utree operator+(utree const& a, utree const& b);
+    utree operator-(utree const& a, utree const& b);
+    utree operator*(utree const& a, utree const& b);
+    utree operator/(utree const& a, utree const& b);
+    utree operator%(utree const& a, utree const& b);
+    utree operator-(utree const& a);
+
+    // Bitwise operators
+    utree operator&(utree const& a, utree const& b);
+    utree operator|(utree const& a, utree const& b);
+    utree operator^(utree const& a, utree const& b);
+    utree operator<<(utree const& a, utree const& b);
+    utree operator>>(utree const& a, utree const& b);
+    utree operator~(utree const& a);
+
+    // Implementation
+    struct utree_is_equal
+    {
+        typedef bool result_type;
+
+        template <typename A, typename B>
+        bool dispatch(const A&, const B&, boost::mpl::false_) const
+        {
+            return false; // cannot compare different types by default
+        }
+
+        template <typename A, typename B>
+        bool dispatch(const A& a, const B& b, boost::mpl::true_) const
+        {
+            return a == b; // for arithmetic types
+        }
+
+        template <typename A, typename B>
+        bool operator()(const A& a, const B& b) const
+        {
+            return dispatch(a, b,
+                boost::mpl::and_<
+                    boost::is_arithmetic<A>,
+                    boost::is_arithmetic<B> >());
+        }
+
+        template <typename T>
+        bool operator()(const T& a, const T& b) const
+        {
+            // This code works for lists
+            return a == b;
+        }
+
+        template <typename Base, utree_type::info type_>
+        bool operator()(
+            basic_string<Base, type_> const& a,
+            basic_string<Base, type_> const& b) const
+        {
+            return static_cast<Base const&>(a) == static_cast<Base const&>(b);
+        }
+
+        bool operator()(utree::invalid_type, utree::invalid_type) const
+        {
+            return true;
+        }
+
+        bool operator()(utree::nil_type, utree::nil_type) const
+        {
+            return true;
+        }
+
+        bool operator()(function_base const&, function_base const&) const
+        {
+            return false; // just don't allow comparison of functions
+        }
+    };
+
+    struct utree_is_less_than
+    {
+        typedef bool result_type;
+
+        template <typename A, typename B>
+        bool dispatch(const A&, const B&, boost::mpl::false_) const
+        {
+            return false; // cannot compare different types by default
+        }
+
+        template <typename A, typename B>
+        bool dispatch(const A& a, const B& b, boost::mpl::true_) const
+        {
+            return a < b; // for arithmetic types
+        }
+
+        template <typename A, typename B>
+        bool operator()(const A& a, const B& b) const
+        {
+            return dispatch(a, b,
+                boost::mpl::and_<
+                    boost::is_arithmetic<A>,
+                    boost::is_arithmetic<B> >());
+        }
+
+        template <typename T>
+        bool operator()(const T& a, const T& b) const
+        {
+            // This code works for lists
+            return a < b;
+        }
+
+        template <typename Base, utree_type::info type_>
+        bool operator()(
+            basic_string<Base, type_> const& a,
+            basic_string<Base, type_> const& b) const
+        {
+            return static_cast<Base const&>(a) < static_cast<Base const&>(b);
+        }
+
+        bool operator()(utree::invalid_type, utree::invalid_type) const
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("no less-than comparison for this utree type",
+               utree_type::invalid_type));
+            return false; // no less than comparison for nil
+        }
+
+        bool operator()(utree::nil_type, utree::nil_type) const
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("no less-than comparison for this utree type",
+               utree_type::nil_type));
+            return false; // no less than comparison for nil
+        }
+
+        bool operator()(any_ptr const&, any_ptr const&) const
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("no less-than comparison for this utree type",
+               utree_type::any_type));
+            return false; // no less than comparison for any_ptr
+        }
+
+        bool operator()(function_base const&, function_base const&) const
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("no less-than comparison for this utree type",
+               utree_type::function_type));
+            return false; // no less than comparison of functions
+        }
+    };
+
+#if !defined(BOOST_SPIRIT_DISABLE_UTREE_IO)
+    struct utree_print
+    {
+        typedef void result_type;
+
+        std::ostream& out;
+        utree_print(std::ostream& out) : out(out) {}
+
+        void operator()(utree::invalid_type) const
+        {
+            out << "<invalid> ";
+        }
+
+        void operator()(utree::nil_type) const
+        {
+            out << "<nil> ";
+        }
+
+        template <typename T>
+        void operator()(T val) const
+        {
+            out << val << ' ';
+        }
+
+        void operator()(bool b) const
+        {
+            out << (b ? "true" : "false") << ' ';
+        }
+
+        void operator()(binary_range_type const& b) const
+        {
+            boost::io::ios_all_saver saver(out);
+            out << "#";
+            out.width(2);
+            out.fill('0');
+
+            typedef binary_range_type::const_iterator iterator;
+            for (iterator i = b.begin(); i != b.end(); ++i)
+                out << std::hex << int((unsigned char)*i);
+            out << "# ";
+        }
+
+        void operator()(utf8_string_range_type const& str) const
+        {
+            typedef utf8_string_range_type::const_iterator iterator;
+            iterator i = str.begin();
+            out << '"';
+            for (; i != str.end(); ++i)
+                out << *i;
+            out << "\" ";
+        }
+
+        void operator()(utf8_symbol_range_type const& str) const
+        {
+            typedef utf8_symbol_range_type::const_iterator iterator;
+            iterator i = str.begin();
+            for (; i != str.end(); ++i)
+                out << *i;
+            out << ' ';
+        }
+
+        template <typename Iterator>
+        void operator()(boost::iterator_range<Iterator> const& range) const
+        {
+            typedef typename boost::iterator_range<Iterator>::const_iterator iterator;
+            (*this)('(');
+            for (iterator i = range.begin(); i != range.end(); ++i)
+            {
+                boost::spirit::utree::visit(*i, *this);
+            }
+            (*this)(')');
+        }
+
+        void operator()(any_ptr const&) const
+        {
+            return (*this)("<pointer>");
+        }
+
+        void operator()(function_base const&) const
+        {
+            return (*this)("<function>");
+        }
+    };
+#endif
+
+    template <typename Base>
+    struct logical_function
+    {
+        typedef utree result_type;
+
+        // We assume anything except false is true
+
+        // binary
+        template <typename A, typename B>
+        utree operator()(A const& a, B const& b) const
+        {
+            return dispatch(a, b
+              , boost::is_arithmetic<A>()
+              , boost::is_arithmetic<B>());
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree dispatch(A const& a, B const& b, mpl::true_, mpl::true_) const
+        {
+            return Base::eval(a, b); // for arithmetic types
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree dispatch(A const&, B const& b, mpl::false_, mpl::true_) const
+        {
+            return Base::eval(true, b);
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree dispatch(A const& a, B const&, mpl::true_, mpl::false_) const
+        {
+            return Base::eval(a, true);
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree dispatch(A const&, B const&, mpl::false_, mpl::false_) const
+        {
+            return Base::eval(true, true);
+        }
+        
+        // unary
+        template <typename A>
+        utree operator()(A const& a) const
+        {
+            return dispatch(a, boost::is_arithmetic<A>());
+        }
+
+        // unary
+        template <typename A>
+        utree dispatch(A const& a, mpl::true_) const
+        {
+            return Base::eval(a);
+        }
+
+        // unary
+        template <typename A>
+        utree dispatch(A const&, mpl::false_) const
+        {
+            return Base::eval(true);
+        }
+    };
+
+    template <typename Base>
+    struct arithmetic_function
+    {
+        typedef utree result_type;
+
+        template <typename A, typename B>
+        utree dispatch(A const&, B const&, boost::mpl::false_) const
+        {
+            return utree(); // cannot apply to non-arithmetic types
+        }
+
+        template <typename A, typename B>
+        utree dispatch(A const& a, B const& b, boost::mpl::true_) const
+        {
+            return Base::eval(a, b); // for arithmetic types
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree operator()(A const& a, B const& b) const
+        {
+            return dispatch(a, b,
+                boost::mpl::and_<
+                    boost::is_arithmetic<A>,
+                    boost::is_arithmetic<B> >());
+        }
+
+        template <typename A>
+        utree dispatch(A const&, boost::mpl::false_) const
+        {
+            return utree(); // cannot apply to non-arithmetic types
+        }
+
+        template <typename A>
+        utree dispatch(A const& a, boost::mpl::true_) const
+        {
+            return Base::eval(a); // for arithmetic types
+        }
+
+        // unary
+        template <typename A>
+        utree operator()(A const& a) const
+        {
+            return dispatch(a, boost::is_arithmetic<A>());
+        }
+    };
+
+    template <typename Base>
+    struct integral_function
+    {
+        typedef utree result_type;
+
+        template <typename A, typename B>
+        utree dispatch(A const&, B const&, boost::mpl::false_) const
+        {
+            return utree(); // cannot apply to non-integral types
+        }
+
+        template <typename A, typename B>
+        utree dispatch(A const& a, B const& b, boost::mpl::true_) const
+        {
+            return Base::eval(a, b); // for integral types
+        }
+
+        // binary
+        template <typename A, typename B>
+        utree operator()(A const& a, B const& b) const
+        {
+            return dispatch(a, b,
+                boost::mpl::and_<
+                    boost::is_integral<A>,
+                    boost::is_integral<B> >());
+        }
+
+        template <typename A>
+        utree dispatch(A const&, boost::mpl::false_) const
+        {
+            return utree(); // cannot apply to non-integral types
+        }
+
+        template <typename A>
+        utree dispatch(A const& a, boost::mpl::true_) const
+        {
+            return Base::eval(a); // for integral types
+        }
+
+        // unary
+        template <typename A>
+        utree operator()(A const& a) const
+        {
+            return dispatch(a, boost::is_integral<A>());
+        }
+    };
+
+#define BOOST_SPIRIT_UTREE_CREATE_FUNCTION(name, expr, base)                  \
+    struct BOOST_PP_CAT(function_impl_, name)                                 \
+    {                                                                         \
+        template <typename A, typename B>                                     \
+        static utree eval(A const& a, B const& b)                             \
+        {                                                                     \
+            return utree(expr);                                               \
+        }                                                                     \
+        template <typename A>                                                 \
+        static utree eval(A const& a)                                         \
+        {                                                                     \
+            static int b;                                                     \
+            (void) b;                                                         \
+            return utree(expr);                                               \
+        }                                                                     \
+    };                                                                        \
+    base<BOOST_PP_CAT(function_impl_, name)> const                            \
+        BOOST_PP_CAT(base, BOOST_PP_CAT(_, name)) = {};                       \
+    /***/
+
+#define BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(name, expr)             \
+    BOOST_SPIRIT_UTREE_CREATE_FUNCTION(name, expr, arithmetic_function)       \
+    /***/
+
+#define BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(name, expr)               \
+    BOOST_SPIRIT_UTREE_CREATE_FUNCTION(name, expr, integral_function)         \
+    /***/
+
+#define BOOST_SPIRIT_UTREE_CREATE_LOGICAL_FUNCTION(name, expr)                \
+    BOOST_SPIRIT_UTREE_CREATE_FUNCTION(name, expr, logical_function)          \
+    /***/
+
+    inline bool operator==(utree const& a, utree const& b)
+    {
+        return utree::visit(a, b, utree_is_equal());
+    }
+
+    inline bool operator<(utree const& a, utree const& b)
+    {
+        return utree::visit(a, b, utree_is_less_than());
+    }
+
+    inline bool operator!=(utree const& a, utree const& b)
+    {
+        return !(a == b);
+    }
+
+    inline bool operator>(utree const& a, utree const& b)
+    {
+        return b < a;
+    }
+
+    inline bool operator<=(utree const& a, utree const& b)
+    {
+        return !(b < a);
+    }
+
+    inline bool operator>=(utree const& a, utree const& b)
+    {
+        return !(a < b);
+    }
+
+#if !defined(BOOST_SPIRIT_DISABLE_UTREE_IO)
+    inline std::ostream& operator<<(std::ostream& out, utree const& x)
+    {
+        utree::visit(x, utree_print(out));
+        return out;
+    }
+
+    inline std::ostream& operator<<(std::ostream& out, utree::invalid_type const&)
+    {
+        return out;
+    }
+
+    inline std::ostream& operator<<(std::ostream& out, utree::nil_type const&)
+    {
+        return out;
+    }
+#endif
+
+    BOOST_SPIRIT_UTREE_CREATE_LOGICAL_FUNCTION(and_, a&&b)
+    BOOST_SPIRIT_UTREE_CREATE_LOGICAL_FUNCTION(or_, a||b)
+    BOOST_SPIRIT_UTREE_CREATE_LOGICAL_FUNCTION(not_, !a)
+
+    BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(plus, a+b)
+    BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(minus, a-b)
+    BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(times, a*b)
+    BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(divides, a/b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(modulus, a%b)
+    BOOST_SPIRIT_UTREE_CREATE_ARITHMETIC_FUNCTION(negate, -a)
+
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(bitand_, a&b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(bitor_, a|b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(bitxor_, a^b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(shift_left, a<<b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(shift_right, a>>b)
+    BOOST_SPIRIT_UTREE_CREATE_INTEGRAL_FUNCTION(invert, ~a)
+
+    inline utree operator&&(utree const& a, utree const& b)
+    {
+          return utree::visit(a, b, logical_function_and_);
+    }
+
+    inline utree operator||(utree const& a, utree const& b)
+    {
+        return utree::visit(a, b, logical_function_or_);
+    }
+
+    inline utree operator!(utree const& a)
+    {
+        return utree::visit(a, logical_function_not_);
+    }
+
+    inline utree operator+(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, arithmetic_function_plus);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("addition performed on non-arithmetic utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator-(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, arithmetic_function_minus);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("subtraction performed on non-arithmetic utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator*(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, arithmetic_function_times);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("multiplication performed on non-arithmetic utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator/(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, arithmetic_function_divides);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("division performed on non-arithmetic utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator%(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_modulus);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("modulos performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator-(utree const& a)
+    {
+        utree r = utree::visit(a, arithmetic_function_negate);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("negation performed on non-arithmetic utree type",
+               a.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator&(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_bitand_);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("bitwise and performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator|(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_bitor_);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("bitwise or performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator^(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_bitxor_);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("bitwise xor performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator<<(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_shift_left);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("left shift performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator>>(utree const& a, utree const& b)
+    {
+        utree r = utree::visit(a, b, integral_function_shift_right);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("right shift performed on non-integral utree types",
+               a.which(), b.which()));
+        } 
+        return r;
+    }
+
+    inline utree operator~(utree const& a)
+    {
+        utree r = utree::visit(a, integral_function_invert);
+        if (r.which() == utree_type::invalid_type)
+        {
+            BOOST_THROW_EXCEPTION(bad_type_exception
+              ("inversion performed on non-integral utree type",
+               a.which()));
+        } 
+        return r;
+    }
+}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree.hpp
new file mode 100644 (file)
index 0000000..67120e9
--- /dev/null
@@ -0,0 +1,642 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2010-2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTREE)
+#define BOOST_SPIRIT_UTREE
+
+#include <cstddef>
+#include <algorithm>
+#include <string>
+#include <iostream>
+#include <ios>
+#include <sstream>
+#include <typeinfo>
+
+#include <boost/io/ios_state.hpp>
+#include <boost/integer.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/ref.hpp>
+
+#include <boost/spirit/home/support/utree/detail/utree_detail1.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4804)
+# pragma warning(disable: 4805)
+# pragma warning(disable: 4244)
+#endif
+
+namespace boost { namespace spirit
+{
+    //[utree_exceptions
+    /*` All exceptions thrown by utree are derived from utree_exception. */
+    struct utree_exception : std::exception {};
+
+    /*`The `bad_type_exception` is thrown whenever somebody calls a member 
+       function, which applies to certain stored utree_type's only, but this 
+       precondition is violated as the `utree` instance holds some other type.
+    */
+    struct bad_type_exception /*: utree_exception*/;
+
+    /*`The `empty_exception` is thrown whenever a precondition of a list
+       or range utree method is violated due to the list or range being empty. 
+    */
+    struct empty_exception /*: utree_exception*/;
+    //]
+
+    //[utree_types
+    /*`Each instance of an `utree` data structure can store exactly one of the 
+       following data types at a time: 
+    */
+    struct utree_type
+    {
+        enum info
+        {
+            invalid_type,       // the utree has not been initialized (it's 
+                                // default constructed)
+            nil_type,           // nil is the sentinel (empty) utree type.
+            list_type,          // A doubly linked list of utrees.
+            range_type,         // A range of list::iterators. 
+            reference_type,     // A reference to another utree.
+            any_type,           // A pointer or reference to any C++ type. 
+            function_type,      // A utree holding a stored_function<F> object,
+                                // where F is an unary function object taking a 
+                                // utree as it's parameter and returning a
+                                // utree.
+
+            // numeric atoms
+            bool_type,          // An utree holding a boolean value
+            int_type,           // An utree holding a integer (int) value
+            double_type,        // An utree holding a floating point (double) value
+
+            // text atoms (utf8)
+            string_type,        // An UTF-8 string 
+            string_range_type,  // A pair of iterators into an UTF-8 string
+            symbol_type,        // An UTF-8 symbol name
+
+            binary_type         // Arbitrary binary data
+        };
+        typedef boost::uint_t<sizeof(info)*8>::exact exact_integral_type; 
+        typedef boost::uint_t<sizeof(info)*8>::fast fast_integral_type; 
+    };
+    //]
+
+    // streaming operator for utree types - essential for diagnostics    
+    inline std::ostream& operator<<(std::ostream& out, utree_type::info t)
+    {
+        boost::io::ios_all_saver saver(out);
+        switch (t) {
+            case utree_type::invalid_type: { out << "invalid"; break; }
+            case utree_type::nil_type: { out << "nil"; break; }
+            case utree_type::list_type: { out << "list"; break; }
+            case utree_type::range_type: { out << "range"; break; }
+            case utree_type::reference_type: { out << "reference"; break; }
+            case utree_type::any_type: { out << "any"; break; }
+            case utree_type::function_type: { out << "function"; break; }
+            case utree_type::bool_type: { out << "bool"; break; }
+            case utree_type::int_type: { out << "int"; break; }
+            case utree_type::double_type: { out << "double"; break; }
+            case utree_type::string_type: { out << "string"; break; }
+            case utree_type::string_range_type: { out << "string_range"; break; }
+            case utree_type::symbol_type: { out << "symbol"; break; }
+            case utree_type::binary_type: { out << "binary"; break; }
+            default: { out << "unknown"; break; }
+        }
+        out << std::hex << "[0x"
+            << static_cast<utree_type::fast_integral_type>(t) << "]";
+        return out;
+    }
+    
+    struct bad_type_exception : utree_exception
+    {
+        std::string msg;
+
+        bad_type_exception(char const* error, utree_type::info got)
+          : msg()
+        {
+            std::ostringstream oss;
+            oss << "utree: " << error
+                << " (got utree type '" << got << "')";
+            msg = oss.str();
+        }
+        
+        bad_type_exception(char const* error, utree_type::info got1,
+                           utree_type::info got2)
+          : msg()
+        {
+            std::ostringstream oss;
+            oss << "utree: " << error
+                << " (got utree types '" << got1 << "' and '" << got2 << "')";
+            msg = oss.str();
+        }
+
+        virtual ~bad_type_exception() throw() {}
+
+        virtual char const* what() const throw()
+        { return msg.c_str(); }
+    };
+    
+    struct empty_exception : utree_exception
+    {
+        char const* msg;
+
+        empty_exception(char const* error) : msg(error) {}
+        
+        virtual ~empty_exception() throw() {}
+
+        virtual char const* what() const throw()
+        { return msg; }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // A typed string with parametric Base storage. The storage can be any
+    // range or (stl container) of chars.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Base, utree_type::info type_>
+    struct basic_string : Base
+    {
+        static utree_type::info const type = type_;
+
+        basic_string()
+          : Base() {}
+
+        basic_string(Base const& base)
+          : Base(base) {}
+
+        template <typename Iterator>
+        basic_string(Iterator bits, std::size_t len)
+          : Base(bits, bits + len) {}
+
+        template <typename Iterator>
+        basic_string(Iterator first, Iterator last)
+          : Base(first, last) {}
+
+        basic_string& operator=(basic_string const& other)
+        {
+            Base::operator=(other);
+            return *this;
+        }
+
+        basic_string& operator=(Base const& other)
+        {
+            Base::operator=(other);
+            return *this;
+        }
+    };
+
+    //[utree_strings
+    /*`The `utree` string types described below are used by the `utree` API 
+       only. These are not used to store information in the `utree` itself.
+       Their purpose is to refer to different internal `utree` node types
+       only. For instance, creating a `utree` from a binary data type will 
+       create a `binary_type` utree node (see above).
+    */
+    /*`The binary data type can be represented either verbatim as a sequence 
+       of bytes or as a pair of iterators into some other stored binary data 
+       sequence. Use this string type to access/create a `binary_type` `utree`.
+    */
+    typedef basic_string<
+        boost::iterator_range<char const*>, utree_type::binary_type
+    > binary_range_type;
+    typedef basic_string<
+        std::string, utree_type::binary_type
+    > binary_string_type;
+
+    /*`The UTF-8 string can be represented either verbatim as a sequence of 
+       characters or as a pair of iterators into some other stored binary data 
+       sequence. Use this string type to access/create a `string_type` `utree`.
+    */
+    typedef basic_string<
+        boost::iterator_range<char const*>, utree_type::string_type
+    > utf8_string_range_type;
+    typedef basic_string<
+        std::string, utree_type::string_type
+    > utf8_string_type;
+
+    /*`The UTF-8 symbol can be represented either verbatim as a sequence of 
+       characters or as a pair of iterators into some other stored binary data 
+       sequence. Use this string type to access/create a `symbol_type` `utree`.
+    */
+    typedef basic_string<
+        boost::iterator_range<char const*>, utree_type::symbol_type
+    > utf8_symbol_range_type;
+    typedef basic_string<
+        std::string, utree_type::symbol_type
+    > utf8_symbol_type;
+    //]
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Our function type
+    ///////////////////////////////////////////////////////////////////////////
+    class utree;
+
+    //[utree_function_object_interface
+    struct function_base
+    {
+        virtual ~function_base() {}
+        virtual utree operator()(utree const& env) const = 0;
+        virtual utree operator()(utree& env) const = 0;
+
+        // Calling f.clone() must return a newly allocated function_base 
+        // instance that is equal to f.
+        virtual function_base* clone() const = 0; 
+    };
+
+    template <typename F>
+    struct stored_function : function_base
+    {
+        F f;
+        stored_function(F f = F());
+        virtual ~stored_function();
+        virtual utree operator()(utree const& env) const;
+        virtual utree operator()(utree& env) const;
+        virtual function_base* clone() const;
+    };
+    
+    template <typename F>
+    struct referenced_function : function_base
+    {
+        F& f;
+        referenced_function(F& f);
+        virtual ~referenced_function();
+        virtual utree operator()(utree const& env) const;
+        virtual utree operator()(utree& env) const;
+        virtual function_base* clone() const;
+    };
+    //]
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Shallow tag. Instructs utree to hold an iterator_range
+    // as-is without deep copying the range.
+    ///////////////////////////////////////////////////////////////////////////
+    struct shallow_tag {};
+    shallow_tag const shallow = {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // A void* plus type_info
+    ///////////////////////////////////////////////////////////////////////////
+    class any_ptr
+    {
+    public:
+        template <typename Ptr>
+        typename boost::disable_if<
+            boost::is_polymorphic<
+                typename boost::remove_pointer<Ptr>::type>,
+            Ptr>::type
+        get() const
+        {
+            if (*i == typeid(Ptr))
+            {
+                return static_cast<Ptr>(p);
+            }
+            boost::throw_exception(std::bad_cast());
+        }
+
+        template <typename T>
+        any_ptr(T* p)
+          : p(p), i(&typeid(T*))
+        {}
+
+        friend bool operator==(any_ptr const& a, any_ptr const& b)
+        {
+            return (a.p == b.p) && (*a.i == *b.i);
+        }
+
+    private:
+        // constructor is private
+        any_ptr(void* p, std::type_info const* i)
+          : p(p), i(i) {}
+
+        template <typename UTreeX, typename UTreeY>
+        friend struct detail::visit_impl;
+
+        friend class utree;
+
+        void* p;
+        std::type_info const* i;
+    };
+
+    //[utree
+    class utree {
+    public:
+        ///////////////////////////////////////////////////////////////////////
+        // The invalid type
+        struct invalid_type {};
+
+        ///////////////////////////////////////////////////////////////////////
+        // The nil type
+        struct nil_type {};
+
+        ///////////////////////////////////////////////////////////////////////
+        // The list type, this can be used to initialize an utree to hold an 
+        // empty list
+        struct list_type;
+
+        //[utree_container_types
+        typedef utree value_type;
+        typedef utree& reference;
+        typedef utree const& const_reference;
+        typedef std::ptrdiff_t difference_type;
+        typedef std::size_t size_type;
+
+        typedef detail::list::node_iterator<utree> iterator;
+        typedef detail::list::node_iterator<utree const> const_iterator;
+        //]
+
+        typedef detail::list::node_iterator<boost::reference_wrapper<utree> >
+          ref_iterator;
+
+        typedef boost::iterator_range<iterator> range;
+        typedef boost::iterator_range<const_iterator> const_range;
+
+        // dtor
+        ~utree();
+
+        ////////////////////////////////////////////////////////////////////////
+        //[utree_initialization
+        /*`A `utree` can be constructed or initialized from a wide range of 
+           data types, allowing to create `utree` instances for every 
+           possible node type (see the description of `utree_type::info` above). 
+           For this reason it exposes a constructor and an assignment operator 
+           for each of the allowed node types as shown below. All constructors
+           are non-explicit on purpose, allowing to use an utree instance as
+           the attribute to almost any Qi parser.
+        */
+        // This constructs an `invalid_type` node. When used in places
+        // where a boost::optional is expected (i.e. as an attribute for the 
+        // optional component), this represents the 'empty' state.
+        utree(invalid_type = invalid_type());
+
+        // This initializes a `nil_type` node, which represents a valid,
+        // 'initialized empty' utree (different from invalid_type!).
+        utree(nil_type);
+        reference operator=(nil_type);
+
+        // This initializes a `boolean_type` node, which can hold 'true' or
+        // 'false' only.
+        explicit utree(bool);
+        reference operator=(bool);
+
+        // This initializes an `integer_type` node, which can hold arbitrary 
+        // integers. For convenience these functions are overloaded for signed
+        // and unsigned integer types.
+        utree(unsigned int);
+        utree(int);
+        reference operator=(unsigned int);
+        reference operator=(int);
+
+        // This initializes a `double_type` node, which can hold arbitrary 
+        // floating point (double) values.
+        utree(double);
+        reference operator=(double);
+
+        // This initializes a `string_type` node, which can hold a narrow 
+        // character sequence (usually an UTF-8 string).
+        utree(char);
+        utree(char const*);
+        utree(char const*, std::size_t);
+        utree(std::string const&);
+        reference operator=(char);
+        reference operator=(char const*);
+        reference operator=(std::string const&);
+
+        // This constructs a `string_range_type` node, which does not copy the 
+        // data but stores the iterator range to the character sequence the 
+        // range has been initialized from.
+        utree(utf8_string_range_type const&, shallow_tag);
+
+        // This initializes a `reference_type` node, which holds a reference to 
+        // another utree node. All operations on such a node are automatically
+        // forwarded to the referenced utree instance.
+        utree(boost::reference_wrapper<utree>);
+        reference operator=(boost::reference_wrapper<utree>);
+
+        // This initializes an `any_type` node, which can hold a pointer to an
+        // instance of any type together with the typeid of that type. When 
+        // accessing that pointer the typeid will be checked, causing a 
+        // std::bad_cast to be thrown if the typeids do not match.
+        utree(any_ptr const&);
+        reference operator=(any_ptr const&);
+
+        // This initializes a `range_type` node, which holds an utree list node
+        // the elements of which are copy constructed (assigned) from the 
+        // elements referenced by the given range of iterators.
+        template <class Iterator>
+        utree(boost::iterator_range<Iterator>);
+        template <class Iterator>
+        reference operator=(boost::iterator_range<Iterator>);
+        
+        // This initializes a `function_type` node from a polymorphic function
+        // object pointer (takes ownership) or reference. 
+        utree(function_base const&);
+        reference operator=(function_base const&);
+        utree(function_base*);
+        reference operator=(function_base*);
+
+        // This initializes either a `string_type`, a `symbol_type`, or a 
+        // `binary_type` node (depending on the template parameter `type_`), 
+        // which will hold the corresponding narrow character sequence (usually 
+        // an UTF-8 string).
+        template <class Base, utree_type::info type_>
+        utree(basic_string<Base, type_> const&);
+        template <class Base, utree_type::info type_>
+        reference operator=(basic_string<Base, type_> const&);
+        //]
+
+        // copy 
+        utree(const_reference);
+        reference operator=(const_reference);
+
+        // range
+        utree(range, shallow_tag);
+        utree(const_range, shallow_tag);
+
+        // assign dispatch
+        template <class Iterator>
+        void assign(Iterator, Iterator);
+
+        ////////////////////////////////////////////////////////////////////////
+
+        ////////////////////////////////////////////////////////////////////////
+        // function object visitation interface
+
+        // single dispatch
+        template <class F>
+        typename boost::result_of<F(utree const&)>::type
+        static visit(utree const&, F);
+
+        template <class F>
+        typename boost::result_of<F(utree&)>::type
+        static visit(utree&, F);
+
+        // double dispatch
+        template <class F>
+        typename boost::result_of<F(utree const&, utree const&)>::type
+        static visit(utree const&, utree const&, F);
+
+        template <class F>
+        typename boost::result_of<F(utree&, utree const&)>::type
+        static visit(utree&, utree const&, F);
+
+        template <class F>
+        typename boost::result_of<F(utree const&, utree&)>::type
+        static visit(utree const&, utree&, F);
+
+        template <class F>
+        typename boost::result_of<F(utree&, utree&)>::type
+        static visit(utree&, utree&, F);
+
+        ////////////////////////////////////////////////////////////////////////
+
+        ///////////////////////////////////////////////////////////////////////
+        //[utree_container_functions
+        // STL Container interface
+
+        // insertion 
+        template <class T>
+        void push_back(T const&);
+        template <class T>
+        void push_front(T const&);
+        template <class T>
+        iterator insert(iterator, T const&);
+        template <class T>
+        void insert(iterator, std::size_t, T const&);
+        template <class Iterator>
+        void insert(iterator, Iterator, Iterator);
+
+        // erasure
+        void pop_front();
+        void pop_back();
+        iterator erase(iterator);
+        iterator erase(iterator, iterator);
+
+        // front access
+        reference front();
+        const_reference front() const;
+        iterator begin();
+        const_iterator begin() const;
+        ref_iterator ref_begin();
+
+        // back access
+        reference back();
+        const_reference back() const;
+        iterator end();
+        const_iterator end() const;
+        ref_iterator ref_end();
+        //]
+
+        // This clears the utree instance and resets its type to `invalid_type`
+        void clear();
+
+        void swap(utree&);
+        bool empty() const;
+
+        size_type size() const;
+        /*`[warning `size()` has O(n) complexity on `utree` ranges. On utree
+            lists, it has O(1) complexity.]`*/
+
+        ////////////////////////////////////////////////////////////////////////
+
+        //[utree_variant_functions
+        // return the data type (`utree_type::info`) of the currently stored 
+        // data item
+        utree_type::info which() const;
+
+        // access the currently stored data in a type safe manner, this will 
+        // throw a `std::bad_cast()` if the currently stored data item is not 
+        // default convertible to `T`.
+        template <class T>
+        T get() const;
+        //]
+
+        reference deref();
+        const_reference deref() const;
+
+        short tag() const;
+        void tag(short);
+
+        utree eval(utree const&) const;
+        utree eval(utree&) const;
+
+        utree operator() (utree const&) const;
+        utree operator() (utree&) const;
+    //<-
+    protected:
+        void ensure_list_type(char const* failed_in = "ensure_list_type()");
+
+    private:
+        typedef utree_type type;
+
+        template <class UTreeX, class UTreeY>
+        friend struct detail::visit_impl;
+        friend struct detail::index_impl;
+
+        type::info get_type() const;
+        void set_type(type::info);
+        void free();
+        void copy(const_reference);
+
+        union {
+            detail::fast_string s;
+            detail::list l;
+            detail::range r;
+            detail::string_range sr;
+            detail::void_ptr v;
+            bool b;
+            int i;
+            double d;
+            utree* p;
+            function_base* pf;
+        };
+    //->
+    };
+    //]
+
+    //[utree_tuple_interface 
+    /*<-*/inline/*->*/
+    utree::reference get(utree::reference, utree::size_type);
+    /*<-*/inline/*->*/
+    utree::const_reference get(utree::const_reference, utree::size_type);
+    /*`[warning `get()` has O(n) complexity.]`*/
+    //]
+
+    struct utree::list_type : utree
+    {
+        using utree::operator=;
+
+        list_type() : utree() { ensure_list_type("list_type()"); }
+
+        template <typename T0>
+        list_type(T0 t0) : utree(t0) {}
+      
+        template <typename T0, typename T1>
+        list_type(T0 t0, T1 t1) : utree(t0, t1) {}
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // predefined instances for singular types
+    utree::invalid_type const invalid = {};
+    utree::nil_type const nil = {};
+    utree::list_type const empty_list = utree::list_type();
+}}
+
+#if defined(BOOST_MSVC)
+  #pragma warning(pop)
+#endif
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits.hpp
new file mode 100644 (file)
index 0000000..4f9f46f
--- /dev/null
@@ -0,0 +1,1294 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2010-2011 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OUTPUT_UTREE_TRAITS_APR_16_2010_0655AM)
+#define BOOST_SPIRIT_OUTPUT_UTREE_TRAITS_APR_16_2010_0655AM
+
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/support/utree.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp>
+#include <boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp>
+
+#include <string>
+
+#include <boost/cstdint.hpp>
+#include <boost/variant.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost
+{
+    template <typename T>
+    inline T get(boost::spirit::utree const& x)
+    {
+        return x.get<T>();
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    namespace detail
+    {
+        inline bool is_list(utree const& ut)
+        {
+            switch (traits::which(ut))
+            {
+            case utree_type::reference_type:
+                return is_list(ut.deref());
+
+            case utree_type::list_type:
+            case utree_type::range_type:
+                return true;
+
+            default:
+                break;
+            }
+            return false;
+        }
+
+        inline bool is_uninitialized(utree const& ut)
+        {
+            return traits::which(ut) == utree_type::invalid_type;
+        }
+    }
+
+    // this specialization tells Spirit how to extract the type of the value
+    // stored in the given utree node
+    template <>
+    struct variant_which<utree>
+    {
+        static int call(utree const& u) { return u.which(); }
+    };
+    
+    template <>
+    struct variant_which<utree::list_type>
+    {
+        static int call(utree::list_type const& u) { return u.which(); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Make sure all components of an alternative expose utree, even if they
+    // actually expose a utree::list_type
+    template <typename Domain> 
+    struct alternative_attribute_transform<utree::list_type, Domain>
+      : mpl::identity<utree>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Make sure all components of a sequence expose utree, even if they
+    // actually expose a utree::list_type
+    template <typename Domain> 
+    struct sequence_attribute_transform<utree::list_type, Domain>
+      : mpl::identity<utree>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization lets Spirit know that typed basic_strings
+    // are strings
+    template <typename Base, utree_type::info I>
+    struct is_string<spirit::basic_string<Base, I> > 
+      : mpl::true_ 
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // these specializations extract the character type of a utree typed string 
+    template <typename T, utree_type::info I>
+    struct char_type_of<spirit::basic_string<iterator_range<T>, I> >
+      : char_type_of<T> 
+    {};
+
+    template <utree_type::info I>
+    struct char_type_of<spirit::basic_string<std::string, I> > 
+      : mpl::identity<char>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // these specializations extract a c string from a utree typed string
+    template <typename String>
+    struct extract_c_string;
+
+    template <typename T, utree_type::info I>
+    struct extract_c_string<
+        spirit::basic_string<iterator_range<T const*>, I>
+    > {
+        typedef T char_type;
+
+        typedef spirit::basic_string<iterator_range<T const*>, I> string;
+
+        static T const* call (string& s)
+        {
+            return s.begin();
+        }
+
+        static T const* call (string const& s)
+        {
+            return s.begin();
+        }
+    };
+    
+    template <utree_type::info I>
+    struct extract_c_string<spirit::basic_string<std::string, I> >
+    {
+        typedef char char_type;
+
+        typedef spirit::basic_string<std::string, I> string;
+
+        static char const* call (string& s)
+        {
+            return s.c_str();
+        }
+
+        static char const* call (string const& s)
+        {
+            return s.c_str();
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // these specializations are needed because utree::value_type == utree
+    template <> 
+    struct is_substitute<utree, utree> 
+      : mpl::true_ 
+    {};
+
+    template <> 
+    struct is_weak_substitute<utree, utree> 
+      : mpl::true_ 
+    {};
+
+    template <> 
+    struct is_substitute<utree::list_type, utree::list_type> 
+      : mpl::true_ 
+    {};
+
+    template <> 
+    struct is_weak_substitute<utree::list_type, utree::list_type> 
+      : mpl::true_ 
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization tells Spirit.Qi to allow assignment to an utree from
+    // a variant
+    namespace detail
+    {
+        struct assign_to_utree_visitor : static_visitor<>
+        {
+            assign_to_utree_visitor(utree& ut) : ut_(ut) {}
+
+            template <typename T>
+            void operator()(T& val) const
+            {
+                ut_ = val;
+            }
+
+            utree& ut_;
+        };
+    }
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct assign_to_container_from_value<
+        utree, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+    {
+        static void
+        call(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& val, utree& attr)
+        {
+            apply_visitor(detail::assign_to_utree_visitor(attr), val);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization tells Spirit.Qi to allow assignment to an utree from
+    // a STL container
+    template <typename Attribute>
+    struct assign_to_container_from_value<utree, Attribute>
+    {
+        // any non-container type will be either directly assigned or appended
+        static void call(Attribute const& val, utree& attr, mpl::false_)
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+
+        // any container type will be converted into a list_type utree
+        static void call(Attribute const& val, utree& attr, mpl::true_)
+        {
+            typedef typename traits::container_iterator<Attribute const>::type 
+                iterator_type;
+
+            // make sure the attribute is a list, at least an empty one
+            if (attr.empty())
+                attr = empty_list;
+
+            iterator_type end = traits::end(val);
+            for (iterator_type i = traits::begin(val); i != end; traits::next(i))
+                push_back(attr, traits::deref(i));
+        }
+
+        static void call(Attribute const& val, utree& attr)
+        {
+            call(val, attr, is_container<Attribute>());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization is required to disambiguate the specializations
+    // related to utree
+    template <>
+    struct assign_to_container_from_value<utree, utree>
+    {
+        static void call(utree const& val, utree& attr)
+        {
+            if (attr.empty()) {
+                attr = val;
+            }
+            else if (detail::is_list(val)) {
+                typedef utree::const_iterator iterator_type;
+
+                iterator_type end = traits::end(val);
+                for (iterator_type i = traits::begin(val); i != end; traits::next(i))
+                    push_back(attr, traits::deref(i));
+            }
+            else {
+                push_back(attr, val);
+            }
+        }
+    };
+
+    template <>
+    struct assign_to_container_from_value<utree, utree::list_type>
+      : assign_to_container_from_value<utree, utree>
+    {};
+
+    // If the destination is a utree_list, we need to force the right hand side
+    // value into a new sub-node, always, no questions asked.
+    template <>
+    struct assign_to_container_from_value<utree::list_type, utree>
+    {
+        static void call(utree const& val, utree& attr)
+        {
+            push_back(attr, val);
+        }
+    };
+
+    // If both, the right hand side and the left hand side are utree_lists
+    // we have a lhs rule which has a single rule exposing a utree_list as its
+    // rhs (optionally wrapped into a directive or other unary parser). In this
+    // case we do not create a new sub-node.
+    template <>
+    struct assign_to_container_from_value<utree::list_type, utree::list_type>
+      : assign_to_container_from_value<utree, utree>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization makes sure strings get assigned as a whole and are 
+    // not converted into a utree list
+    template <>
+    struct assign_to_container_from_value<utree, utf8_string_type>
+    {
+        static void call(utf8_string_type const& val, utree& attr)
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+
+    // this specialization keeps symbols from being transformed into strings  
+    template<>
+    struct assign_to_container_from_value<utree, utf8_symbol_type> 
+    {
+        static void call (utf8_symbol_type const& val, utree& attr) 
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+    
+    template <>
+    struct assign_to_container_from_value<utree, binary_string_type>
+    {
+        static void call(binary_string_type const& val, utree& attr)
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+
+    template<>
+    struct assign_to_container_from_value<utree, utf8_symbol_range_type> 
+    {
+        static void call (utf8_symbol_range_type const& val, utree& attr) 
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+    
+    template <>
+    struct assign_to_container_from_value<utree, binary_range_type>
+    {
+        static void call(binary_range_type const& val, utree& attr)
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+
+    template <>
+    struct assign_to_container_from_value<utree, std::string>
+    {
+        static void call(std::string const& val, utree& attr)
+        {
+            if (attr.empty())
+                attr = val;
+            else
+                push_back(attr, val);
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization tells Spirit.Qi to allow assignment to an utree from
+    // generic iterators
+    template <typename Iterator>
+    struct assign_to_attribute_from_iterators<utree, Iterator>
+    {
+        static void
+        call(Iterator const& first, Iterator const& last, utree& attr)
+        {
+            if (attr.empty())
+                attr.assign(first, last);
+            else {
+                for (Iterator i = first; i != last; ++i)
+                    push_back(attr, traits::deref(i));
+            }
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Karma only: convert utree node to string
+    namespace detail
+    {
+        struct attribute_as_string_type
+        {
+            typedef utf8_string_range_type type; 
+
+            static type call(utree const& attr)
+            {
+                return boost::get<utf8_string_range_type>(attr);
+            }
+
+            static bool is_valid(utree const& attr)
+            {
+                switch (traits::which(attr))
+                {
+                case utree_type::reference_type:
+                    return is_valid(attr.deref());
+
+                case utree_type::string_range_type:
+                case utree_type::string_type:
+                    return true;
+
+                default:
+                    return false;
+                }
+            }
+        };
+    }
+
+    template <>
+    struct attribute_as<std::string, utree>
+      : detail::attribute_as_string_type 
+    {};
+
+    template <>
+    struct attribute_as<utf8_string_type, utree>
+      : detail::attribute_as_string_type 
+    {};
+
+    template <>
+    struct attribute_as<utf8_string_range_type, utree>
+      : detail::attribute_as_string_type 
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        struct attribute_as_symbol_type
+        {
+            typedef utf8_symbol_range_type type; 
+
+            static type call(utree const& attr)
+            {
+                return boost::get<utf8_symbol_range_type>(attr);
+            }
+
+            static bool is_valid(utree const& attr)
+            {
+                switch (traits::which(attr))
+                {
+                case utree_type::reference_type:
+                    return is_valid(attr.deref());
+
+                case utree_type::symbol_type:
+                    return true;
+
+                default:
+                    return false;
+                }
+            }
+        };
+    }
+
+    template <>
+    struct attribute_as<utf8_symbol_type, utree>
+      : detail::attribute_as_symbol_type 
+    {};
+
+    template <>
+    struct attribute_as<utf8_symbol_range_type, utree>
+      : detail::attribute_as_symbol_type 
+    {};
+    
+    template <typename Attribute>
+    struct attribute_as<Attribute, utree::list_type>
+      : attribute_as<Attribute, utree>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        struct attribute_as_binary_string_type
+        {
+            typedef binary_range_type type; 
+
+            static type call(utree const& attr)
+            {
+                return boost::get<binary_range_type>(attr);
+            }
+
+            static bool is_valid(utree const& attr)
+            {
+                switch (traits::which(attr))
+                {
+                case utree_type::reference_type:
+                    return is_valid(attr.deref());
+
+                case utree_type::binary_type:
+                    return true;
+
+                default:
+                    return false;
+                }
+            }
+        };
+    }
+
+    template <>
+    struct attribute_as<binary_string_type, utree>
+      : detail::attribute_as_binary_string_type 
+    {};
+
+    template <>
+    struct attribute_as<binary_range_type, utree>
+      : detail::attribute_as_binary_string_type 
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // push_back support for utree 
+    template <typename T>
+    struct push_back_container<utree, T>
+    {
+        static bool call(utree& c, T const& val)
+        {
+            switch (traits::which(c))
+            {
+                case utree_type::invalid_type:
+                case utree_type::nil_type:
+                case utree_type::list_type:
+                    c.push_back(val);
+                    break;
+
+                default:
+                {
+                    utree ut;
+                    ut.push_back(c);
+                    ut.push_back(val);
+                    c.swap(ut);
+                }
+                break;
+            }
+            return true;
+        }
+    };
+
+    template <typename T>
+    struct push_back_container<utree::list_type, T>
+      : push_back_container<utree, T>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ensure the utree attribute is an empty list
+    template <>
+    struct make_container_attribute<utree>
+    {
+        static void call(utree& ut)
+        {
+            if (!detail::is_list(ut)) {
+                if (detail::is_uninitialized(ut))
+                    ut = empty_list;
+                else {
+                    utree retval (empty_list);
+                    retval.push_back(ut);
+                    ut.swap(retval);
+                }
+            }
+        }
+    };
+
+    template <>
+    struct make_container_attribute<utree::list_type>
+      : make_container_attribute<utree>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // an utree is a container on its own
+    template <>
+    struct build_std_vector<utree>
+    {
+        typedef utree type;
+    };
+
+    template <>
+    struct build_std_vector<utree::list_type>
+    {
+        typedef utree::list_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // debug support for utree
+    template <typename Out>
+    struct print_attribute_debug<Out, utree>
+    {
+        static void call(Out& out, utree const& val)
+        {
+            out << val;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // force utree list attribute in a sequence to be dereferenced if a rule
+    // or a grammar exposes an utree as it's attribute
+    namespace detail
+    {
+        // Checks whether the exposed Attribute allows to handle utree or 
+        // utree::list_type directly. Returning mpl::false_ from this meta 
+        // function will force a new utree instance to be created for each
+        // invocation of the embedded parser.
+
+        // The purpose of using utree::list_type as an attribute is to force a 
+        // new sub-node in the result.
+        template <typename Attribute, typename Enable = void>
+        struct handles_utree_list_container 
+          : mpl::and_<
+                mpl::not_<is_same<utree::list_type, Attribute> >,
+                traits::is_container<Attribute> >
+        {};
+
+        // The following specializations make sure that the actual handling of
+        // an utree (or utree::list_type) attribute is deferred to the embedded
+        // parsers of a sequence, alternative or optional component.
+        template <typename Attribute>
+        struct handles_utree_list_container<Attribute
+              , typename enable_if<fusion::traits::is_sequence<Attribute> >::type>
+          : mpl::true_
+        {};
+
+        template <typename Attribute>
+        struct handles_utree_list_container<boost::optional<Attribute> >
+          : mpl::true_
+        {};
+
+        template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+        struct handles_utree_list_container<
+                boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+          : mpl::true_
+        {};
+    }
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<qi::rule<IteratorA, T1, T2, T3, T4>
+          , utree, Context, IteratorB>
+      : detail::handles_utree_list_container<typename attribute_of<
+            qi::rule<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<qi::grammar<IteratorA, T1, T2, T3, T4>
+          , utree, Context, IteratorB>
+      : detail::handles_utree_list_container<typename attribute_of<
+            qi::grammar<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<qi::rule<IteratorA, T1, T2, T3, T4>
+          , utree::list_type, Context, IteratorB>
+      : detail::handles_utree_list_container<typename attribute_of<
+            qi::rule<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<qi::grammar<IteratorA, T1, T2, T3, T4>
+          , utree::list_type, Context, IteratorB>
+      : detail::handles_utree_list_container<typename attribute_of<
+            qi::grammar<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Sequence>
+    struct pass_through_container<
+            utree, utree, Attribute, Sequence, qi::domain>
+      : detail::handles_utree_list_container<Attribute>
+    {};
+
+    template <typename Attribute, typename Sequence>
+    struct pass_through_container<
+            utree::list_type, utree, Attribute, Sequence, qi::domain>
+      : detail::handles_utree_list_container<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        // Checks whether the exposed Attribute allows to handle utree or 
+        // utree::list_type directly. Returning mpl::false_ from this meta 
+        // function will force a new utree instance to be created for each
+        // invocation of the embedded parser.
+
+        // The purpose of using utree::list_type as an attribute is to force a 
+        // new sub-node in the result.
+        template <typename Attribute, typename Enable = void>
+        struct handles_utree_container 
+          : mpl::and_<
+                mpl::not_<is_same<utree, Attribute> >,
+                traits::is_container<Attribute> >
+        {};
+
+        // The following specializations make sure that the actual handling of
+        // an utree (or utree::list_type) attribute is deferred to the embedded
+        // parsers of a sequence, alternative or optional component.
+        template <typename Attribute>
+        struct handles_utree_container<Attribute
+              , typename enable_if<fusion::traits::is_sequence<Attribute> >::type>
+          : mpl::true_
+        {};
+
+        template <typename Attribute>
+        struct handles_utree_container<boost::optional<Attribute> >
+          : mpl::true_
+        {};
+
+        template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+        struct handles_utree_container<
+                boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
+          : mpl::true_
+        {};
+    }
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<karma::rule<IteratorA, T1, T2, T3, T4>
+          , utree, Context, IteratorB>
+      : detail::handles_utree_container<typename attribute_of<
+            karma::rule<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    template <
+        typename IteratorA, typename IteratorB, typename Context
+      , typename T1, typename T2, typename T3, typename T4>
+    struct handles_container<karma::grammar<IteratorA, T1, T2, T3, T4>
+          , utree, Context, IteratorB>
+      : detail::handles_utree_container<typename attribute_of<
+            karma::grammar<IteratorA, T1, T2, T3, T4>, Context, IteratorB
+        >::type>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Sequence>
+    struct pass_through_container<
+            utree, utree, Attribute, Sequence, karma::domain>
+      : detail::handles_utree_container<Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the specialization below tells Spirit how to handle utree if it is used
+    // with an optional component
+    template <>
+    struct optional_attribute<utree>
+    {
+        typedef utree const& type;
+
+        static type call(utree const& val)
+        {
+            return val;
+        }
+
+        // only 'invalid_type' utree nodes are not valid
+        static bool is_valid(utree const& val)
+        {
+          return !detail::is_uninitialized(val);
+        }
+    };
+
+    template <>
+    struct build_optional<utree>
+    {
+        typedef utree type;
+    };
+
+    template <>
+    struct build_optional<utree::list_type>
+    {
+        typedef utree::list_type type;
+    };
+
+    // an utree is an optional (in any domain)
+    template <>
+    struct not_is_optional<utree, qi::domain>
+      : mpl::false_
+    {};
+
+    template <>
+    struct not_is_optional<utree::list_type, qi::domain>
+      : mpl::false_
+    {};
+
+    template <>
+    struct not_is_optional<utree, karma::domain>
+      : mpl::false_
+    {};
+
+    template <>
+    struct not_is_optional<utree::list_type, karma::domain>
+      : mpl::false_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the specialization below tells Spirit to handle utree as if it
+    // where a 'real' variant (in the context of karma)
+    template <>
+    struct not_is_variant<utree, karma::domain>
+      : mpl::false_ 
+    {};
+
+    template <>
+    struct not_is_variant<utree::list_type, karma::domain>
+      : mpl::false_ 
+    {};
+
+    // The specializations below tell Spirit to verify whether an attribute
+    // type is compatible with a given variant type
+    template <>
+    struct compute_compatible_component_variant<
+            utree, iterator_range<utree::iterator> >
+      : mpl::true_
+    {
+        typedef iterator_range<utree::iterator> compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::list_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, iterator_range<utree::const_iterator> >
+      : mpl::true_
+    {
+        typedef iterator_range<utree::const_iterator> compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::list_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, utree::invalid_type>
+      : mpl::true_
+    {
+        typedef utree::invalid_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::invalid_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, utree::nil_type>
+      : mpl::true_
+    {
+        typedef utree::nil_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::nil_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, bool>
+      : mpl::true_
+    {
+        typedef bool compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::bool_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, int>
+      : mpl::true_
+    {
+        typedef int compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::int_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, double>
+      : mpl::true_
+    {
+        typedef double compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::double_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, utf8_string_range_type>
+      : mpl::true_
+    {
+        typedef utf8_string_range_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::string_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, utf8_string_type>
+      : mpl::true_
+    {
+        typedef utf8_string_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::string_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, utf8_symbol_range_type>
+      : mpl::true_
+    {
+        typedef utf8_symbol_range_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::symbol_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, utf8_symbol_type>
+      : mpl::true_
+    {
+        typedef utf8_symbol_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::symbol_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, binary_range_type>
+      : mpl::true_
+    {
+        typedef binary_range_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::binary_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, binary_string_type>
+      : mpl::true_
+    {
+        typedef binary_string_type compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::binary_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<utree, utree>
+      : mpl::true_
+    {
+        typedef utree compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d >= utree_type::invalid_type &&
+                   d <= utree_type::reference_type;
+        }
+    };
+
+    template <>
+    struct compute_compatible_component_variant<
+            utree, std::vector<utree> >
+      : mpl::true_
+    {
+        typedef utree compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d >= utree_type::invalid_type &&
+                   d <= utree_type::reference_type;
+        }
+    };
+
+    template <typename Sequence>
+    struct compute_compatible_component_variant<utree, Sequence
+          , mpl::false_
+          , typename enable_if<fusion::traits::is_sequence<Sequence> >::type>
+      : mpl::true_
+    {
+        typedef iterator_range<utree::const_iterator> compatible_type;
+
+        static bool is_compatible(int d)
+        {
+            return d == utree_type::list_type;
+        }
+    };
+
+    template <typename Attribute>
+    struct compute_compatible_component_variant<utree::list_type, Attribute>
+      : compute_compatible_component_variant<utree, Attribute>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct symbols_lookup<utree, utf8_symbol_type>
+    {
+        typedef std::string type;
+
+        static type call(utree const& t)
+        {
+            utf8_symbol_range_type r = boost::get<utf8_symbol_range_type>(t);
+            return std::string(traits::begin(r), traits::end(r));
+        }
+    };
+
+    template <>
+    struct symbols_lookup<utf8_symbol_type, utf8_symbol_type>
+    {
+        typedef std::string type;
+
+        static type call(utf8_symbol_type const& t)
+        {
+            return t;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        inline T get_or_deref(utree const& t)
+        {
+            if (detail::is_list(t))
+                return boost::get<T>(t.front());
+            return boost::get<T>(t);
+        }
+    }
+
+    template <>
+    struct extract_from_container<utree, utree::nil_type>
+    {
+        typedef utree::nil_type type;
+
+        template <typename Context>
+        static type call(utree const&, Context&)
+        {
+            return nil;
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, char>
+    {
+        typedef char type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            utf8_symbol_range_type r = detail::get_or_deref<utf8_symbol_range_type>(t);
+            return r.front();
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, bool>
+    {
+        typedef bool type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            return detail::get_or_deref<bool>(t);
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, int>
+    {
+        typedef int type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            return detail::get_or_deref<int>(t);
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, double>
+    {
+        typedef double type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            return detail::get_or_deref<double>(t);
+        }
+    };
+
+    template <typename Traits, typename Alloc>
+    struct extract_from_container<utree, std::basic_string<char, Traits, Alloc> >
+    {
+        typedef std::basic_string<char, Traits, Alloc> type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            utf8_string_range_type r = detail::get_or_deref<utf8_string_range_type>(t);
+            return type(traits::begin(r), traits::end(r));
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, utf8_symbol_type>
+    {
+        typedef std::string type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            utf8_symbol_range_type r = detail::get_or_deref<utf8_symbol_range_type>(t);
+            return std::string(traits::begin(r), traits::end(r));
+        }
+    };
+
+    template <>
+    struct extract_from_container<utree, utf8_string_type>
+    {
+        typedef std::string type;
+
+        template <typename Context>
+        static type call(utree const& t, Context&)
+        {
+            utf8_string_range_type r = detail::get_or_deref<utf8_string_range_type>(t);
+            return std::string(traits::begin(r), traits::end(r));
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct transform_attribute<utree const, utree::nil_type, karma::domain>
+    {
+        typedef utree::nil_type type;
+
+        static type pre(utree const&)
+        {
+            return nil;
+        }
+    };
+
+    template <>
+    struct transform_attribute<utree const, char, karma::domain>
+    {
+        typedef char type;
+
+        static type pre(utree const& t)
+        {
+            utf8_string_range_type r = detail::get_or_deref<utf8_string_range_type>(t);
+            return r.front();
+        }
+    };
+
+    template <>
+    struct transform_attribute<utree const, bool, karma::domain>
+    {
+        typedef bool type;
+
+        static type pre(utree const& t)
+        {
+            return detail::get_or_deref<bool>(t);
+        }
+    };
+
+    template <>
+    struct transform_attribute<utree const, int, karma::domain>
+    {
+        typedef int type;
+
+        static type pre(utree const& t)
+        {
+            return detail::get_or_deref<int>(t);
+        }
+    };
+
+    template <>
+    struct transform_attribute<utree const, double, karma::domain>
+    {
+        typedef double type;
+
+        static type pre(utree const& t)
+        {
+            return detail::get_or_deref<double>(t);
+        }
+    };
+
+    template <typename Traits, typename Alloc>
+    struct transform_attribute<
+        utree const, std::basic_string<char, Traits, Alloc>, karma::domain>
+    {
+        typedef std::basic_string<char, Traits, Alloc> type;
+
+        static type pre(utree const& t)
+        {
+            utf8_string_range_type r = detail::get_or_deref<utf8_string_range_type>(t);
+            return type(traits::begin(r), traits::end(r));
+        }
+    };
+
+    // this specialization is used whenever a utree is passed to a rule as part
+    // of a sequence
+    template <typename Iterator>
+    struct transform_attribute<
+        iterator_range<Iterator> const, utree, karma::domain>
+    {
+        typedef utree type;
+
+        static type pre(iterator_range<Iterator> const& t)
+        {
+            // return utree the begin iterator points to
+            Iterator it = boost::begin(t);
+            utree result(boost::ref(*it));
+            ++it;
+            return result;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct transform_attribute<utree const, utf8_string_type, karma::domain>
+    {
+        typedef std::string type;
+
+        static type pre(utree const& t)
+        {
+            utf8_string_range_type r = detail::get_or_deref<utf8_string_range_type>(t);
+            return std::string(traits::begin(r), traits::end(r));
+        }
+    };
+
+    template <>
+    struct transform_attribute<utree const, utf8_symbol_type, karma::domain>
+    {
+        typedef std::string type;
+
+        static type pre(utree const& t)
+        {
+            utf8_symbol_range_type r = detail::get_or_deref<utf8_symbol_range_type>(t);
+            return std::string(traits::begin(r), traits::end(r));
+        }
+    };
+
+    template <typename Attribute>
+    struct transform_attribute<utree::list_type const, Attribute, karma::domain>
+      : transform_attribute<utree const, Attribute, karma::domain>
+    {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/support/utree/utree_traits_fwd.hpp
new file mode 100644 (file)
index 0000000..7830c79
--- /dev/null
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OUTPUT_UTREE_TRAITS_FWD_FEB_14_2011_0632AM)
+#define BOOST_SPIRIT_OUTPUT_UTREE_TRAITS_FWD_FEB_14_2011_0632AM
+
+///////////////////////////////////////////////////////////////////////////////
+// forward declarations only
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{ 
+    class utree;
+}}
+
+namespace boost
+{
+    template <typename T>
+    inline T get(boost::spirit::utree const& x);
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3.hpp
new file mode 100644 (file)
index 0000000..9da6057
--- /dev/null
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2013 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_MARCH_04_2007_0852PM)
+#define BOOST_SPIRIT_X3_MARCH_04_2007_0852PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//~ #include <boost/spirit/home/x3/action.hpp>
+//~ #include <boost/spirit/home/x3/auto.hpp>
+#include <boost/spirit/home/x3/auxiliary.hpp>
+#include <boost/spirit/home/x3/char.hpp>
+//~ #include <boost/spirit/home/x3/binary.hpp>
+#include <boost/spirit/home/x3/directive.hpp>
+#include <boost/spirit/home/x3/nonterminal.hpp>
+#include <boost/spirit/home/x3/numeric.hpp>
+#include <boost/spirit/home/x3/operator.hpp>
+#include <boost/spirit/home/x3/core.hpp>
+#include <boost/spirit/home/x3/string.hpp>
+//~ #include <boost/spirit/home/x3/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary.hpp
new file mode 100644 (file)
index 0000000..afa89b2
--- /dev/null
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_AUXILIARY_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_X3_AUXILIARY_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/auxiliary/any_parser.hpp>
+#include <boost/spirit/home/x3/auxiliary/eps.hpp>
+#include <boost/spirit/home/x3/auxiliary/guard.hpp>
+//~ #include <boost/spirit/home/x3/auxiliary/lazy.hpp>
+#include <boost/spirit/home/x3/auxiliary/eol.hpp>
+#include <boost/spirit/home/x3/auxiliary/eoi.hpp>
+#include <boost/spirit/home/x3/auxiliary/attr.hpp>
+//~ #include <boost/spirit/home/x3/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/any_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/any_parser.hpp
new file mode 100644 (file)
index 0000000..0e257c0
--- /dev/null
@@ -0,0 +1,155 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013-2014 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_AUXILIARY_ANY_PARSER_APR_09_2014_1145PM)
+#define BOOST_SPIRIT_X3_AUXILIARY_ANY_PARSER_APR_09_2014_1145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/subcontext.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/is_parser.hpp>
+#include <memory>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <
+        typename Iterator
+      , typename Attribute = unused_type
+      , typename Context = subcontext<>>
+    struct any_parser : parser<any_parser<Iterator, Attribute, Context>>
+    {
+        typedef Attribute attribute_type;
+
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+        static bool const handles_container =
+            traits::is_container<Attribute>::value;
+
+    public:
+        any_parser()
+          : _content(nullptr) {}
+
+        template <typename Expr,
+            typename Enable = typename enable_if<traits::is_parser<Expr>>::type>
+        any_parser(Expr const& expr)
+          : _content(new holder<Expr>(expr)) {}
+
+        any_parser(any_parser const& other)
+          : _content(other._content ? other._content->clone() : nullptr) {}
+
+        any_parser(any_parser&& other) = default;
+
+        any_parser& operator=(any_parser const& other)
+        {
+            _content.reset(other._content ? other._content->clone() : nullptr);
+            return *this;
+        }
+
+        any_parser& operator=(any_parser&& other) = default;
+
+        template <typename Iterator_, typename Context_>
+        bool parse(Iterator_& first, Iterator_ const& last
+          , Context_ const& context, unused_type, Attribute& attr) const
+        {
+            BOOST_STATIC_ASSERT_MSG(
+                (is_same<Iterator, Iterator_>::value)
+              , "Incompatible iterator used"
+            );
+
+            BOOST_ASSERT_MSG(
+                (_content != nullptr)
+              , "Invalid use of uninitialized any_parser"
+            );
+
+            return _content->parse(first, last, context, attr);
+        }
+
+        template <typename Iterator_, typename Context_, typename Attribute_>
+        bool parse(Iterator_& first, Iterator_ const& last
+          , Context_ const& context, unused_type, Attribute_& attr_) const
+        {
+            Attribute attr;
+            if (parse(first, last, context, unused, attr))
+            {
+                traits::move_to(attr, attr_);
+                return true;
+            }
+            return false;
+        }
+
+        std::string get_info() const
+        {
+            return _content ? _content->get_info() : "";
+        }
+
+    private:
+
+        struct placeholder
+        {
+            virtual placeholder* clone() const = 0;
+
+            virtual bool parse(Iterator& first, Iterator const& last
+              , Context const& context, Attribute& attr) const = 0;
+
+            virtual std::string get_info() const = 0;
+
+            virtual ~placeholder() {}
+        };
+
+        template <typename Expr>
+        struct holder : placeholder
+        {
+            typedef typename extension::as_parser<Expr>::value_type parser_type;
+
+            explicit holder(Expr const& p)
+              : _parser(as_parser(p)) {}
+
+            holder* clone() const override
+            {
+                return new holder(*this);
+            }
+
+            bool parse(Iterator& first, Iterator const& last
+              , Context const& context, Attribute& attr) const override
+            {
+                return _parser.parse(first, last, context, unused, attr);
+            }
+
+            std::string get_info() const override
+            {
+                return x3::what(_parser);
+            }
+
+            parser_type _parser;
+        };
+
+    private:
+        std::unique_ptr<placeholder> _content;
+    };
+
+    template <typename Iterator, typename Attribute, typename Context>
+    struct get_info<any_parser<Iterator, Attribute, Context>>
+    {
+        typedef std::string result_type;
+        std::string operator()(
+            any_parser<Iterator, Attribute, Context> const& p) const
+        {
+            return p.get_info();
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/attr.hpp
new file mode 100644 (file)
index 0000000..364cca0
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#ifndef BOOST_SPIRIT_X3_ATTR_JUL_23_2008_0956AM
+#define BOOST_SPIRIT_X3_ATTR_JUL_23_2008_0956AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <algorithm>
+#include <cstddef>
+#include <string>
+#include <utility>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Value>
+    struct attr_parser : parser<attr_parser<Value>>
+    {
+        typedef Value attribute_type;
+
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+        static bool const handles_container =
+            traits::is_container<attribute_type>::value;
+        
+        attr_parser(Value const& value)
+          : value_(value) {}
+        attr_parser(Value&& value)
+          : value_(std::move(value)) {}
+
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext&, Attribute& attr_) const
+        {
+            // $$$ Change to copy_to once we have it $$$
+            traits::move_to(value_, attr_);
+            return true;
+        }
+
+        Value value_;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        attr_parser& operator= (attr_parser const&);
+    };
+    
+    template <typename Value, std::size_t N>
+    struct attr_parser<Value[N]> : parser<attr_parser<Value[N]>>
+    {
+        typedef Value attribute_type[N];
+
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+        static bool const handles_container = true;
+        
+        attr_parser(Value const (&value)[N])
+        {
+            std::copy(value + 0, value + N, value_ + 0);
+        }
+
+        attr_parser(Value (&&value)[N])
+        {
+            std::move(value + 0, value + N, value_ + 0);
+        }
+
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext&, Attribute& attr_) const
+        {
+            // $$$ Change to copy_to once we have it $$$
+            traits::move_to(value_ + 0, value_ + N, attr_);
+            return true;
+        }
+
+        Value value_[N];
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        attr_parser& operator= (attr_parser const&);
+    };
+    
+    template <typename Value>
+    struct get_info<attr_parser<Value>>
+    {
+        typedef std::string result_type;
+        std::string operator()(attr_parser<Value> const& /*p*/) const
+        {
+            return "attr";
+        }
+    };
+
+    struct attr_gen
+    {
+        template <typename Value>
+        attr_parser<typename remove_cv<
+            typename remove_reference<Value>::type>::type>
+        operator()(Value&& value) const
+        {
+            return {std::forward<Value>(value)};
+        }
+        
+        template <typename Value, std::size_t N>
+        attr_parser<typename remove_cv<Value>::type[N]>
+        operator()(Value (&value)[N]) const
+        {
+            return {value};
+        }
+        template <typename Value, std::size_t N>
+        attr_parser<typename remove_cv<Value>::type[N]>
+        operator()(Value (&&value)[N]) const
+        {
+            return {value};
+        }
+    };
+
+    attr_gen const attr = attr_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eoi.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eoi.hpp
new file mode 100644 (file)
index 0000000..55bd51c
--- /dev/null
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EOI_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EOI_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct eoi_parser : parser<eoi_parser>
+    {
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute&) const
+        {
+            x3::skip_over(first, last, context);
+            return first == last;
+        }
+    };
+
+    template<>
+    struct get_info<eoi_parser>
+    {
+        typedef std::string result_type;
+        result_type operator()(eoi_parser const &) const { return "eoi"; }
+    };
+
+    eoi_parser const eoi = eoi_parser();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eol.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eol.hpp
new file mode 100644 (file)
index 0000000..3d191b4
--- /dev/null
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EOL_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EOL_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct eol_parser : parser<eol_parser>
+    {
+         typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+         , Context const& context, unused_type, Attribute& /*attr*/) const
+        {
+            x3::skip_over(first, last, context);
+            Iterator iter = first;
+            bool matched = false;
+            if (iter != last && *iter == '\r')  // CR
+            {
+                matched = true;
+                ++iter;
+            }
+            if (iter != last && *iter == '\n')  // LF
+            {
+                matched = true;
+                ++iter;
+            }
+
+            if (matched) first = iter;
+            return matched;
+        }
+    };
+
+    template<>
+    struct get_info<eol_parser>
+    {
+        typedef std::string result_type;
+        result_type operator()(eol_parser const &) const { return "eol"; }
+    };
+
+    eol_parser const eol = eol_parser();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eps.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/eps.hpp
new file mode 100644 (file)
index 0000000..ab4d307
--- /dev/null
@@ -0,0 +1,92 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EPS_MARCH_23_2007_0454PM)
+#define BOOST_SPIRIT_X3_EPS_MARCH_23_2007_0454PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct rule_context_tag;
+
+    struct semantic_predicate : parser<semantic_predicate>
+    {
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        semantic_predicate(bool predicate)
+          : predicate(predicate) {}
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute&) const
+        {
+            x3::skip_over(first, last, context);
+            return predicate;
+        }
+
+        bool predicate;
+    };
+
+    template <typename F>
+    struct lazy_semantic_predicate : parser<lazy_semantic_predicate<F>>
+    {
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        lazy_semantic_predicate(F f)
+          : f(f) {}
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute& attr) const
+        {
+            x3::skip_over(first, last, context);
+            return f(x3::get<rule_context_tag>(context));
+        }
+
+        F f;
+    };
+
+    struct eps_parser : parser<eps_parser>
+    {
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext&, Attribute&) const
+        {
+            x3::skip_over(first, last, context);
+            return true;
+        }
+
+        semantic_predicate
+        operator()(bool predicate) const
+        {
+            return semantic_predicate(predicate);
+        }
+
+        template <typename F>
+        lazy_semantic_predicate<F>
+        operator()(F f) const
+        {
+            return lazy_semantic_predicate<F>(f);
+        }
+    };
+
+    eps_parser const eps = eps_parser();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/guard.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/auxiliary/guard.hpp
new file mode 100644 (file)
index 0000000..6fd63c8
--- /dev/null
@@ -0,0 +1,73 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_GUARD_FERBRUARY_02_2013_0649PM)
+#define BOOST_SPIRIT_X3_GUARD_FERBRUARY_02_2013_0649PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    enum class error_handler_result
+    {
+        fail
+      , retry
+      , accept
+      , rethrow
+    };
+
+    template <typename Subject, typename Handler>
+    struct guard : unary_parser<Subject, guard<Subject, Handler>>
+    {
+        typedef unary_parser<Subject, guard<Subject, Handler>> base_type;
+        static bool const is_pass_through_unary = true;
+
+        guard(Subject const& subject, Handler handler)
+          : base_type(subject), handler(handler) {}
+
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr) const
+        {
+            for (;;)
+            {
+                try
+                {
+                    Iterator i = first;
+                    bool r = this->subject.parse(i, last, context, rcontext, attr);
+                    if (r)
+                        first = i;
+                    return r;
+                }
+                catch (expectation_failure<Iterator> const& x)
+                {
+                    switch (handler(first, last, x, context))
+                    {
+                        case error_handler_result::fail:
+                            return false;
+                        case error_handler_result::retry:
+                            continue;
+                        case error_handler_result::accept:
+                            return true;
+                        case error_handler_result::rethrow:
+                            throw;
+                    }
+                }
+            }
+            return false;
+        }
+
+        Handler handler;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char.hpp
new file mode 100644 (file)
index 0000000..19d26de
--- /dev/null
@@ -0,0 +1,23 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CHAR_FEBRUARY_02_2007_0921AM)
+#define BOOST_SPIRIT_X3_CHAR_FEBRUARY_02_2007_0921AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/negated_char_parser.hpp>
+#include <boost/spirit/home/x3/char/char.hpp>
+#include <boost/spirit/home/x3/char/char_class.hpp>
+
+#if defined(BOOST_SPIRIT_X3_UNICODE)
+#include <boost/spirit/home/x3/char/unicode.hpp>
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/any_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/any_char.hpp
new file mode 100644 (file)
index 0000000..7ff769b
--- /dev/null
@@ -0,0 +1,41 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ANY_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_ANY_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/literal_char.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Encoding>
+    struct any_char : char_parser<any_char<Encoding>>
+    {
+        typedef typename Encoding::char_type char_type;
+        typedef Encoding encoding;
+        typedef char_type attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Char, typename Context>
+        bool test(Char ch_, Context const&) const
+        {
+            return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch_));
+        }
+
+        template <typename Char>
+        literal_char<Encoding>
+        operator()(Char ch) const
+        {
+            return literal_char<Encoding>(ch);
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char.hpp
new file mode 100644 (file)
index 0000000..9452dcd
--- /dev/null
@@ -0,0 +1,88 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/any_char.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    namespace standard
+    {
+        typedef any_char<char_encoding::standard> char_type;
+        char_type const char_ = char_type();
+    }
+
+    using standard::char_type;
+    using standard::char_;
+
+    namespace standard_wide
+    {
+        typedef any_char<char_encoding::standard_wide> char_type;
+        char_type const char_ = char_type();
+    }
+
+    namespace ascii
+    {
+        typedef any_char<char_encoding::ascii> char_type;
+        char_type const char_ = char_type();
+    }
+
+    namespace extension
+    {
+        template <>
+        struct as_parser<char>
+        {
+            typedef literal_char<
+                char_encoding::standard, unused_type>
+            type;
+
+            typedef type value_type;
+
+            static type call(char ch)
+            {
+                return type(ch);
+            }
+        };
+
+        template <>
+        struct as_parser<wchar_t>
+        {
+            typedef literal_char<
+                char_encoding::standard_wide, unused_type>
+            type;
+
+            typedef type value_type;
+
+            static type call(wchar_t ch)
+            {
+                return type(ch);
+            }
+        };
+    }
+
+    inline literal_char<char_encoding::standard, unused_type>
+    lit(char ch)
+    {
+        return literal_char<char_encoding::standard, unused_type>(ch);
+    }
+
+    inline literal_char<char_encoding::standard_wide, unused_type>
+    lit(wchar_t ch)
+    {
+        return literal_char<char_encoding::standard_wide, unused_type>(ch);
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_class.hpp
new file mode 100644 (file)
index 0000000..18b7131
--- /dev/null
@@ -0,0 +1,148 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/detail/cast_char.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    struct char_tag {};
+    struct alnum_tag {};
+    struct alpha_tag {};
+    struct blank_tag {};
+    struct cntrl_tag {};
+    struct digit_tag {};
+    struct graph_tag {};
+    struct print_tag {};
+    struct punct_tag {};
+    struct space_tag {};
+    struct xdigit_tag {};
+    struct lower_tag {};
+    struct upper_tag {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Encoding>
+    struct char_class_base
+    {
+        typedef typename Encoding::char_type char_type;
+
+#define BOOST_SPIRIT_X3_CLASSIFY(name)                                             \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(name##_tag, Char ch)                                                 \
+        {                                                                       \
+            return Encoding::is##name                                           \
+                BOOST_PREVENT_MACRO_SUBSTITUTION                                \
+                    (detail::cast_char<char_type>(ch));                         \
+        }                                                                       \
+        /***/
+
+        BOOST_SPIRIT_X3_CLASSIFY(char)
+        BOOST_SPIRIT_X3_CLASSIFY(alnum)
+        BOOST_SPIRIT_X3_CLASSIFY(alpha)
+        BOOST_SPIRIT_X3_CLASSIFY(digit)
+        BOOST_SPIRIT_X3_CLASSIFY(xdigit)
+        BOOST_SPIRIT_X3_CLASSIFY(cntrl)
+        BOOST_SPIRIT_X3_CLASSIFY(graph)
+        BOOST_SPIRIT_X3_CLASSIFY(lower)
+        BOOST_SPIRIT_X3_CLASSIFY(print)
+        BOOST_SPIRIT_X3_CLASSIFY(punct)
+        BOOST_SPIRIT_X3_CLASSIFY(space)
+        BOOST_SPIRIT_X3_CLASSIFY(blank)
+        BOOST_SPIRIT_X3_CLASSIFY(upper)
+
+#undef BOOST_SPIRIT_X3_CLASSIFY
+    };
+
+    template <typename Encoding, typename Tag>
+    struct char_class
+      : char_parser<char_class<Encoding, Tag>>
+    {
+        typedef Encoding encoding;
+        typedef Tag tag;
+        typedef typename Encoding::char_type char_type;
+        typedef char_type attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Char, typename Context>
+        bool test(Char ch, Context const&) const
+        {
+            return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch))
+                && char_class_base<Encoding>::is(tag(), ch);
+        }
+    };
+
+#define BOOST_SPIRIT_X3_CHAR_CLASS(encoding, name)                                 \
+    typedef char_class<char_encoding::encoding, name##_tag> name##_type;        \
+    name##_type const name = name##_type();                                     \
+    /***/
+
+#define BOOST_SPIRIT_X3_CHAR_CLASSES(encoding)                                     \
+    namespace encoding                                                          \
+    {                                                                           \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alnum)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alpha)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, digit)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, xdigit)                               \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, cntrl)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, graph)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, lower)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, print)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, punct)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, space)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, blank)                                \
+        BOOST_SPIRIT_X3_CHAR_CLASS(encoding, upper)                                \
+    }                                                                           \
+    /***/
+
+    BOOST_SPIRIT_X3_CHAR_CLASSES(standard)
+    BOOST_SPIRIT_X3_CHAR_CLASSES(standard_wide)
+    BOOST_SPIRIT_X3_CHAR_CLASSES(ascii)
+    BOOST_SPIRIT_X3_CHAR_CLASSES(iso8859_1)
+
+#undef BOOST_SPIRIT_X3_CHAR_CLASS
+#undef BOOST_SPIRIT_X3_CHAR_CLASSES
+
+    using standard::alnum_type;
+    using standard::alpha_type;
+    using standard::digit_type;
+    using standard::xdigit_type;
+    using standard::cntrl_type;
+    using standard::graph_type;
+    using standard::lower_type;
+    using standard::print_type;
+    using standard::punct_type;
+    using standard::space_type;
+    using standard::blank_type;
+    using standard::upper_type;
+
+    using standard::alnum;
+    using standard::alpha;
+    using standard::digit;
+    using standard::xdigit;
+    using standard::cntrl;
+    using standard::graph;
+    using standard::lower;
+    using standard::print;
+    using standard::punct;
+    using standard::space;
+    using standard::blank;
+    using standard::upper;
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/char_parser.hpp
new file mode 100644 (file)
index 0000000..6943804
--- /dev/null
@@ -0,0 +1,44 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CHAR_PARSER_APR_16_2006_0906AM)
+#define BOOST_SPIRIT_X3_CHAR_PARSER_APR_16_2006_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // The base char_parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Derived>
+    struct char_parser : parser<Derived>
+    {
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute& attr) const
+        {
+            x3::skip_over(first, last, context);
+
+            if (first != last && this->derived().test(*first, context))
+            {
+                x3::traits::move_to(*first, attr);
+                ++first;
+                return true;
+            }
+            return false;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/detail/cast_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/detail/cast_char.hpp
new file mode 100644 (file)
index 0000000..03bda27
--- /dev/null
@@ -0,0 +1,58 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CAST_CHAR_NOVEMBER_10_2006_0907AM)
+#define BOOST_SPIRIT_X3_CAST_CHAR_NOVEMBER_10_2006_0907AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/make_signed.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    // Here's the thing... typical encodings (except ASCII) deal with unsigned
+    // integers > 127 (ASCII uses only 127). Yet, most char and wchar_t are signed.
+    // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
+    // cast this to an unsigned int with 32 bits, you get 4294967273!
+    //
+    // The trick is to cast to an unsigned version of the source char first
+    // before casting to the target. {P.S. Don't worry about the code, the
+    // optimizer will optimize the if-else branches}
+
+    template <typename TargetChar, typename SourceChar>
+    TargetChar cast_char(SourceChar ch)
+    {
+        if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
+        {
+            if (is_signed<SourceChar>::value)
+            {
+                 // source is signed, target is unsigned
+                typedef typename make_unsigned<SourceChar>::type USourceChar;
+                return TargetChar(USourceChar(ch));
+            }
+            else
+            {
+                 // source is unsigned, target is signed
+                typedef typename make_signed<SourceChar>::type SSourceChar;
+                return TargetChar(SSourceChar(ch));
+            }
+        }
+        else
+        {
+            // source and target has same signedness
+            return TargetChar(ch); // just cast
+        }
+    }
+}}}}
+
+#endif
+
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/literal_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/literal_char.hpp
new file mode 100644 (file)
index 0000000..94b2a23
--- /dev/null
@@ -0,0 +1,54 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_LITERAL_CHAR_APRIL_16_2006_1051AM)
+#define BOOST_SPIRIT_X3_LITERAL_CHAR_APRIL_16_2006_1051AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/support/utility/utf8.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Encoding, typename Attribute = typename Encoding::char_type>
+    struct literal_char : char_parser<literal_char<Encoding, Attribute>>
+    {
+        typedef typename Encoding::char_type char_type;
+        typedef Encoding encoding;
+        typedef Attribute attribute_type;
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+
+        template <typename Char>
+        literal_char(Char ch)
+          : ch(static_cast<char_type>(ch)) {}
+
+        template <typename Char, typename Context>
+        bool test(Char ch_, Context const&) const
+        {
+            return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch_))
+                && ch == char_type(ch_);
+        }
+
+        char_type ch;
+    };
+
+    template <typename Encoding, typename Attribute>
+    struct get_info<literal_char<Encoding, Attribute>>
+    {
+        typedef std::string result_type;
+        std::string operator()(literal_char<Encoding, Attribute> const& p) const
+        {
+            return '\'' + to_utf8(Encoding::toucs4(p.ch)) + '\'';
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/negated_char_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/negated_char_parser.hpp
new file mode 100644 (file)
index 0000000..392d712
--- /dev/null
@@ -0,0 +1,65 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM)
+#define BOOST_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // negated_char_parser handles ~cp expressions (cp is a char_parser)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Positive>
+    struct negated_char_parser :
+        char_parser<negated_char_parser<Positive>>
+    {
+        negated_char_parser(Positive const& positive)
+          : positive(positive) {}
+
+        template <typename CharParam, typename Context>
+        bool test(CharParam ch, Context const& context) const
+        {
+            return !positive.test(ch, context);
+        }
+
+        Positive positive;
+    };
+
+    template <typename Positive>
+    inline negated_char_parser<Positive>
+    operator~(char_parser<Positive> const& cp)
+    {
+        return negated_char_parser<Positive>(cp.derived());
+    }
+
+    template <typename Positive>
+    inline Positive const&
+    operator~(negated_char_parser<Positive> const& cp)
+    {
+        return cp.positive;
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Positive, typename Context>
+    struct attribute_of<x3::negated_char_parser<Positive>, Context>
+        : attribute_of<Positive, Context> {};
+    
+    template <typename Positive, typename Context>
+    struct has_attribute<x3::negated_char_parser<Positive>, Context>
+        : has_attribute<Positive, Context> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/unicode.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/char/unicode.hpp
new file mode 100644 (file)
index 0000000..6954c40
--- /dev/null
@@ -0,0 +1,617 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_UNICODE_JAN_20_2012_1218AM)
+#define BOOST_SPIRIT_X3_UNICODE_JAN_20_2012_1218AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/char/char_parser.hpp>
+#include <boost/spirit/home/x3/char/char.hpp>
+#include <boost/spirit/home/x3/char/detail/cast_char.hpp>
+#include <boost/spirit/home/support/char_encoding/unicode.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+    struct char_tag;
+    struct alnum_tag;
+    struct alpha_tag;
+    struct blank_tag;
+    struct cntrl_tag;
+    struct digit_tag;
+    struct graph_tag;
+    struct print_tag;
+    struct punct_tag;
+    struct space_tag;
+    struct xdigit_tag;
+    struct lower_tag;
+    struct upper_tag;
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+    struct letter_tag {};
+    struct mark_tag {};
+    struct number_tag {};
+    struct separator_tag {};
+    struct other_tag {};
+    struct punctuation_tag {};
+    struct symbol_tag {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode General Categories
+    ///////////////////////////////////////////////////////////////////////////
+    struct uppercase_letter_tag {};
+    struct lowercase_letter_tag {};
+    struct titlecase_letter_tag {};
+    struct modifier_letter_tag {};
+    struct other_letter_tag {};
+
+    struct nonspacing_mark_tag {};
+    struct enclosing_mark_tag {};
+    struct spacing_mark_tag {};
+
+    struct decimal_number_tag {};
+    struct letter_number_tag {};
+    struct other_number_tag {};
+
+    struct space_separator_tag {};
+    struct line_separator_tag {};
+    struct paragraph_separator_tag {};
+
+    struct control_tag {};
+    struct format_tag {};
+    struct private_use_tag {};
+    struct surrogate_tag {};
+    struct unassigned_tag {};
+
+    struct dash_punctuation_tag {};
+    struct open_punctuation_tag {};
+    struct close_punctuation_tag {};
+    struct connector_punctuation_tag {};
+    struct other_punctuation_tag {};
+    struct initial_punctuation_tag {};
+    struct final_punctuation_tag {};
+
+    struct math_symbol_tag {};
+    struct currency_symbol_tag {};
+    struct modifier_symbol_tag {};
+    struct other_symbol_tag {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+    struct alphabetic_tag {};
+    struct uppercase_tag {};
+    struct lowercase_tag {};
+    struct white_space_tag {};
+    struct hex_digit_tag {};
+    struct noncharacter_code_point_tag {};
+    struct default_ignorable_code_point_tag {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Scripts
+    ///////////////////////////////////////////////////////////////////////////
+    struct arabic_tag {};
+    struct imperial_aramaic_tag {};
+    struct armenian_tag {};
+    struct avestan_tag {};
+    struct balinese_tag {};
+    struct bamum_tag {};
+    struct bengali_tag {};
+    struct bopomofo_tag {};
+    struct braille_tag {};
+    struct buginese_tag {};
+    struct buhid_tag {};
+    struct canadian_aboriginal_tag {};
+    struct carian_tag {};
+    struct cham_tag {};
+    struct cherokee_tag {};
+    struct coptic_tag {};
+    struct cypriot_tag {};
+    struct cyrillic_tag {};
+    struct devanagari_tag {};
+    struct deseret_tag {};
+    struct egyptian_hieroglyphs_tag {};
+    struct ethiopic_tag {};
+    struct georgian_tag {};
+    struct glagolitic_tag {};
+    struct gothic_tag {};
+    struct greek_tag {};
+    struct gujarati_tag {};
+    struct gurmukhi_tag {};
+    struct hangul_tag {};
+    struct han_tag {};
+    struct hanunoo_tag {};
+    struct hebrew_tag {};
+    struct hiragana_tag {};
+    struct katakana_or_hiragana_tag {};
+    struct old_italic_tag {};
+    struct javanese_tag {};
+    struct kayah_li_tag {};
+    struct katakana_tag {};
+    struct kharoshthi_tag {};
+    struct khmer_tag {};
+    struct kannada_tag {};
+    struct kaithi_tag {};
+    struct tai_tham_tag {};
+    struct lao_tag {};
+    struct latin_tag {};
+    struct lepcha_tag {};
+    struct limbu_tag {};
+    struct linear_b_tag {};
+    struct lisu_tag {};
+    struct lycian_tag {};
+    struct lydian_tag {};
+    struct malayalam_tag {};
+    struct mongolian_tag {};
+    struct meetei_mayek_tag {};
+    struct myanmar_tag {};
+    struct nko_tag {};
+    struct ogham_tag {};
+    struct ol_chiki_tag {};
+    struct old_turkic_tag {};
+    struct oriya_tag {};
+    struct osmanya_tag {};
+    struct phags_pa_tag {};
+    struct inscriptional_pahlavi_tag {};
+    struct phoenician_tag {};
+    struct inscriptional_parthian_tag {};
+    struct rejang_tag {};
+    struct runic_tag {};
+    struct samaritan_tag {};
+    struct old_south_arabian_tag {};
+    struct saurashtra_tag {};
+    struct shavian_tag {};
+    struct sinhala_tag {};
+    struct sundanese_tag {};
+    struct syloti_nagri_tag {};
+    struct syriac_tag {};
+    struct tagbanwa_tag {};
+    struct tai_le_tag {};
+    struct new_tai_lue_tag {};
+    struct tamil_tag {};
+    struct tai_viet_tag {};
+    struct telugu_tag {};
+    struct tifinagh_tag {};
+    struct tagalog_tag {};
+    struct thaana_tag {};
+    struct thai_tag {};
+    struct tibetan_tag {};
+    struct ugaritic_tag {};
+    struct vai_tag {};
+    struct old_persian_tag {};
+    struct cuneiform_tag {};
+    struct yi_tag {};
+    struct inherited_tag {};
+    struct common_tag {};
+    struct unknown_tag {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    struct unicode_char_class_base
+    {
+        typedef char_encoding::unicode encoding;
+        typedef char_encoding::unicode::char_type char_type;
+
+#define BOOST_SPIRIT_X3_BASIC_CLASSIFY(name)                                       \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(name##_tag, Char ch)                                                 \
+        {                                                                       \
+            return encoding::is ##name                                          \
+                BOOST_PREVENT_MACRO_SUBSTITUTION                                \
+                    (detail::cast_char<char_type>(ch));                         \
+        }                                                                       \
+        /***/
+
+#define BOOST_SPIRIT_X3_CLASSIFY(name)                                             \
+        template <typename Char>                                                \
+        static bool                                                             \
+        is(name##_tag, Char ch)                                                 \
+        {                                                                       \
+            return encoding::is_##name                                          \
+                BOOST_PREVENT_MACRO_SUBSTITUTION                                \
+                    (detail::cast_char<char_type>(ch));                         \
+        }                                                                       \
+        /***/
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(char)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(alnum)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(alpha)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(digit)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(xdigit)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(cntrl)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(graph)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(lower)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(print)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(punct)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(space)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(blank)
+        BOOST_SPIRIT_X3_BASIC_CLASSIFY(upper)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CLASSIFY(letter)
+        BOOST_SPIRIT_X3_CLASSIFY(mark)
+        BOOST_SPIRIT_X3_CLASSIFY(number)
+        BOOST_SPIRIT_X3_CLASSIFY(separator)
+        BOOST_SPIRIT_X3_CLASSIFY(other)
+        BOOST_SPIRIT_X3_CLASSIFY(punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode General Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CLASSIFY(uppercase_letter)
+        BOOST_SPIRIT_X3_CLASSIFY(lowercase_letter)
+        BOOST_SPIRIT_X3_CLASSIFY(titlecase_letter)
+        BOOST_SPIRIT_X3_CLASSIFY(modifier_letter)
+        BOOST_SPIRIT_X3_CLASSIFY(other_letter)
+
+        BOOST_SPIRIT_X3_CLASSIFY(nonspacing_mark)
+        BOOST_SPIRIT_X3_CLASSIFY(enclosing_mark)
+        BOOST_SPIRIT_X3_CLASSIFY(spacing_mark)
+
+        BOOST_SPIRIT_X3_CLASSIFY(decimal_number)
+        BOOST_SPIRIT_X3_CLASSIFY(letter_number)
+        BOOST_SPIRIT_X3_CLASSIFY(other_number)
+
+        BOOST_SPIRIT_X3_CLASSIFY(space_separator)
+        BOOST_SPIRIT_X3_CLASSIFY(line_separator)
+        BOOST_SPIRIT_X3_CLASSIFY(paragraph_separator)
+
+        BOOST_SPIRIT_X3_CLASSIFY(control)
+        BOOST_SPIRIT_X3_CLASSIFY(format)
+        BOOST_SPIRIT_X3_CLASSIFY(private_use)
+        BOOST_SPIRIT_X3_CLASSIFY(surrogate)
+        BOOST_SPIRIT_X3_CLASSIFY(unassigned)
+
+        BOOST_SPIRIT_X3_CLASSIFY(dash_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(open_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(close_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(connector_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(other_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(initial_punctuation)
+        BOOST_SPIRIT_X3_CLASSIFY(final_punctuation)
+
+        BOOST_SPIRIT_X3_CLASSIFY(math_symbol)
+        BOOST_SPIRIT_X3_CLASSIFY(currency_symbol)
+        BOOST_SPIRIT_X3_CLASSIFY(modifier_symbol)
+        BOOST_SPIRIT_X3_CLASSIFY(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CLASSIFY(alphabetic)
+        BOOST_SPIRIT_X3_CLASSIFY(uppercase)
+        BOOST_SPIRIT_X3_CLASSIFY(lowercase)
+        BOOST_SPIRIT_X3_CLASSIFY(white_space)
+        BOOST_SPIRIT_X3_CLASSIFY(hex_digit)
+        BOOST_SPIRIT_X3_CLASSIFY(noncharacter_code_point)
+        BOOST_SPIRIT_X3_CLASSIFY(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Scripts
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CLASSIFY(arabic)
+        BOOST_SPIRIT_X3_CLASSIFY(imperial_aramaic)
+        BOOST_SPIRIT_X3_CLASSIFY(armenian)
+        BOOST_SPIRIT_X3_CLASSIFY(avestan)
+        BOOST_SPIRIT_X3_CLASSIFY(balinese)
+        BOOST_SPIRIT_X3_CLASSIFY(bamum)
+        BOOST_SPIRIT_X3_CLASSIFY(bengali)
+        BOOST_SPIRIT_X3_CLASSIFY(bopomofo)
+        BOOST_SPIRIT_X3_CLASSIFY(braille)
+        BOOST_SPIRIT_X3_CLASSIFY(buginese)
+        BOOST_SPIRIT_X3_CLASSIFY(buhid)
+        BOOST_SPIRIT_X3_CLASSIFY(canadian_aboriginal)
+        BOOST_SPIRIT_X3_CLASSIFY(carian)
+        BOOST_SPIRIT_X3_CLASSIFY(cham)
+        BOOST_SPIRIT_X3_CLASSIFY(cherokee)
+        BOOST_SPIRIT_X3_CLASSIFY(coptic)
+        BOOST_SPIRIT_X3_CLASSIFY(cypriot)
+        BOOST_SPIRIT_X3_CLASSIFY(cyrillic)
+        BOOST_SPIRIT_X3_CLASSIFY(devanagari)
+        BOOST_SPIRIT_X3_CLASSIFY(deseret)
+        BOOST_SPIRIT_X3_CLASSIFY(egyptian_hieroglyphs)
+        BOOST_SPIRIT_X3_CLASSIFY(ethiopic)
+        BOOST_SPIRIT_X3_CLASSIFY(georgian)
+        BOOST_SPIRIT_X3_CLASSIFY(glagolitic)
+        BOOST_SPIRIT_X3_CLASSIFY(gothic)
+        BOOST_SPIRIT_X3_CLASSIFY(greek)
+        BOOST_SPIRIT_X3_CLASSIFY(gujarati)
+        BOOST_SPIRIT_X3_CLASSIFY(gurmukhi)
+        BOOST_SPIRIT_X3_CLASSIFY(hangul)
+        BOOST_SPIRIT_X3_CLASSIFY(han)
+        BOOST_SPIRIT_X3_CLASSIFY(hanunoo)
+        BOOST_SPIRIT_X3_CLASSIFY(hebrew)
+        BOOST_SPIRIT_X3_CLASSIFY(hiragana)
+        BOOST_SPIRIT_X3_CLASSIFY(katakana_or_hiragana)
+        BOOST_SPIRIT_X3_CLASSIFY(old_italic)
+        BOOST_SPIRIT_X3_CLASSIFY(javanese)
+        BOOST_SPIRIT_X3_CLASSIFY(kayah_li)
+        BOOST_SPIRIT_X3_CLASSIFY(katakana)
+        BOOST_SPIRIT_X3_CLASSIFY(kharoshthi)
+        BOOST_SPIRIT_X3_CLASSIFY(khmer)
+        BOOST_SPIRIT_X3_CLASSIFY(kannada)
+        BOOST_SPIRIT_X3_CLASSIFY(kaithi)
+        BOOST_SPIRIT_X3_CLASSIFY(tai_tham)
+        BOOST_SPIRIT_X3_CLASSIFY(lao)
+        BOOST_SPIRIT_X3_CLASSIFY(latin)
+        BOOST_SPIRIT_X3_CLASSIFY(lepcha)
+        BOOST_SPIRIT_X3_CLASSIFY(limbu)
+        BOOST_SPIRIT_X3_CLASSIFY(linear_b)
+        BOOST_SPIRIT_X3_CLASSIFY(lisu)
+        BOOST_SPIRIT_X3_CLASSIFY(lycian)
+        BOOST_SPIRIT_X3_CLASSIFY(lydian)
+        BOOST_SPIRIT_X3_CLASSIFY(malayalam)
+        BOOST_SPIRIT_X3_CLASSIFY(mongolian)
+        BOOST_SPIRIT_X3_CLASSIFY(meetei_mayek)
+        BOOST_SPIRIT_X3_CLASSIFY(myanmar)
+        BOOST_SPIRIT_X3_CLASSIFY(nko)
+        BOOST_SPIRIT_X3_CLASSIFY(ogham)
+        BOOST_SPIRIT_X3_CLASSIFY(ol_chiki)
+        BOOST_SPIRIT_X3_CLASSIFY(old_turkic)
+        BOOST_SPIRIT_X3_CLASSIFY(oriya)
+        BOOST_SPIRIT_X3_CLASSIFY(osmanya)
+        BOOST_SPIRIT_X3_CLASSIFY(phags_pa)
+        BOOST_SPIRIT_X3_CLASSIFY(inscriptional_pahlavi)
+        BOOST_SPIRIT_X3_CLASSIFY(phoenician)
+        BOOST_SPIRIT_X3_CLASSIFY(inscriptional_parthian)
+        BOOST_SPIRIT_X3_CLASSIFY(rejang)
+        BOOST_SPIRIT_X3_CLASSIFY(runic)
+        BOOST_SPIRIT_X3_CLASSIFY(samaritan)
+        BOOST_SPIRIT_X3_CLASSIFY(old_south_arabian)
+        BOOST_SPIRIT_X3_CLASSIFY(saurashtra)
+        BOOST_SPIRIT_X3_CLASSIFY(shavian)
+        BOOST_SPIRIT_X3_CLASSIFY(sinhala)
+        BOOST_SPIRIT_X3_CLASSIFY(sundanese)
+        BOOST_SPIRIT_X3_CLASSIFY(syloti_nagri)
+        BOOST_SPIRIT_X3_CLASSIFY(syriac)
+        BOOST_SPIRIT_X3_CLASSIFY(tagbanwa)
+        BOOST_SPIRIT_X3_CLASSIFY(tai_le)
+        BOOST_SPIRIT_X3_CLASSIFY(new_tai_lue)
+        BOOST_SPIRIT_X3_CLASSIFY(tamil)
+        BOOST_SPIRIT_X3_CLASSIFY(tai_viet)
+        BOOST_SPIRIT_X3_CLASSIFY(telugu)
+        BOOST_SPIRIT_X3_CLASSIFY(tifinagh)
+        BOOST_SPIRIT_X3_CLASSIFY(tagalog)
+        BOOST_SPIRIT_X3_CLASSIFY(thaana)
+        BOOST_SPIRIT_X3_CLASSIFY(thai)
+        BOOST_SPIRIT_X3_CLASSIFY(tibetan)
+        BOOST_SPIRIT_X3_CLASSIFY(ugaritic)
+        BOOST_SPIRIT_X3_CLASSIFY(vai)
+        BOOST_SPIRIT_X3_CLASSIFY(old_persian)
+        BOOST_SPIRIT_X3_CLASSIFY(cuneiform)
+        BOOST_SPIRIT_X3_CLASSIFY(yi)
+        BOOST_SPIRIT_X3_CLASSIFY(inherited)
+        BOOST_SPIRIT_X3_CLASSIFY(common)
+        BOOST_SPIRIT_X3_CLASSIFY(unknown)
+
+#undef BOOST_SPIRIT_X3_BASIC_CLASSIFY
+#undef BOOST_SPIRIT_X3_CLASSIFY
+    };
+
+    template <typename Tag>
+    struct unicode_char_class
+      : char_parser<unicode_char_class<Tag>>
+    {
+        typedef char_encoding::unicode encoding;
+        typedef Tag tag;
+        typedef typename encoding::char_type char_type;
+        typedef char_type attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Char, typename Context>
+        bool test(Char ch, Context const&) const
+        {
+            return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch))
+                && unicode_char_class_base::is(tag(), ch);
+        }
+    };
+
+#define BOOST_SPIRIT_X3_CHAR_CLASS(name)                                           \
+    typedef unicode_char_class<name##_tag> name##_type;                         \
+    name##_type const name = name##_type();                                     \
+    /***/
+
+    namespace unicode
+    {
+        typedef any_char<char_encoding::unicode> char_type;
+        char_type const char_ = char_type();
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CHAR_CLASS(alnum)
+        BOOST_SPIRIT_X3_CHAR_CLASS(alpha)
+        BOOST_SPIRIT_X3_CHAR_CLASS(digit)
+        BOOST_SPIRIT_X3_CHAR_CLASS(xdigit)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cntrl)
+        BOOST_SPIRIT_X3_CHAR_CLASS(graph)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lower)
+        BOOST_SPIRIT_X3_CHAR_CLASS(print)
+        BOOST_SPIRIT_X3_CHAR_CLASS(punct)
+        BOOST_SPIRIT_X3_CHAR_CLASS(space)
+        BOOST_SPIRIT_X3_CHAR_CLASS(blank)
+        BOOST_SPIRIT_X3_CHAR_CLASS(upper)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Major Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CHAR_CLASS(letter)
+        BOOST_SPIRIT_X3_CHAR_CLASS(mark)
+        BOOST_SPIRIT_X3_CHAR_CLASS(number)
+        BOOST_SPIRIT_X3_CHAR_CLASS(separator)
+        BOOST_SPIRIT_X3_CHAR_CLASS(other)
+        BOOST_SPIRIT_X3_CHAR_CLASS(punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode General Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CHAR_CLASS(uppercase_letter)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lowercase_letter)
+        BOOST_SPIRIT_X3_CHAR_CLASS(titlecase_letter)
+        BOOST_SPIRIT_X3_CHAR_CLASS(modifier_letter)
+        BOOST_SPIRIT_X3_CHAR_CLASS(other_letter)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(nonspacing_mark)
+        BOOST_SPIRIT_X3_CHAR_CLASS(enclosing_mark)
+        BOOST_SPIRIT_X3_CHAR_CLASS(spacing_mark)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(decimal_number)
+        BOOST_SPIRIT_X3_CHAR_CLASS(letter_number)
+        BOOST_SPIRIT_X3_CHAR_CLASS(other_number)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(space_separator)
+        BOOST_SPIRIT_X3_CHAR_CLASS(line_separator)
+        BOOST_SPIRIT_X3_CHAR_CLASS(paragraph_separator)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(control)
+        BOOST_SPIRIT_X3_CHAR_CLASS(format)
+        BOOST_SPIRIT_X3_CHAR_CLASS(private_use)
+        BOOST_SPIRIT_X3_CHAR_CLASS(surrogate)
+        BOOST_SPIRIT_X3_CHAR_CLASS(unassigned)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(dash_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(open_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(close_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(connector_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(other_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(initial_punctuation)
+        BOOST_SPIRIT_X3_CHAR_CLASS(final_punctuation)
+
+        BOOST_SPIRIT_X3_CHAR_CLASS(math_symbol)
+        BOOST_SPIRIT_X3_CHAR_CLASS(currency_symbol)
+        BOOST_SPIRIT_X3_CHAR_CLASS(modifier_symbol)
+        BOOST_SPIRIT_X3_CHAR_CLASS(other_symbol)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Derived Categories
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CHAR_CLASS(alphabetic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(uppercase)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lowercase)
+        BOOST_SPIRIT_X3_CHAR_CLASS(white_space)
+        BOOST_SPIRIT_X3_CHAR_CLASS(hex_digit)
+        BOOST_SPIRIT_X3_CHAR_CLASS(noncharacter_code_point)
+        BOOST_SPIRIT_X3_CHAR_CLASS(default_ignorable_code_point)
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Unicode Scripts
+    ///////////////////////////////////////////////////////////////////////////
+        BOOST_SPIRIT_X3_CHAR_CLASS(arabic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(imperial_aramaic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(armenian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(avestan)
+        BOOST_SPIRIT_X3_CHAR_CLASS(balinese)
+        BOOST_SPIRIT_X3_CHAR_CLASS(bamum)
+        BOOST_SPIRIT_X3_CHAR_CLASS(bengali)
+        BOOST_SPIRIT_X3_CHAR_CLASS(bopomofo)
+        BOOST_SPIRIT_X3_CHAR_CLASS(braille)
+        BOOST_SPIRIT_X3_CHAR_CLASS(buginese)
+        BOOST_SPIRIT_X3_CHAR_CLASS(buhid)
+        BOOST_SPIRIT_X3_CHAR_CLASS(canadian_aboriginal)
+        BOOST_SPIRIT_X3_CHAR_CLASS(carian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cham)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cherokee)
+        BOOST_SPIRIT_X3_CHAR_CLASS(coptic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cypriot)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cyrillic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(devanagari)
+        BOOST_SPIRIT_X3_CHAR_CLASS(deseret)
+        BOOST_SPIRIT_X3_CHAR_CLASS(egyptian_hieroglyphs)
+        BOOST_SPIRIT_X3_CHAR_CLASS(ethiopic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(georgian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(glagolitic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(gothic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(greek)
+        BOOST_SPIRIT_X3_CHAR_CLASS(gujarati)
+        BOOST_SPIRIT_X3_CHAR_CLASS(gurmukhi)
+        BOOST_SPIRIT_X3_CHAR_CLASS(hangul)
+        BOOST_SPIRIT_X3_CHAR_CLASS(han)
+        BOOST_SPIRIT_X3_CHAR_CLASS(hanunoo)
+        BOOST_SPIRIT_X3_CHAR_CLASS(hebrew)
+        BOOST_SPIRIT_X3_CHAR_CLASS(hiragana)
+        BOOST_SPIRIT_X3_CHAR_CLASS(katakana_or_hiragana)
+        BOOST_SPIRIT_X3_CHAR_CLASS(old_italic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(javanese)
+        BOOST_SPIRIT_X3_CHAR_CLASS(kayah_li)
+        BOOST_SPIRIT_X3_CHAR_CLASS(katakana)
+        BOOST_SPIRIT_X3_CHAR_CLASS(kharoshthi)
+        BOOST_SPIRIT_X3_CHAR_CLASS(khmer)
+        BOOST_SPIRIT_X3_CHAR_CLASS(kannada)
+        BOOST_SPIRIT_X3_CHAR_CLASS(kaithi)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tai_tham)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lao)
+        BOOST_SPIRIT_X3_CHAR_CLASS(latin)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lepcha)
+        BOOST_SPIRIT_X3_CHAR_CLASS(limbu)
+        BOOST_SPIRIT_X3_CHAR_CLASS(linear_b)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lisu)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lycian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(lydian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(malayalam)
+        BOOST_SPIRIT_X3_CHAR_CLASS(mongolian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(meetei_mayek)
+        BOOST_SPIRIT_X3_CHAR_CLASS(myanmar)
+        BOOST_SPIRIT_X3_CHAR_CLASS(nko)
+        BOOST_SPIRIT_X3_CHAR_CLASS(ogham)
+        BOOST_SPIRIT_X3_CHAR_CLASS(ol_chiki)
+        BOOST_SPIRIT_X3_CHAR_CLASS(old_turkic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(oriya)
+        BOOST_SPIRIT_X3_CHAR_CLASS(osmanya)
+        BOOST_SPIRIT_X3_CHAR_CLASS(phags_pa)
+        BOOST_SPIRIT_X3_CHAR_CLASS(inscriptional_pahlavi)
+        BOOST_SPIRIT_X3_CHAR_CLASS(phoenician)
+        BOOST_SPIRIT_X3_CHAR_CLASS(inscriptional_parthian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(rejang)
+        BOOST_SPIRIT_X3_CHAR_CLASS(runic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(samaritan)
+        BOOST_SPIRIT_X3_CHAR_CLASS(old_south_arabian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(saurashtra)
+        BOOST_SPIRIT_X3_CHAR_CLASS(shavian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(sinhala)
+        BOOST_SPIRIT_X3_CHAR_CLASS(sundanese)
+        BOOST_SPIRIT_X3_CHAR_CLASS(syloti_nagri)
+        BOOST_SPIRIT_X3_CHAR_CLASS(syriac)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tagbanwa)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tai_le)
+        BOOST_SPIRIT_X3_CHAR_CLASS(new_tai_lue)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tamil)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tai_viet)
+        BOOST_SPIRIT_X3_CHAR_CLASS(telugu)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tifinagh)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tagalog)
+        BOOST_SPIRIT_X3_CHAR_CLASS(thaana)
+        BOOST_SPIRIT_X3_CHAR_CLASS(thai)
+        BOOST_SPIRIT_X3_CHAR_CLASS(tibetan)
+        BOOST_SPIRIT_X3_CHAR_CLASS(ugaritic)
+        BOOST_SPIRIT_X3_CHAR_CLASS(vai)
+        BOOST_SPIRIT_X3_CHAR_CLASS(old_persian)
+        BOOST_SPIRIT_X3_CHAR_CLASS(cuneiform)
+        BOOST_SPIRIT_X3_CHAR_CLASS(yi)
+        BOOST_SPIRIT_X3_CHAR_CLASS(inherited)
+        BOOST_SPIRIT_X3_CHAR_CLASS(common)
+        BOOST_SPIRIT_X3_CHAR_CLASS(unknown)
+    }
+
+#undef BOOST_SPIRIT_X3_CHAR_CLASS
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core.hpp
new file mode 100644 (file)
index 0000000..a4f875e
--- /dev/null
@@ -0,0 +1,20 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CORE_APRIL_04_2012_0318PM)
+#define BOOST_SPIRIT_X3_CORE_APRIL_04_2012_0318PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parse.hpp>
+//~ #include <boost/spirit/home/x3/core/parse_attr.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/action.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/action.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/action.hpp
new file mode 100644 (file)
index 0000000..890933f
--- /dev/null
@@ -0,0 +1,120 @@
+/*=============================================================================
+    Copyright (arg) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ACTION_JANUARY_07_2007_1128AM)
+#define SPIRIT_ACTION_JANUARY_07_2007_1128AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/core/call.hpp>
+#include <boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct raw_attribute_type;
+    struct parse_pass_context_tag;
+
+    template <typename Context>
+    inline bool& _pass(Context const& context)
+    {
+        return x3::get<parse_pass_context_tag>(context);
+    }
+
+    template <typename Subject, typename Action>
+    struct action : unary_parser<Subject, action<Subject, Action>>
+    {
+        typedef unary_parser<Subject, action<Subject, Action>> base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const has_action = true;
+
+        action(Subject const& subject, Action f)
+          : base_type(subject), f(f) {}
+
+        template <typename Iterator, typename Context, typename RuleContext, typename Attribute>
+        bool call_action(
+            Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr) const
+        {
+            bool pass = true;
+            auto action_context = make_context<parse_pass_context_tag>(pass, context);
+            call(f, first, last, action_context, rcontext, attr);
+            return pass;
+        }
+
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse_main(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr) const
+        {
+            Iterator save = first;
+            if (this->subject.parse(first, last, context, rcontext, attr))
+            {
+                if (call_action(first, last, context, rcontext, attr))
+                    return true;
+
+                // reset iterators if semantic action failed the match
+                // retrospectively
+                first = save;
+            }
+            return false;
+        }
+        
+        // attr==raw_attribute_type, action wants iterator_range (see raw.hpp)
+        template <typename Iterator, typename Context, typename RuleContext>
+        bool parse_main(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, raw_attribute_type&) const
+        {
+            boost::iterator_range<Iterator> rng;
+            // synthesize the attribute since one is not supplied
+            return parse_main(first, last, context, rcontext, rng);
+        }
+
+        // attr==unused, action wants attribute
+        template <typename Iterator, typename Context, typename RuleContext>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, unused_type) const
+        {
+            typedef typename
+                traits::attribute_of<action<Subject, Action>, Context>::type
+            attribute_type;
+            typedef traits::make_attribute<attribute_type, unused_type> make_attribute;
+            typedef traits::transform_attribute<
+                typename make_attribute::type, attribute_type, parser_id>
+            transform;
+
+            // synthesize the attribute since one is not supplied
+            typename make_attribute::type made_attr = make_attribute::call(unused_type());
+            typename transform::type attr = transform::pre(made_attr);
+            return parse_main(first, last, context, rcontext, attr);
+        }
+        
+        // main parse function
+        template <typename Iterator, typename Context
+            , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr) const
+        {
+            return parse_main(first, last, context, rcontext, attr);
+        }
+
+        Action f;
+    };
+
+    template <typename P, typename Action>
+    inline action<typename extension::as_parser<P>::value_type, Action>
+    operator/(P const& p, Action f)
+    {
+        return {as_parser(p), f};
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/call.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/call.hpp
new file mode 100644 (file)
index 0000000..a413975
--- /dev/null
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_CALL_CONTEXT_MAY_26_2014_0234PM)
+#define SPIRIT_CALL_CONTEXT_MAY_26_2014_0234PM
+
+#include <type_traits>
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/utility/is_callable.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ////////////////////////////////////////////////////////////////////////////
+    struct rule_val_context_tag;
+
+    template <typename Context>
+    inline auto _val(Context const& context)
+        -> decltype(x3::get<rule_val_context_tag>(context))
+    {
+        return x3::get<rule_val_context_tag>(context);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    struct where_context_tag;
+
+    template <typename Context>
+    inline auto _where(Context const& context)
+        -> decltype(x3::get<where_context_tag>(context))
+    {
+        return x3::get<where_context_tag>(context);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    struct attr_context_tag;
+
+    template <typename Context>
+    inline auto _attr(Context const& context)
+        -> decltype(x3::get<attr_context_tag>(context))
+    {
+        return x3::get<attr_context_tag>(context);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename F, typename Context>
+        auto call(F f, Context const& context, mpl::true_)
+        {
+            return f(context);
+        }
+
+        template <typename F, typename Context>
+        auto call(F f, Context const& context, mpl::false_)
+        {
+            return f();
+        }
+    }
+
+    template <
+        typename F, typename Iterator
+      , typename Context, typename RuleContext, typename Attribute>
+    auto call(
+        F f, Iterator& first, Iterator const& last
+      , Context const& context, RuleContext& rcontext, Attribute& attr)
+    {
+        boost::iterator_range<Iterator> rng(first, last);
+        auto val_context = make_context<rule_val_context_tag>(rcontext, context);
+        auto where_context = make_context<where_context_tag>(rng, val_context);
+        auto attr_context = make_context<attr_context_tag>(attr, where_context);
+        return detail::call(f, attr_context, is_callable<F(decltype(attr_context) const&)>());
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp
new file mode 100644 (file)
index 0000000..4b19115
--- /dev/null
@@ -0,0 +1,248 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PARSE_INTO_CONTAINER_JAN_15_2013_0957PM)
+#define SPIRIT_PARSE_INTO_CONTAINER_JAN_15_2013_0957PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <type_traits>
+
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/value_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/handles_container.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/back.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    template <typename Attribute, typename Value>
+    struct saver_visitor;
+
+    // save to associative fusion container where Key is simple type
+    template <typename Key, typename Enable = void>
+    struct save_to_assoc_attr
+    {
+        template <typename Value, typename Attribute>
+        static void call(const Key, Value& value, Attribute& attr)
+        {
+            traits::move_to(value, fusion::at_key<Key>(attr));
+        }
+    };
+
+       
+    // save to associative fusion container where Key
+    // is variant over possible keys
+    template <typename ...T>
+    struct save_to_assoc_attr<variant<T...> >
+    {
+        typedef variant<T...> variant_t;
+            
+        template <typename Value, typename Attribute>
+        static void call(const variant_t key, Value& value, Attribute& attr)
+        {
+            apply_visitor(saver_visitor<Attribute, Value>(attr, value), key);
+        }
+    };
+
+    template <typename Attribute, typename Value>
+    struct saver_visitor  : boost::static_visitor<void>
+    {
+        saver_visitor(Attribute& attr, Value& value)
+            : attr(attr), value(value) {};
+
+        Attribute& attr;
+        Value& value;
+            
+        template <typename Key>
+        void operator()(Key) const
+        {
+            save_to_assoc_attr<Key>::call(Key(), value,attr);
+        }
+    };
+
+
+    template <typename Parser>
+    struct parse_into_container_base_impl
+    {
+    private:
+
+        // Parser has attribute (synthesize; Attribute is a container)
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        static bool call_synthesize(
+            Parser const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr)
+        {
+            // synthesized attribute needs to be value initialized
+            typedef typename
+                traits::container_value<Attribute>::type
+            value_type;
+            value_type val = traits::value_initialize<value_type>::call();
+
+            if (!parser.parse(first, last, context, rcontext, val))
+                return false;
+
+            // push the parsed value into our attribute
+            traits::push_back(attr, val);
+            return true;
+        }
+
+        // Parser has attribute (synthesize; Attribute is a single element fusion sequence)
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        static bool call_synthesize_into_fusion_seq(Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::false_ /* is_associative */)
+        {
+            static_assert(traits::has_size<Attribute, 1>::value,
+                "Expecting a single element fusion sequence");
+            return call_synthesize(parser, first, last, context, rcontext,
+                fusion::front(attr));
+        }
+
+        // Parser has attribute (synthesize; Attribute is fusion map sequence)
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call_synthesize_into_fusion_seq(
+            Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::true_ /*is_associative*/)
+        {
+            using attribute_type = typename traits::attribute_of<Parser, Context>::type;
+            static_assert(traits::has_size<attribute_type, 2>::value,
+                "To parse directly into fusion map parser must produce 2 element attr");
+
+            // use type of  first element of attribute as key
+            using key = typename std::remove_reference<
+            typename fusion::result_of::front<attribute_type>::type>::type;
+
+            attribute_type attr_;
+            if (!parser.parse(first, last, context, rcontext, attr_))
+                return false;
+
+            save_to_assoc_attr<key>::call(fusion::front(attr_), fusion::back(attr_), attr);
+            return true;
+        }
+
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call_synthesize_dispatch_by_seq(Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::true_ /*is_sequence*/)
+        {
+            return call_synthesize_into_fusion_seq(
+                parser, first, last, context, rcontext, attr
+              , fusion::traits::is_associative<Attribute>());
+        }
+
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call_synthesize_dispatch_by_seq(Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::false_ /*is_sequence*/)
+        {
+            return call_synthesize(parser, first, last, context, rcontext, attr);
+        }
+
+        // Parser has attribute (synthesize)
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call(Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::true_)
+        {
+            return call_synthesize_dispatch_by_seq(parser, first, last, context, rcontext, attr
+                , fusion::traits::is_sequence<Attribute>());
+        }
+
+        // Parser has no attribute (pass unused)
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call(
+            Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr, mpl::false_)
+        {
+            return parser.parse(first, last, context, rcontext, unused);
+        }
+       
+
+    public:
+
+        template <typename Iterator, typename Context, typename RContext, typename Attribute>
+        static bool call(Parser const& parser
+          , Iterator& first, Iterator const& last, Context const& context
+          , RContext& rcontext, Attribute& attr)
+        {
+            return call(parser, first, last, context, rcontext, attr
+              , mpl::bool_<traits::has_attribute<Parser, Context>::value>());
+        }
+    };
+
+    template <typename Parser, typename Context, typename RContext, typename Enable = void>
+    struct parse_into_container_impl : parse_into_container_base_impl<Parser> {};
+
+    template <typename Parser, typename Container, typename RContext, typename Context>
+    struct parser_attr_is_substitute_for_container_value
+        : traits::is_substitute<
+            typename traits::attribute_of<Parser, Context>::type
+          , typename traits::container_value<Container>::type
+        >
+    {};
+
+    template <typename Parser, typename Context, typename RContext>
+    struct parse_into_container_impl<Parser, Context, RContext,
+        typename enable_if<traits::handles_container<Parser, Context>>::type>
+    {
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            Parser const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+        {
+            return parse_into_container_base_impl<Parser>::call(
+                parser, first, last, context, rcontext, attr);
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            Parser const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+        {
+            return parser.parse(first, last, context, rcontext, attr);
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(Parser const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr)
+        {
+            return call(parser, first, last, context, rcontext, attr,
+                parser_attr_is_substitute_for_container_value<
+                    Parser, Attribute, Context, RContext>());
+        }
+    };
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_into_container(
+        Parser const& parser
+      , Iterator& first, Iterator const& last, Context const& context
+      , RContext& rcontext, Attribute& attr)
+    {
+        return parse_into_container_impl<Parser, Context, RContext>::call(
+            parser, first, last, context, rcontext, attr);
+    }
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parse.hpp
new file mode 100644 (file)
index 0000000..ac36e3c
--- /dev/null
@@ -0,0 +1,190 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_PARSE_APRIL_16_2006_0442PM)
+#define BOOST_SPIRIT_X3_PARSE_APRIL_16_2006_0442PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/concept_check.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Attribute>
+    inline bool
+    parse_main(
+        Iterator& first
+      , Iterator last
+      , Parser const& p
+      , Attribute& attr)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a
+        // compilation error here, then you are using an input_iterator while
+        // calling this function. You need to supply at least a forward_iterator
+        // instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // If you get an error no matching function for call to 'as_parser'
+        // here, then p is not a parser or there is no suitable conversion
+        // from p to a parser.
+        return as_parser(p).parse(first, last, unused, unused, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Attribute>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Parser const& p
+      , Attribute& attr)
+    {
+        return parse_main(first, last, p, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Attribute>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Parser const& p
+      , Attribute& attr)
+    {
+        Iterator first = first_;
+        return parse_main(first, last, p, attr);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser>
+    inline bool
+    parse(
+        Iterator& first
+      , Iterator last
+      , Parser const& p)
+    {
+        return parse_main(first, last, p, unused);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser>
+    inline bool
+    parse(
+        Iterator const& first_
+      , Iterator last
+      , Parser const& p)
+    {
+        Iterator first = first_;
+        return parse_main(first, last, p, unused);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    enum class skip_flag
+    {
+        post_skip,      // force post-skipping in phrase_parse()
+        dont_post_skip  // inhibit post-skipping in phrase_parse()
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+    inline bool
+    phrase_parse_main(
+        Iterator& first
+      , Iterator last
+      , Parser const& p
+      , Skipper const& s
+      , Attribute& attr
+      , skip_flag post_skip = skip_flag::post_skip)
+    {
+        // Make sure the iterator is at least a forward_iterator. If you got a
+        // compilation error here, then you are using an input_iterator while
+        // calling this function. You need to supply at least a forward_iterator
+        // instead.
+        BOOST_CONCEPT_ASSERT((ForwardIterator<Iterator>));
+
+        // If you get an error no matching function for call to 'as_parser'
+        // here, for either p or s, then p or s is not a parser or there is
+        // no suitable conversion from p to a parser.
+        auto skipper_ctx = make_context<skipper_tag>(as_parser(s));
+        bool r = as_parser(p).parse(first, last, skipper_ctx, unused, attr);
+        if (post_skip == skip_flag::post_skip)
+            x3::skip_over(first, last, skipper_ctx);
+        return r;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Parser const& p
+      , Skipper const& s
+      , Attribute& attr
+      , skip_flag post_skip = skip_flag::post_skip)
+    {
+        return phrase_parse_main(first, last, p, s, attr, post_skip);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Skipper, typename Attribute>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Parser const& p
+      , Skipper const& s
+      , Attribute& attr
+      , skip_flag post_skip = skip_flag::post_skip)
+    {
+        Iterator first = first_;
+        return phrase_parse_main(first, last, p, s, attr, post_skip);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator& first
+      , Iterator last
+      , Parser const& p
+      , Skipper const& s
+      , skip_flag post_skip = skip_flag::post_skip)
+    {
+        return phrase_parse_main(first, last, p, s, unused, post_skip);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Parser, typename Skipper>
+    inline bool
+    phrase_parse(
+        Iterator const& first_
+      , Iterator last
+      , Parser const& p
+      , Skipper const& s
+      , skip_flag post_skip = skip_flag::post_skip)
+    {
+        Iterator first = first_;
+        return phrase_parse_main(first, last, p, s, unused, post_skip);
+    }
+    
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Skipper>
+    struct phrase_parse_context
+    {
+        typedef decltype(
+            make_context<skipper_tag>(as_parser(std::declval<Skipper>())))
+        type;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/parser.hpp
new file mode 100644 (file)
index 0000000..bc63a74
--- /dev/null
@@ -0,0 +1,239 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_PARSER_OCTOBER_16_2008_0254PM)
+#define BOOST_SPIRIT_X3_PARSER_OCTOBER_16_2008_0254PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <string>
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+#include <typeinfo>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    using x3::unused_type;
+    using x3::unused;
+    using x3::get;
+
+    template <typename Subject, typename Action>
+    struct action;
+
+    template <typename Subject, typename Handler>
+    struct guard;
+
+    struct parser_base {};
+    struct parser_id;
+
+    template <typename Derived>
+    struct parser : parser_base
+    {
+        typedef Derived derived_type;
+        static bool const handles_container = false;
+        static bool const is_pass_through_unary = false;
+        static bool const has_action = false;
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+
+        template <typename Action>
+        action<Derived, Action>
+        operator[](Action f) const
+        {
+            return action<Derived, Action>(this->derived(), f);
+        }
+
+        template <typename Handler>
+        guard<Derived, Handler>
+        on_error(Handler f) const
+        {
+            return guard<Derived, Handler>(this->derived(), f);
+        }
+    };
+
+    struct unary_category;
+    struct binary_category;
+
+    template <typename Subject, typename Derived>
+    struct unary_parser : parser<Derived>
+    {
+        typedef unary_category category;
+        typedef Subject subject_type;
+        static bool const has_action = Subject::has_action;
+
+        unary_parser(Subject subject)
+            : subject(subject) {}
+
+        unary_parser const& get_unary() const { return *this; }
+
+        Subject subject;
+    };
+
+    template <typename Left, typename Right, typename Derived>
+    struct binary_parser : parser<Derived>
+    {
+        typedef binary_category category;
+        typedef Left left_type;
+        typedef Right right_type;
+        static bool const has_action =
+            left_type::has_action || right_type::has_action;
+
+        binary_parser(Left left, Right right)
+            : left(left), right(right) {}
+
+        binary_parser const& get_binary() const { return *this; }
+
+        Left left;
+        Right right;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // as_parser: convert a type, T, into a parser.
+    ///////////////////////////////////////////////////////////////////////////
+    namespace extension
+    {
+        namespace detail
+        {
+            namespace as_parser_guard
+            {
+                void as_spirit_parser(...);
+
+                template<typename T, typename R =
+                    decltype(as_spirit_parser(boost::declval<T const&>()))>
+                struct deduce_as_parser
+                {
+                    typedef R type;
+                    typedef typename
+                        boost::remove_cv<
+                            typename boost::remove_reference<R>::type
+                        >::type
+                    value_type;
+
+                    static type call(T const& v)
+                    {
+                        return as_spirit_parser(v);
+                    }
+                };
+                template<typename T>
+                struct deduce_as_parser<T, void>
+                {};
+            }
+            using as_parser_guard::deduce_as_parser;
+        }
+
+        template <typename T, typename Enable = void>
+        struct as_parser : detail::deduce_as_parser<T> {};
+
+        template <>
+        struct as_parser<unused_type>
+        {
+            typedef unused_type type;
+            typedef unused_type value_type;
+            static type call(unused_type)
+            {
+                return unused;
+            }
+        };
+
+        template <typename Derived>
+        struct as_parser<Derived
+            , typename enable_if<is_base_of<parser_base, Derived>>::type>
+        {
+            typedef Derived const& type;
+            typedef Derived value_type;
+            static type call(Derived const& p)
+            {
+                return p;
+            }
+        };
+
+        template <typename Derived>
+        struct as_parser<parser<Derived>>
+        {
+            typedef Derived const& type;
+            typedef Derived value_type;
+            static type call(parser<Derived> const& p)
+            {
+                return p.derived();
+            }
+        };
+    }
+
+    template <typename T>
+    inline typename extension::as_parser<T>::type
+    as_parser(T const& x)
+    {
+        return extension::as_parser<T>::call(x);
+    }
+
+    template <typename Derived>
+    inline Derived const&
+    as_parser(parser<Derived> const& p)
+    {
+        return p.derived();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // The main what function
+    //
+    // Note: unlike Spirit2, spirit parsers are no longer required to have a
+    // "what" member function. In X3, we specialize the get_info struct
+    // below where needed. If a specialization is not provided, the default
+    // below will be used. The default "what" result will be the typeid
+    // name of the parser if BOOST_SPIRIT_X3_NO_RTTI is not defined, otherwise
+    // "undefined"
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Parser, typename Enable = void>
+    struct get_info
+    {
+        typedef std::string result_type;
+        std::string operator()(Parser const&) const
+        {
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+            return typeid(Parser).name();
+#else
+            return "undefined";
+#endif
+        }
+    };
+
+    template <typename Parser>
+    std::string what(Parser const& p)
+    {
+        return get_info<Parser>()(p);
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Subject, typename Derived, typename Context>
+    struct has_attribute<x3::unary_parser<Subject, Derived>, Context>
+        : has_attribute<Subject, Context> {};
+
+    template <typename Left, typename Right, typename Derived, typename Context>
+    struct has_attribute<x3::binary_parser<Left, Right, Derived>, Context>
+        : mpl::bool_<has_attribute<Left, Context>::value ||
+                has_attribute<Right, Context>::value> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/proxy.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/proxy.hpp
new file mode 100644 (file)
index 0000000..1a0ade5
--- /dev/null
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_PROXY_FEBRUARY_1_2013_0211PM)
+#define BOOST_SPIRIT_X3_PROXY_FEBRUARY_1_2013_0211PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject, typename Derived>
+    struct proxy : unary_parser<Subject, Derived>
+    {
+        static bool const is_pass_through_unary = true;
+
+        proxy(Subject const& subject)
+          : unary_parser<Subject, Derived>(subject) {}
+
+        // Overload this when appropriate. The proxy parser will pick up
+        // the most derived overload.
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute, typename Category>
+        bool parse_subject(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr, Category) const
+        {
+            this->subject.parse(first, last, context, rcontext, attr);
+            return true;
+        }
+
+        // Main entry point.
+        template <typename Iterator, typename Context
+          , typename RuleContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RuleContext& rcontext, Attribute& attr) const
+        {
+            return this->derived().parse_subject(first, last, context, rcontext, attr
+                , typename traits::attribute_category<Attribute>::type());
+        }
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/skip_over.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/core/skip_over.hpp
new file mode 100644 (file)
index 0000000..643ddb1
--- /dev/null
@@ -0,0 +1,104 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SKIP_APRIL_16_2006_0625PM)
+#define BOOST_SPIRIT_X3_SKIP_APRIL_16_2006_0625PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Move the /first/ iterator to the first non-matching position
+    // given a skip-parser. The function is a no-op if unused_type or
+    // unused_skipper is passed as the skip-parser.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Skipper>
+    struct unused_skipper : unused_type
+    {
+        unused_skipper(Skipper const& skipper)
+          : skipper(skipper) {}
+        Skipper const& skipper;
+    };
+
+    namespace detail
+    {
+        template <typename Skipper>
+        struct is_unused_skipper
+          : mpl::false_ {};
+
+        template <typename Skipper>
+        struct is_unused_skipper<unused_skipper<Skipper>>
+          : mpl::true_ {};
+
+        template <> 
+        struct is_unused_skipper<unused_type>
+          : mpl::true_ {};
+
+        template <typename Skipper>
+        inline Skipper const&
+        get_unused_skipper(Skipper const& skipper)
+        {
+            return skipper;
+        }
+        template <typename Skipper>
+        inline Skipper const&
+        get_unused_skipper(unused_skipper<Skipper> const& unused_skipper)
+        {
+            return unused_skipper.skipper;
+        }
+
+        template <typename Iterator, typename Skipper>
+        inline void skip_over(
+            Iterator& first, Iterator const& last, Skipper const& skipper)
+        {
+            while (first != last && skipper.parse(first, last, unused, unused, unused))
+                /***/;
+        }
+
+        template <typename Iterator>
+        inline void skip_over(Iterator&, Iterator const&, unused_type)
+        {
+        }
+
+        template <typename Iterator, typename Skipper>
+        inline void skip_over(
+            Iterator&, Iterator const&, unused_skipper<Skipper> const&)
+        {
+        }
+    }
+
+    // this tag is used to find the skipper from the context
+    struct skipper_tag;
+    
+    template <typename Context>
+    struct has_skipper
+      : mpl::not_<detail::is_unused_skipper<
+            typename remove_cv<typename remove_reference<
+                decltype(x3::get<skipper_tag>(boost::declval<Context>()))
+            >::type>::type
+        >> {};
+
+    template <typename Iterator, typename Context>
+    inline void skip_over(
+        Iterator& first, Iterator const& last, Context const& context)
+    {
+        detail::skip_over(first, last, x3::get<skipper_tag>(context));
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive.hpp
new file mode 100644 (file)
index 0000000..81f7a85
--- /dev/null
@@ -0,0 +1,28 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_DIRECTIVE_FEBRUARY_05_2007_0313PM)
+#define BOOST_SPIRIT_X3_DIRECTIVE_FEBRUARY_05_2007_0313PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+//~ #include <boost/spirit/home/x3/directive/as.hpp>
+//~ #include <boost/spirit/home/x3/directive/encoding.hpp>
+//~ #include <boost/spirit/home/x3/directive/hold.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+#include <boost/spirit/home/x3/directive/lexeme.hpp>
+#include <boost/spirit/home/x3/directive/no_skip.hpp>
+//~ #include <boost/spirit/home/x3/directive/matches.hpp>
+//~ #include <boost/spirit/home/x3/directive/no_case.hpp>
+#include <boost/spirit/home/x3/directive/omit.hpp>
+#include <boost/spirit/home/x3/directive/raw.hpp>
+//~ #include <boost/spirit/home/x3/directive/repeat.hpp>
+#include <boost/spirit/home/x3/directive/skip.hpp>
+#include <boost/spirit/home/x3/directive/with.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/expect.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/expect.hpp
new file mode 100644 (file)
index 0000000..4e59ce5
--- /dev/null
@@ -0,0 +1,80 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_EXPECT_MARCH_16_2012_1024PM)
+#define SPIRIT_EXPECT_MARCH_16_2012_1024PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/throw_exception.hpp>
+#include <stdexcept>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Iterator>
+    struct expectation_failure : std::runtime_error
+    {
+    public:
+
+        expectation_failure(Iterator where, std::string const& which)
+          : std::runtime_error("boost::spirit::x3::expectation_failure")
+          , where_(where), which_(which)
+        {}
+        ~expectation_failure() throw() {}
+        
+        std::string which() const { return which_; }
+        Iterator const& where() const { return where_; }
+        
+    private:
+
+        Iterator where_;
+        std::string which_;
+    };
+
+    template <typename Subject>
+    struct expect_directive : unary_parser<Subject, expect_directive<Subject>>
+    {
+        typedef unary_parser<Subject, expect_directive<Subject> > base_type;
+        static bool const is_pass_through_unary = true;
+
+        expect_directive(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            bool r = this->subject.parse(first, last, context, rcontext, attr);
+
+            if (!r)
+            {
+                boost::throw_exception(
+                    expectation_failure<Iterator>(
+                        first, what(this->subject)));
+            }
+            return r;
+        }
+    };
+
+    struct expect_gen
+    {
+        template <typename Subject>
+        expect_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    expect_gen const expect = expect_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/lexeme.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/lexeme.hpp
new file mode 100644 (file)
index 0000000..e510427
--- /dev/null
@@ -0,0 +1,84 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_LEXEME_MARCH_24_2007_0802AM)
+#define SPIRIT_LEXEME_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct lexeme_directive : unary_parser<Subject, lexeme_directive<Subject>>
+    {
+        typedef unary_parser<Subject, lexeme_directive<Subject> > base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        lexeme_directive(Subject const& subject)
+          : base_type(subject) {}
+        
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename enable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            x3::skip_over(first, last, context);
+            auto const& skipper = x3::get<skipper_tag>(context);
+
+            typedef unused_skipper<
+                typename remove_reference<decltype(skipper)>::type>
+            unused_skipper_type;
+            unused_skipper_type unused_skipper(skipper);
+
+            return this->subject.parse(
+                first, last
+              , make_context<skipper_tag>(unused_skipper, context)
+              , rcontext
+              , attr);
+        }
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename disable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            //  no need to pre-skip if skipper is unused
+            //- x3::skip_over(first, last, context);
+
+            return this->subject.parse(
+                first, last
+              , context
+              , rcontext
+              , attr);
+        }
+    };
+
+    struct lexeme_gen
+    {
+        template <typename Subject>
+        lexeme_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    lexeme_gen const lexeme = lexeme_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/no_skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/no_skip.hpp
new file mode 100644 (file)
index 0000000..14dee4d
--- /dev/null
@@ -0,0 +1,82 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NO_SKIP_JAN_16_2010_0802PM)
+#define SPIRIT_NO_SKIP_JAN_16_2010_0802PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    // same as lexeme[], but does not pre-skip
+    template <typename Subject>
+    struct no_skip_directive : unary_parser<Subject, no_skip_directive<Subject>>
+    {
+        typedef unary_parser<Subject, no_skip_directive<Subject> > base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        no_skip_directive(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename enable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            auto const& skipper = x3::get<skipper_tag>(context);
+
+            typedef unused_skipper<
+                typename remove_reference<decltype(skipper)>::type>
+            unused_skipper_type;
+            unused_skipper_type unused_skipper(skipper);
+
+            return this->subject.parse(
+                first, last
+              , make_context<skipper_tag>(unused_skipper, context)
+              , rcontext
+              , attr);
+        }
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename disable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            return this->subject.parse(
+                first, last
+              , context
+              , rcontext
+              , attr);
+        }
+    };
+
+    struct no_skip_gen
+    {
+        template <typename Subject>
+        no_skip_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    no_skip_gen const no_skip = no_skip_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/omit.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/omit.hpp
new file mode 100644 (file)
index 0000000..43ebd49
--- /dev/null
@@ -0,0 +1,55 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_OMIT_MARCH_24_2007_0802AM)
+#define SPIRIT_OMIT_MARCH_24_2007_0802AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // omit_directive forces the attribute of subject parser
+    // to be unused_type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct omit_directive : unary_parser<Subject, omit_directive<Subject>>
+    {
+        typedef unary_parser<Subject, omit_directive<Subject> > base_type;
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        typedef Subject subject_type;
+        omit_directive(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context, typename RContext>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, unused_type) const
+        {
+            return this->subject.parse(first, last, context, rcontext, unused);
+        }
+    };
+
+    struct omit_gen
+    {
+        template <typename Subject>
+        omit_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    omit_gen const omit = omit_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/raw.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/raw.hpp
new file mode 100644 (file)
index 0000000..e6bcd9a
--- /dev/null
@@ -0,0 +1,70 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_X3_RAW_APRIL_9_2007_0912AM)
+#define SPIRIT_X3_RAW_APRIL_9_2007_0912AM
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    // this is a pseudo attribute type indicating that the parser wants the
+    // iterator range pointing to the [first, last) matching characters from
+    // the input iterators.
+    struct raw_attribute_type {};
+
+    template <typename Subject>
+    struct raw_directive : unary_parser<Subject, raw_directive<Subject>>
+    {
+        typedef unary_parser<Subject, raw_directive<Subject> > base_type;
+        typedef raw_attribute_type attribute_type;
+        static bool const handles_container = Subject::handles_container;
+        typedef Subject subject_type;
+
+        raw_directive(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+            , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            x3::skip_over(first, last, context);
+            Iterator i = first;
+            if (this->subject.parse(i, last, context, rcontext, unused))
+            {
+                traits::move_to(first, i, attr);
+                first = i;
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Context, typename RContext>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, unused_type) const
+        {
+            return this->subject.parse(first, last, context, rcontext, unused);
+        }
+    };
+
+    struct raw_gen
+    {
+        template <typename Subject>
+        raw_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    raw_gen const raw = raw_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/skip.hpp
new file mode 100644 (file)
index 0000000..c880720
--- /dev/null
@@ -0,0 +1,124 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SKIP_JANUARY_26_2008_0422PM)
+#define SPIRIT_SKIP_JANUARY_26_2008_0422PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct reskip_directive : unary_parser<Subject, reskip_directive<Subject>>
+    {
+        typedef unary_parser<Subject, reskip_directive<Subject>> base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        reskip_directive(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename disable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            auto const& skipper =
+                detail::get_unused_skipper(x3::get<skipper_tag>(context));
+
+            return this->subject.parse(
+                first, last
+              , make_context<skipper_tag>(skipper, context)
+              , rcontext
+              , attr);
+        }
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        typename enable_if<has_skipper<Context>, bool>::type
+        parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            return this->subject.parse(
+                first, last
+              , context
+              , rcontext
+              , attr);
+        }
+    };
+
+    template <typename Subject, typename Skipper>
+    struct skip_directive : unary_parser<Subject, skip_directive<Subject, Skipper>>
+    {
+        typedef unary_parser<Subject, skip_directive<Subject, Skipper>> base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        skip_directive(Subject const& subject, Skipper const& skipper)
+          : base_type(subject)
+          , skipper(skipper)
+        {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            return this->subject.parse(
+                first, last
+              , make_context<skipper_tag>(skipper, context)
+              , rcontext
+              , attr);
+        }
+
+        Skipper const skipper;
+    };
+
+    struct reskip_gen
+    {
+        template <typename Skipper>
+        struct skip_gen
+        {
+            explicit skip_gen(Skipper const& skipper)
+              : skipper_(skipper) {}
+
+            template <typename Subject>
+            skip_directive<typename extension::as_parser<Subject>::value_type, Skipper>
+            operator[](Subject const& subject) const
+            {
+                return {as_parser(subject), skipper_};
+            }
+
+            Skipper skipper_;
+        };
+        
+        template <typename Skipper>
+        skip_gen<Skipper> const operator()(Skipper const& skipper) const
+        {
+            return skip_gen<Skipper>(skipper);
+        }
+
+        template <typename Subject>
+        reskip_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    reskip_gen const skip = reskip_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/with.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/directive/with.hpp
new file mode 100644 (file)
index 0000000..cc6c442
--- /dev/null
@@ -0,0 +1,107 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_X3_WITH_MAY_02_2014_0749AM)
+#define SPIRIT_X3_WITH_MAY_02_2014_0749AM
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // with directive injects a value into the context prior to parsing.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Derived, typename T>
+    struct with_value_holder
+      : unary_parser<Subject, Derived>
+    {
+        typedef unary_parser<Subject, Derived> base_type;
+        mutable T val;
+        with_value_holder(Subject const& subject, T const& val)
+          : base_type(subject)
+          , val(val) {}
+    };
+    
+    template <typename Subject, typename Derived, typename T>
+    struct with_value_holder<Subject, Derived, T const>
+      : unary_parser<Subject, Derived>
+    {
+        typedef unary_parser<Subject, Derived> base_type;
+        T val;
+        with_value_holder(Subject const& subject, T const& val)
+          : base_type(subject)
+          , val(val) {}
+    };
+
+    template <typename Subject, typename ID, typename T>
+    struct with_directive
+      : with_value_holder<Subject, with_directive<Subject, ID, T>, T>
+    {
+        typedef with_value_holder<Subject, with_directive<Subject, ID, T>, T> base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        typedef Subject subject_type;
+
+        with_directive(Subject const& subject, T const& val)
+          : base_type(subject, val) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            return this->subject.parse(
+                first, last
+              , make_context<ID>(this->val, context)
+              , rcontext
+              , attr);
+        }
+    };
+   
+    template <typename ID, typename T, typename NextContext = unused_type>
+    struct with_context
+    {
+        typedef context<ID, T, NextContext> type;
+    };
+    
+    template <typename ID, typename T>
+    struct with_context<ID, T, unused_type>
+    {
+        typedef context<ID, T> const type;
+    };
+
+    template <typename ID, typename T>
+    struct with_gen
+    {
+        T& val;
+
+        with_gen(T& val)
+          : val(val) {}
+
+        template <typename Subject>
+        with_directive<typename extension::as_parser<Subject>::value_type, ID, T>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject), val};
+        }
+    };
+
+    template <typename ID, typename T>
+    inline with_gen<ID, T> with(T& val)
+    {
+        return with_gen<ID, T>{val};
+    }
+    
+    template <typename ID, typename T>
+    inline with_gen<ID, T const> with(T const& val)
+    {
+        return with_gen<ID, T const>{val};
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions.hpp
new file mode 100644 (file)
index 0000000..a40b719
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2014 Thomas Bernard
+    Copyright (c) 2014 Lee Clagett
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EXTENSIONS_APRIL_6_2014_1421PM)
+#define BOOST_SPIRIT_X3_EXTENSIONS_APRIL_6_2014_1421PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/extensions/seek.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions/seek.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/extensions/seek.hpp
new file mode 100644 (file)
index 0000000..bcd9544
--- /dev/null
@@ -0,0 +1,70 @@
+/*=============================================================================
+    Copyright (c) 2011 Jamboree
+    Copyright (c) 2014 Lee Clagett
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SEEK_APRIL_13_2014_1920PM)
+#define BOOST_SPIRIT_X3_SEEK_APRIL_13_2014_1920PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template<typename Subject>
+    struct seek_directive : unary_parser<Subject, seek_directive<Subject>>
+    {
+        typedef unary_parser<Subject, seek_directive<Subject>> base_type;
+        static bool const is_pass_through_unary = true;
+        static bool const handles_container = Subject::handles_container;
+
+        seek_directive(Subject const& subject) :
+            base_type(subject) {}
+
+        template<typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            Iterator current(first);
+            for (/**/; current != last; ++current)
+            {
+                if (this->subject.parse(current, last, context, rcontext, attr))
+                {
+                    first = current;
+                    return true;
+                }
+            }
+
+            // Test for when subjects match on input empty. Example:
+            //     comment = "//" >> seek[eol | eoi]
+            if (this->subject.parse(current, last, context, rcontext, attr))
+            {
+                first = current;
+                return true;
+            }
+
+            return false;
+        }
+    };
+
+    struct seek_gen
+    {
+        template<typename Subject>
+        seek_directive<typename extension::as_parser<Subject>::value_type>
+        operator[](Subject const& subject) const
+        {
+            return {as_parser(subject)};
+        }
+    };
+
+    seek_gen const seek = seek_gen();
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal.hpp
new file mode 100644 (file)
index 0000000..1e589bd
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_NONTERMINAL_FEBRUARY_12_2007_1018AM)
+#define BOOST_SPIRIT_X3_NONTERMINAL_FEBRUARY_12_2007_1018AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/nonterminal/rule.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/error_handler.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/debug_handler.hpp>
+//~ #include <boost/spirit/home/x3/nonterminal/success_handler.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/debug_handler_state.hpp
new file mode 100644 (file)
index 0000000..800023f
--- /dev/null
@@ -0,0 +1,24 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_DEBUG_HANDLER_STATE_APR_21_2010_0733PM)
+#define BOOST_SPIRIT_X3_DEBUG_HANDLER_STATE_APR_21_2010_0733PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    enum debug_handler_state
+    {
+        pre_parse
+      , successful_parse
+      , failed_parse
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp
new file mode 100644 (file)
index 0000000..54e2eef
--- /dev/null
@@ -0,0 +1,385 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_DETAIL_RULE_JAN_08_2012_0326PM)
+#define BOOST_SPIRIT_X3_DETAIL_RULE_JAN_08_2012_0326PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp>
+#include <boost/utility/addressof.hpp>
+
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+#include <boost/spirit/home/x3/nonterminal/simple_trace.hpp>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename ID>
+    struct identity;
+    
+    template <typename ID, typename Attribute = unused_type>
+    struct rule;
+
+    struct parse_pass_context_tag;
+
+    namespace detail
+    {
+        // we use this so we can detect if the default parse_rule
+        // is the being called.
+        struct default_parse_rule_result
+        {
+            default_parse_rule_result(bool r)
+              : r(r) {}
+            operator bool() const { return r; }
+            bool r;
+        };
+    }
+    
+    // default parse_rule implementation
+    template <typename ID, typename Attribute, typename Iterator
+      , typename Context, typename ActualAttribute>
+    inline detail::default_parse_rule_result
+    parse_rule(
+        rule<ID, Attribute> rule_
+      , Iterator& first, Iterator const& last
+      , Context const& context, ActualAttribute& attr);
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+    template <typename Iterator, typename Attribute>
+    struct context_debug
+    {
+        context_debug(
+            char const* rule_name
+          , Iterator const& first, Iterator const& last
+          , Attribute const& attr
+          , bool const& ok_parse //was parse successful?
+          )
+          : ok_parse(ok_parse), rule_name(rule_name)
+          , first(first), last(last)
+          , attr(attr)
+          , f(detail::get_simple_trace())
+        {
+            f(first, last, attr, pre_parse, rule_name);
+        }
+
+        ~context_debug()
+        {
+            auto status = ok_parse ? successful_parse : failed_parse ;
+            f(first, last, attr, status, rule_name);
+        }
+
+        bool const& ok_parse;
+        char const* rule_name;
+        Iterator const& first;
+        Iterator const& last;
+        Attribute const& attr;
+        detail::simple_trace_type& f;
+    };
+#endif
+    
+    template <typename ID, typename Iterator, typename Context, typename Enable = void>
+    struct has_on_error : mpl::false_ {};
+
+    template <typename ID, typename Iterator, typename Context>
+    struct has_on_error<ID, Iterator, Context,
+        typename disable_if_substitution_failure<
+            decltype(
+                std::declval<ID>().on_error(
+                    std::declval<Iterator&>()
+                  , std::declval<Iterator>()
+                  , std::declval<expectation_failure<Iterator>>()
+                  , std::declval<Context>()
+                )
+            )>::type
+        >
+      : mpl::true_
+    {};
+    
+    template <typename ID, typename Iterator, typename Attribute, typename Context, typename Enable = void>
+    struct has_on_success : mpl::false_ {};
+
+    template <typename ID, typename Iterator, typename Attribute, typename Context>
+    struct has_on_success<ID, Iterator, Context, Attribute,
+        typename disable_if_substitution_failure<
+            decltype(
+                std::declval<ID>().on_success(
+                    std::declval<Iterator&>()
+                  , std::declval<Iterator>()
+                  , std::declval<Attribute&>()
+                  , std::declval<Context>()
+                )
+            )>::type
+        >
+      : mpl::true_
+    {};
+
+    template <typename ID>
+    struct make_id
+    {
+        typedef identity<ID> type;
+    };
+
+    template <typename ID>
+    struct make_id<identity<ID>>
+    {
+        typedef identity<ID> type;
+    };
+    
+    template <typename ID, typename RHS, typename Context>
+    Context const&
+    make_rule_context(RHS const& rhs, Context const& context
+      , mpl::false_ /* is_default_parse_rule */)
+    {
+        return context;
+    }
+    
+    template <typename ID, typename RHS, typename Context>
+    auto make_rule_context(RHS const& rhs, Context const& context
+      , mpl::true_ /* is_default_parse_rule */ )
+    {
+        return make_unique_context<ID>(rhs, context);
+    }
+
+    template <typename Attribute, typename ID>
+    struct rule_parser
+    {
+        template <typename Iterator, typename Context, typename ActualAttribute>
+        static bool call_on_success(
+            Iterator& first, Iterator const& last
+          , Context const& context, ActualAttribute& attr
+          , mpl::false_ /* No on_success handler */ )
+        {
+            return true;
+        }
+        
+        template <typename Iterator, typename Context, typename ActualAttribute>
+        static bool call_on_success(
+            Iterator& first, Iterator const& last
+          , Context const& context, ActualAttribute& attr
+          , mpl::true_ /* Has on_success handler */)
+        {
+            bool pass = true;
+            ID().on_success(
+                first
+              , last
+              , attr
+              , make_context<parse_pass_context_tag>(pass, context)
+            );
+            return pass;
+        }
+        
+        template <typename RHS, typename Iterator, typename Context
+          , typename RContext, typename ActualAttribute>
+        static bool parse_rhs_main(
+            RHS const& rhs
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, ActualAttribute& attr
+          , mpl::false_)
+        {
+            // see if the user has a BOOST_SPIRIT_DEFINE for this rule
+            typedef
+                decltype(parse_rule(
+                    rule<ID, Attribute>(), first, last
+                  , make_unique_context<ID>(rhs, context), attr))
+            parse_rule_result;
+
+            // If there is no BOOST_SPIRIT_DEFINE for this rule,
+            // we'll make a context for this rule tagged by its ID
+            // so we can extract the rule later on in the default
+            // (generic) parse_rule function.
+            typedef
+                is_same<parse_rule_result, default_parse_rule_result>
+            is_default_parse_rule;
+
+            Iterator i = first;
+            bool r = rhs.parse(
+                i
+              , last
+              , make_rule_context<ID>(rhs, context, is_default_parse_rule())
+              , rcontext
+              , attr
+            );
+
+            if (r)
+            {
+                auto first_ = first;
+                x3::skip_over(first_, last, context);
+                r = call_on_success(first_, i, context, attr
+                  , has_on_success<ID, Iterator, Context, ActualAttribute>());
+            }
+            
+            if (r)
+                first = i;
+            return r;
+        }
+
+        template <typename RHS, typename Iterator, typename Context
+          , typename RContext, typename ActualAttribute>
+        static bool parse_rhs_main(
+            RHS const& rhs
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, ActualAttribute& attr
+          , mpl::true_ /* on_error is found */)
+        {
+            for (;;)
+            {
+                try
+                {
+                    return parse_rhs_main(
+                        rhs, first, last, context, rcontext, attr, mpl::false_());
+                }
+                catch (expectation_failure<Iterator> const& x)
+                {
+                    switch (ID().on_error(first, last, x, context))
+                    {
+                        case error_handler_result::fail:
+                            return false;
+                        case error_handler_result::retry:
+                            continue;
+                        case error_handler_result::accept:
+                            return true;
+                        case error_handler_result::rethrow:
+                            throw;
+                    }
+                }
+            }
+        }
+
+        template <typename RHS, typename Iterator
+          , typename Context, typename RContext, typename ActualAttribute>
+        static bool parse_rhs_main(
+            RHS const& rhs
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, ActualAttribute& attr)
+        {
+            return parse_rhs_main(
+                rhs, first, last, context, rcontext, attr
+              , has_on_error<ID, Iterator, Context>()
+            );
+        }
+
+        template <typename RHS, typename Iterator
+          , typename Context, typename RContext, typename ActualAttribute>
+        static bool parse_rhs(
+            RHS const& rhs
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, ActualAttribute& attr
+          , mpl::false_)
+        {
+            return parse_rhs_main(rhs, first, last, context, rcontext, attr);
+        }
+
+        template <typename RHS, typename Iterator
+          , typename Context, typename RContext, typename ActualAttribute>
+        static bool parse_rhs(
+            RHS const& rhs
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, ActualAttribute& attr
+          , mpl::true_)
+        {
+            return parse_rhs_main(rhs, first, last, context, rcontext, unused);
+        }
+
+        template <typename RHS, typename Iterator, typename Context
+          , typename ActualAttribute, typename ExplicitAttrPropagation>
+        static bool call_rule_definition(
+            RHS const& rhs
+          , char const* rule_name
+          , Iterator& first, Iterator const& last
+          , Context const& context, ActualAttribute& attr
+          , ExplicitAttrPropagation)
+        {
+            typedef traits::make_attribute<Attribute, ActualAttribute> make_attribute;
+
+            // do down-stream transformation, provides attribute for
+            // rhs parser
+            typedef traits::transform_attribute<
+                typename make_attribute::type, Attribute, parser_id>
+            transform;
+
+            typedef typename make_attribute::value_type value_type;
+            typedef typename transform::type transform_attr;
+            value_type made_attr = make_attribute::call(attr);
+            transform_attr attr_ = transform::pre(made_attr);
+
+            bool ok_parse
+              //Creates a place to hold the result of parse_rhs
+              //called inside the following scope.
+              ;
+            {
+             //Create a scope to cause the dbg variable below (within
+             //the #if...#endif) to call it's DTOR before any
+             //modifications are made to the attribute, attr_ passed
+             //to parse_rhs (such as might be done in
+             //traits::post_transform when, for example,
+             //ActualAttribute is a recursive variant).
+#if defined(BOOST_SPIRIT_X3_DEBUG)
+                  context_debug<Iterator, typename make_attribute::value_type>
+                dbg(rule_name, first, last, attr_, ok_parse);
+#endif
+                ok_parse=parse_rhs(rhs, first, last, context, attr_, attr_
+                   , mpl::bool_
+                     < (  RHS::has_action 
+                       && !ExplicitAttrPropagation::value
+                       )
+                     >()
+                  );
+            }
+            if(ok_parse)
+            {
+                // do up-stream transformation, this integrates the results
+                // back into the original attribute value, if appropriate
+                traits::post_transform(attr, attr_);
+            }
+            return ok_parse;
+        }
+
+//        template <typename RuleDef, typename Iterator, typename Context
+//            , typename ActualAttribute, typename AttributeContext>
+//        static bool call_from_rule(
+//            RuleDef const& rule_def
+//          , char const* rule_name
+//          , Iterator& first, Iterator const& last
+//          , Context const& context, ActualAttribute& attr, AttributeContext& attr_ctx)
+//        {
+//            // This is called when a rule-body has already been established.
+//            // The rule body is already established by the rule_definition class,
+//            // we will not do it again. We'll simply call the RHS by calling
+//            // call_rule_definition.
+//
+//            return call_rule_definition(
+//                rule_def.rhs, rule_name, first, last
+//              , context, attr, attr_ctx.attr_ptr
+//              , mpl::bool_<(RuleDef::explicit_attribute_propagation)>());
+//        }
+//
+//        template <typename RuleDef, typename Iterator, typename Context
+//            , typename ActualAttribute>
+//        static bool call_from_rule(
+//            RuleDef const& rule_def
+//          , char const* rule_name
+//          , Iterator& first, Iterator const& last
+//          , Context const& context, ActualAttribute& attr, unused_type)
+//        {
+//            // This is called when a rule-body has *not yet* been established.
+//            // The rule body is established by the rule_definition class, so
+//            // we call it to parse and establish the rule-body.
+//
+//            return rule_def.parse(first, last, context, unused, attr); // $$$ fix unused param $$$
+//        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp
new file mode 100644 (file)
index 0000000..b1929f8
--- /dev/null
@@ -0,0 +1,108 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_X3_DETAIL_ATTRIBUTES_APR_18_2010_0458PM)
+#define SPIRIT_X3_DETAIL_ATTRIBUTES_APR_18_2010_0458PM
+
+#include <boost/spirit/home/x3/support/traits/transform_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+    struct parser_id;
+
+    template <typename Exposed, typename Transformed>
+    struct default_transform_attribute
+    {
+        typedef Transformed type;
+
+        static Transformed pre(Exposed&) { return Transformed(); }
+
+        static void post(Exposed& val, Transformed& attr)
+        {
+            traits::move_to(attr, val);
+        }
+    };
+
+    // handle case where no transformation is required as the types are the same
+    template <typename Attribute>
+    struct default_transform_attribute<Attribute, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+    };
+
+    // main specialization for x3
+    template <typename Exposed, typename Transformed, typename Enable = void>
+    struct transform_attribute
+      : default_transform_attribute<Exposed, Transformed> {};
+
+    // reference types need special handling
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute>
+    {
+        typedef Attribute& type;
+        static Attribute& pre(Attribute& val) { return val; }
+        static void post(Attribute&, Attribute const&) {}
+    };
+
+    // unused_type needs some special handling as well
+    template <>
+    struct transform_attribute<unused_type, unused_type>
+    {
+        typedef unused_type type;
+        static unused_type pre(unused_type) { return unused; }
+        static void post(unused_type, unused_type) {}
+    };
+
+    template <>
+    struct transform_attribute<unused_type const, unused_type>
+      : transform_attribute<unused_type, unused_type> {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type, Attribute>
+      : transform_attribute<unused_type, unused_type> {};
+
+    template <typename Attribute>
+    struct transform_attribute<unused_type const, Attribute>
+      : transform_attribute<unused_type, unused_type> {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute, unused_type>
+      : transform_attribute<unused_type, unused_type> {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute const, unused_type>
+      : transform_attribute<unused_type, unused_type> {};
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed, Transformed, x3::parser_id>
+      : x3::transform_attribute<Exposed, Transformed> {};
+
+    template <typename Exposed, typename Transformed>
+    struct transform_attribute<Exposed&, Transformed, x3::parser_id>
+      : transform_attribute<Exposed, Transformed, x3::parser_id> {};
+
+    template <typename Attribute>
+    struct transform_attribute<Attribute&, Attribute, x3::parser_id>
+      : x3::transform_attribute<Attribute&, Attribute> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed>
+    void post_transform(Exposed& dest, Transformed&& attr)
+    {
+        return transform_attribute<Exposed, Transformed, x3::parser_id>::post(dest, attr);
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/rule.hpp
new file mode 100644 (file)
index 0000000..049c6be
--- /dev/null
@@ -0,0 +1,186 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_RULE_JAN_08_2012_0326PM)
+#define BOOST_SPIRIT_X3_RULE_JAN_08_2012_0326PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/nonterminal/detail/rule.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/preprocessor/variadic/to_seq.hpp>
+#include <boost/preprocessor/variadic/elem.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+#include <typeinfo>
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename ID>
+    struct identity {};
+    
+    // default parse_rule implementation
+    template <typename ID, typename Attribute, typename Iterator
+      , typename Context, typename ActualAttribute>
+    inline detail::default_parse_rule_result
+    parse_rule(
+        rule<ID, Attribute> rule_
+      , Iterator& first, Iterator const& last
+      , Context const& context, ActualAttribute& attr)
+    {
+        static_assert(!is_same<decltype(get<ID>(context)), unused_type>::value,
+            "BOOST_SPIRIT_DEFINE undefined for this rule.");
+        return get<ID>(context).parse(first, last, context, unused, attr);
+    }
+
+    template <typename ID, typename RHS, typename Attribute, bool force_attribute_>
+    struct rule_definition : parser<rule_definition<ID, RHS, Attribute, force_attribute_>>
+    {
+        typedef rule_definition<ID, RHS, Attribute, force_attribute_> this_type;
+        typedef ID id;
+        typedef RHS rhs_type;
+        typedef rule<ID, Attribute> lhs_type;
+        typedef Attribute attribute_type;
+
+        static bool const has_attribute =
+            !is_same<Attribute, unused_type>::value;
+        static bool const handles_container =
+            traits::is_container<Attribute>::value;
+        static bool const force_attribute =
+            force_attribute_;
+
+        rule_definition(RHS rhs, char const* name)
+          : rhs(rhs), name(name) {}
+
+        template <typename Iterator, typename Context, typename Attribute_>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute_& attr) const
+        {
+            return detail::rule_parser<attribute_type, ID>
+                ::call_rule_definition(
+                    rhs, name, first, last
+                  , context
+                  , attr
+                  , mpl::bool_<force_attribute>());
+        }
+
+        RHS rhs;
+        char const* name;
+    };
+
+    template <typename ID, typename Attribute>
+    struct rule : parser<rule<ID, Attribute>>
+    {
+        typedef ID id;
+        typedef Attribute attribute_type;
+        static bool const has_attribute =
+            !is_same<Attribute, unused_type>::value;
+        static bool const handles_container =
+            traits::is_container<Attribute>::value;
+
+#if !defined(BOOST_SPIRIT_X3_NO_RTTI)
+        rule() : name(typeid(rule).name()) {}
+#else
+        rule() : name("unnamed") {}
+#endif
+
+        rule(char const* name)
+          : name(name) {}
+
+        template <typename RHS>
+        rule_definition<
+            ID, typename extension::as_parser<RHS>::value_type, Attribute, false>
+        operator=(RHS const& rhs) const
+        {
+            return {as_parser(rhs), name};
+        }
+
+        template <typename RHS>
+        rule_definition<
+            ID, typename extension::as_parser<RHS>::value_type, Attribute, true>
+        operator%=(RHS const& rhs) const
+        {
+            return {as_parser(rhs), name};
+        }
+
+
+        template <typename Iterator, typename Context, typename Attribute_>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute_& attr) const
+        {
+            return parse_rule(*this, first, last, context, attr);
+        }
+
+        char const* name;
+    };
+    
+    namespace traits
+    {
+        template <typename T, typename Enable = void>
+        struct is_rule : mpl::false_ {};
+    
+        template <typename ID, typename Attribute>
+        struct is_rule<rule<ID, Attribute>> : mpl::true_ {};
+        
+        template <typename ID, typename Attribute, typename RHS, bool force_attribute>
+        struct is_rule<rule_definition<ID, RHS, Attribute, force_attribute>> : mpl::true_ {};
+    }
+
+    template <typename T>
+    struct get_info<T, typename enable_if<traits::is_rule<T>>::type>
+    {
+        typedef std::string result_type;
+        std::string operator()(T const& r) const
+        {
+            return r.name;
+        }
+    };
+    
+#define BOOST_SPIRIT_DECLARE_(r, data, rule_type)                               \
+    template <typename Iterator, typename Context, typename Attribute>          \
+    bool parse_rule(                                                            \
+        rule_type rule_                                                         \
+      , Iterator& first, Iterator const& last                                   \
+      , Context const& context, Attribute& attr);                               \
+    /***/
+
+#define BOOST_SPIRIT_DECLARE(...) BOOST_PP_SEQ_FOR_EACH(                        \
+    BOOST_SPIRIT_DECLARE_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))            \
+    /***/
+    
+#define BOOST_SPIRIT_DEFINE_(r, data, def)                                      \
+    template <typename Iterator, typename Context, typename Attribute>          \
+    inline bool parse_rule(                                                     \
+        decltype(def)::lhs_type rule_                                           \
+      , Iterator& first, Iterator const& last                                   \
+      , Context const& context, Attribute& attr)                                \
+    {                                                                           \
+        using boost::spirit::x3::unused;                                        \
+        auto const& def_ = (def);                                               \
+        return def_.parse(first, last, context, unused, attr);                  \
+    }                                                                           \
+    /***/
+
+#define BOOST_SPIRIT_DEFINE(...) BOOST_PP_SEQ_FOR_EACH(                         \
+    BOOST_SPIRIT_DEFINE_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))             \
+    /***/
+
+#define BOOST_SPIRIT_INSTANTIATE(rule_type, Iterator, Context)                  \
+    template bool parse_rule<Iterator, Context, rule_type::attribute_type>(     \
+        rule_type rule_                                                         \
+      , Iterator& first, Iterator const& last                                   \
+      , Context const& context, rule_type::attribute_type& attr);               \
+    /***/
+
+    
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/simple_trace.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/nonterminal/simple_trace.hpp
new file mode 100644 (file)
index 0000000..b049b4e
--- /dev/null
@@ -0,0 +1,150 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SIMPLE_TRACE_DECEMBER_06_2008_1102AM)
+#define BOOST_SPIRIT_X3_SIMPLE_TRACE_DECEMBER_06_2008_1102AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/print_token.hpp>
+#include <boost/spirit/home/x3/support/traits/print_attribute.hpp>
+#include <boost/spirit/home/x3/nonterminal/debug_handler_state.hpp>
+#include <boost/fusion/include/out.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <ostream>
+
+//  The stream to use for debug output
+#if !defined(BOOST_SPIRIT_X3_DEBUG_OUT)
+#define BOOST_SPIRIT_X3_DEBUG_OUT std::cerr
+#endif
+
+//  number of tokens to print while debugging
+#if !defined(BOOST_SPIRIT_X3_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_X3_DEBUG_PRINT_SOME 20
+#endif
+
+//  number of spaces to indent
+#if !defined(BOOST_SPIRIT_X3_DEBUG_INDENT)
+#define BOOST_SPIRIT_X3_DEBUG_INDENT 2
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    namespace detail
+    {
+        template <typename Char>
+        inline void token_printer(std::ostream& o, Char c)
+        {
+            // allow customization of the token printer routine
+            x3::traits::print_token(o, c);
+        }
+    }
+
+    template <int IndentSpaces = 2, int CharsToPrint = 20>
+    struct simple_trace
+    {
+        simple_trace(std::ostream& out)
+          : out(out), indent(0) {}
+
+        void print_indent(int n) const
+        {
+            n *= IndentSpaces;
+            for (int i = 0; i != n; ++i)
+                out << ' ';
+        }
+
+        template <typename Iterator>
+        void print_some(
+            char const* tag
+          , Iterator first, Iterator const& last) const
+        {
+            print_indent(indent);
+            out << '<' << tag << '>';
+            int const n = CharsToPrint;
+            for (int i = 0; first != last && i != n && *first; ++i, ++first)
+                detail::token_printer(out, *first);
+            out << "</" << tag << '>' << std::endl;
+
+            // $$$ FIXME convert invalid xml characters (e.g. '<') to valid
+            // character entities. $$$
+        }
+
+        template <typename Iterator, typename Attribute, typename State>
+        void operator()(
+            Iterator const& first
+          , Iterator const& last
+          , Attribute const& attr
+          , State state
+          , std::string const& rule_name) const
+        {
+            switch (state)
+            {
+                case pre_parse:
+                    print_indent(indent++);
+                    out
+                        << '<' << rule_name << '>'
+                        << std::endl;
+                    print_some("try", first, last);
+                    break;
+
+                case successful_parse:
+                    print_some("success", first, last);
+                    if (!is_same<Attribute, unused_type>::value)
+                    {
+                        print_indent(indent);
+                        out
+                            << "<attributes>";
+                        traits::print_attribute(out, attr);
+                        out
+                            << "</attributes>";
+                        out << std::endl;
+                    }
+                    //~ if (!fusion::empty(context.locals))
+                        //~ out
+                            //~ << "<locals>"
+                            //~ << context.locals
+                            //~ << "</locals>";
+                    print_indent(--indent);
+                    out
+                        << "</" << rule_name << '>'
+                        << std::endl;
+                    break;
+
+                case failed_parse:
+                    print_indent(indent);
+                    out << "<fail/>" << std::endl;
+                    print_indent(--indent);
+                    out
+                        << "</" << rule_name << '>'
+                        << std::endl;
+                    break;
+            }
+        }
+
+        std::ostream& out;
+        mutable int indent;
+    };
+
+    namespace detail
+    {
+        typedef simple_trace<
+            BOOST_SPIRIT_X3_DEBUG_INDENT, BOOST_SPIRIT_X3_DEBUG_PRINT_SOME>
+        simple_trace_type;
+
+        inline simple_trace_type&
+        get_simple_trace()
+        {
+            static simple_trace_type tracer(BOOST_SPIRIT_X3_DEBUG_OUT);
+            return tracer;
+        }
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric.hpp
new file mode 100644 (file)
index 0000000..c44d668
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_NUMERIC_FEBRUARY_05_2007_1231PM)
+#define BOOST_SPIRIT_X3_NUMERIC_FEBRUARY_05_2007_1231PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/numeric/bool.hpp>
+#include <boost/spirit/home/x3/numeric/int.hpp>
+#include <boost/spirit/home/x3/numeric/uint.hpp>
+#include <boost/spirit/home/x3/numeric/real.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool.hpp
new file mode 100644 (file)
index 0000000..1fb21c1
--- /dev/null
@@ -0,0 +1,106 @@
+/*=============================================================================
+    Copyright (c) 2009  Hartmut Kaiser
+    Copyright (c) 2014  Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_X3_BOOL_SEP_29_2009_0709AM)
+#define SPIRIT_X3_BOOL_SEP_29_2009_0709AM
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/numeric/bool_policies.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T, typename BoolPolicies = bool_policies<T>>
+    struct bool_parser : parser<bool_parser<T, BoolPolicies>>
+    {
+        typedef T attribute_type;
+        static bool const has_attribute = true;
+
+        bool_parser()
+               : policies() {}
+
+        bool_parser(BoolPolicies const& policies)
+               : policies(policies) {}
+
+        template <typename Iterator, typename Context>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, T& attr) const
+        {
+            x3::skip_over(first, last, context);
+            return policies.parse_true(first, last, attr)
+                || policies.parse_false(first, last, attr);
+        }
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, Attribute& attr_param) const
+        {
+            // this case is called when Attribute is not T
+            T attr_;
+            if (parse(first, last, context, unused, attr_))
+            {
+                traits::move_to(attr_, attr_param);
+                return true;
+            }
+            return false;
+        }
+
+        BoolPolicies policies;
+    };
+
+    template <typename T, typename BoolPolicies = bool_policies<T>>
+    struct literal_bool_parser : parser<bool_parser<T, BoolPolicies>>
+    {
+        typedef T attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Value>
+        literal_bool_parser(Value const& n)
+               : policies(), n_(n) {}
+
+        template <typename Value>
+        literal_bool_parser(Value const& n, BoolPolicies const& policies)
+               : policies(policies), n_(n) {}
+
+        template <typename Iterator, typename Context>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, T& attr) const
+        {
+            x3::skip_over(first, last, context);
+            return (n_ && policies.parse_true(first, last, attr))
+                || (!n_ && policies.parse_false(first, last, attr));
+        }
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, Attribute& attr_param) const
+        {
+            // this case is called when Attribute is not T
+            T attr_;
+            if (parse(first, last, context, unused, attr_))
+            {
+                traits::move_to(attr_, attr_param);
+                return true;
+            }
+            return false;
+        }
+
+        BoolPolicies policies;
+        T n_;
+    };
+
+    typedef bool_parser<bool> bool_type;
+    bool_type const bool_ = {};
+
+    typedef literal_bool_parser<bool> true_type;
+    true_type const true_ = { true };
+
+    typedef literal_bool_parser<bool> false_type;
+    false_type const false_ = { false };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/bool_policies.hpp
new file mode 100644 (file)
index 0000000..bafc5b5
--- /dev/null
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2009  Hartmut Kaiser
+    Copyright (c) 2014  Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM)
+#define SPIRIT_QI_BOOL_POLICIES_SEP_29_2009_0710AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default boolean policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T = bool>
+    struct bool_policies
+    {
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_true(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("true", first, last, unused))
+            {
+                traits::move_to(T(true), attr_);    // result is true
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_false(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (detail::string_parse("false", first, last, unused))
+            {
+                traits::move_to(T(false), attr_);   // result is false
+                return true;
+            }
+            return false;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/int.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/int.hpp
new file mode 100644 (file)
index 0000000..ba9ceb8
--- /dev/null
@@ -0,0 +1,66 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_INT_APR_17_2006_0830AM)
+#define BOOST_SPIRIT_X3_INT_APR_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+#include <cstdint>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T
+      , unsigned Radix = 10
+      , unsigned MinDigits = 1
+      , int MaxDigits = -1>
+    struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits>>
+    {
+        // check template parameter 'Radix' for validity
+        static_assert(
+            (Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16),
+            "Error Unsupported Radix");
+
+        typedef T attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute& attr) const
+        {
+            typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
+            x3::skip_over(first, last, context);
+            return extract::call(first, last, attr);
+        }
+    };
+
+#define BOOST_SPIRIT_X3_INT_PARSER(int_type, name)                              \
+    typedef int_parser<int_type> name##type;                                    \
+    name##type const name = {};                                                 \
+    /***/
+
+    BOOST_SPIRIT_X3_INT_PARSER(long, long_)
+    BOOST_SPIRIT_X3_INT_PARSER(short, short_)
+    BOOST_SPIRIT_X3_INT_PARSER(int, int_)
+    BOOST_SPIRIT_X3_INT_PARSER(long long, long_long)
+
+    BOOST_SPIRIT_X3_INT_PARSER(int8_t, int8)
+    BOOST_SPIRIT_X3_INT_PARSER(int16_t, int16)
+    BOOST_SPIRIT_X3_INT_PARSER(int32_t, int32)
+    BOOST_SPIRIT_X3_INT_PARSER(int64_t, int64)
+
+#undef BOOST_SPIRIT_X3_INT_PARSER
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real.hpp
new file mode 100644 (file)
index 0000000..91da536
--- /dev/null
@@ -0,0 +1,62 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_REAL_APRIL_18_2006_0850AM)
+#define BOOST_SPIRIT_X3_REAL_APRIL_18_2006_0850AM
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/numeric/real_policies.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_real.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T, typename RealPolicies = real_policies<T> >
+    struct real_parser : parser<real_parser<T, RealPolicies> >
+    {
+        typedef T attribute_type;
+        static bool const has_attribute = true;
+
+        real_parser()
+               : policies() {}
+
+        real_parser(RealPolicies const& policies)
+               : policies(policies) {}
+
+        template <typename Iterator, typename Context>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, T& attr_) const
+        {
+            x3::skip_over(first, last, context);
+            return extract_real<T, RealPolicies>::parse(first, last, attr_, policies);
+        }
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, unused_type, Attribute& attr_param) const
+        {
+            // this case is called when Attribute is not T
+            T attr_;
+            if (parse(first, last, context, unused, attr_))
+            {
+                traits::move_to(attr_, attr_param);
+                return true;
+            }
+            return false;
+        }
+
+        RealPolicies policies;
+    };
+
+    typedef real_parser<float> float_type;
+    float_type const float_ = {};
+
+    typedef real_parser<double> double_type;
+    double_type const double_ = {};
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real_policies.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/real_policies.hpp
new file mode 100644 (file)
index 0000000..4e02b26
--- /dev/null
@@ -0,0 +1,186 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM)
+#define SPIRIT_REAL_POLICIES_APRIL_17_2006_1158PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default (unsigned) real number policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct ureal_policies
+    {
+        // trailing dot policy suggested by Gustavo Guerra
+        static bool const allow_leading_dot = true;
+        static bool const allow_trailing_dot = true;
+        static bool const expect_dot = false;
+
+        template <typename Iterator>
+        static bool
+        parse_sign(Iterator& /*first*/, Iterator const& /*last*/)
+        {
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_n(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            return extract_uint<T, 10, 1, -1>::call(first, last, attr_);
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_dot(Iterator& first, Iterator const& last)
+        {
+            if (first == last || *first != '.')
+                return false;
+            ++first;
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_frac_n(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            return extract_uint<T, 10, 1, -1, true>::call(first, last, attr_);
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_exp(Iterator& first, Iterator const& last)
+        {
+            if (first == last || (*first != 'e' && *first != 'E'))
+                return false;
+            ++first;
+            return true;
+        }
+
+        template <typename Iterator>
+        static bool
+        parse_exp_n(Iterator& first, Iterator const& last, int& attr_)
+        {
+            return extract_int<int, 10, 1, -1>::call(first, last, attr_);
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        //  The parse_nan() and parse_inf() functions get called whenever:
+        //
+        //    - a number to parse does not start with a digit (after having
+        //      successfully parsed an optional sign)
+        //
+        //  or
+        //
+        //    - after a floating point number of the value 1 (having no
+        //      exponential part and a fractional part value of 0) has been
+        //      parsed.
+        //
+        //  The first call allows to recognize representations of NaN or Inf
+        //  starting with a non-digit character (such as NaN, Inf, QNaN etc.).
+        //
+        //  The second call allows to recognize representation formats starting
+        //  with a 1.0 (such as 1.0#NAN or 1.0#INF etc.).
+        //
+        //  The functions should return true if a Nan or Inf has been found. In
+        //  this case the attr should be set to the matched value (NaN or
+        //  Inf). The optional sign will be automatically applied afterwards.
+        //
+        //  The default implementation below recognizes representations of NaN
+        //  and Inf as mandated by the C99 Standard and as proposed for
+        //  inclusion into the C++0x Standard: nan, nan(...), inf and infinity
+        //  (the matching is performed case-insensitively).
+        ///////////////////////////////////////////////////////////////////////
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_nan(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (first == last)
+                return false;   // end of input reached
+
+            if (*first != 'n' && *first != 'N')
+                return false;   // not "nan"
+
+            // nan[(...)] ?
+            if (detail::string_parse("nan", "NAN", first, last, unused))
+            {
+                if (*first == '(')
+                {
+                    // skip trailing (...) part
+                    Iterator i = first;
+
+                    while (++i != last && *i != ')')
+                        ;
+                    if (i == last)
+                        return false;     // no trailing ')' found, give up
+
+                    first = ++i;
+                }
+                attr_ = std::numeric_limits<T>::quiet_NaN();
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse_inf(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            if (first == last)
+                return false;   // end of input reached
+
+            if (*first != 'i' && *first != 'I')
+                return false;   // not "inf"
+
+            // inf or infinity ?
+            if (detail::string_parse("inf", "INF", first, last, unused))
+            {
+                // skip allowed 'inity' part of infinity
+                detail::string_parse("inity", "INITY", first, last, unused);
+                attr_ = std::numeric_limits<T>::infinity();
+                return true;
+            }
+            return false;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Default (signed) real number policies
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct real_policies : ureal_policies<T>
+    {
+        template <typename Iterator>
+        static bool
+        parse_sign(Iterator& first, Iterator const& last)
+        {
+            return extract_sign(first, last);
+        }
+    };
+
+    template <typename T>
+    struct strict_ureal_policies : ureal_policies<T>
+    {
+        static bool const expect_dot = true;
+    };
+
+    template <typename T>
+    struct strict_real_policies : real_policies<T>
+    {
+        static bool const expect_dot = true;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/uint.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/numeric/uint.hpp
new file mode 100644 (file)
index 0000000..624bae5
--- /dev/null
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2011 Jan Frederick Eick
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_UINT_APR_17_2006_0901AM)
+#define BOOST_SPIRIT_X3_UINT_APR_17_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+#include <cstdint>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        typename T
+      , unsigned Radix = 10
+      , unsigned MinDigits = 1
+      , int MaxDigits = -1>
+    struct uint_parser : parser<uint_parser<T, Radix, MinDigits, MaxDigits>>
+    {
+        // check template parameter 'Radix' for validity
+        static_assert(
+            (Radix >= 2 && Radix <= 36),
+            "Error Unsupported Radix");
+
+        typedef T attribute_type;
+        static bool const has_attribute = true;
+
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute& attr) const
+        {
+            typedef extract_uint<T, Radix, MinDigits, MaxDigits> extract;
+            x3::skip_over(first, last, context);
+            return extract::call(first, last, attr);
+        }
+    };
+
+#define BOOST_SPIRIT_X3_UINT_PARSER(uint_type, name)                            \
+    typedef uint_parser<uint_type> name##type;                                  \
+    name##type const name = {};                                                 \
+    /***/
+
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned long, ulong_)
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned short, ushort_)
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned int, uint_)
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned long long, ulong_long)
+
+    BOOST_SPIRIT_X3_UINT_PARSER(uint8_t, uint8)
+    BOOST_SPIRIT_X3_UINT_PARSER(uint16_t, uint16)
+    BOOST_SPIRIT_X3_UINT_PARSER(uint32_t, uint32)
+    BOOST_SPIRIT_X3_UINT_PARSER(uint64_t, uint64)
+
+#undef BOOST_SPIRIT_X3_UINT_PARSER
+
+#define BOOST_SPIRIT_X3_UINT_PARSER(uint_type, radix, name)                     \
+    typedef uint_parser<uint_type, radix> name##type;                           \
+    name##type const name = name##type();                                       \
+    /***/
+
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 2, bin)
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 8, oct)
+    BOOST_SPIRIT_X3_UINT_PARSER(unsigned, 16, hex)
+
+#undef BOOST_SPIRIT_X3_UINT_PARSER
+
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator.hpp
new file mode 100644 (file)
index 0000000..1244e2f
--- /dev/null
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_OPERATOR_FEBRUARY_02_2007_0558PM)
+#define BOOST_SPIRIT_X3_OPERATOR_FEBRUARY_02_2007_0558PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/operator/sequence.hpp>
+#include <boost/spirit/home/x3/operator/alternative.hpp>
+//~ #include <boost/spirit/home/x3/operator/sequential_or.hpp>
+//~ #include <boost/spirit/home/x3/operator/permutation.hpp>
+#include <boost/spirit/home/x3/operator/difference.hpp>
+#include <boost/spirit/home/x3/operator/list.hpp>
+#include <boost/spirit/home/x3/operator/optional.hpp>
+#include <boost/spirit/home/x3/operator/kleene.hpp>
+#include <boost/spirit/home/x3/operator/plus.hpp>
+#include <boost/spirit/home/x3/operator/and_predicate.hpp>
+#include <boost/spirit/home/x3/operator/not_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/alternative.hpp
new file mode 100644 (file)
index 0000000..1566780
--- /dev/null
@@ -0,0 +1,68 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ALTERNATIVE_JAN_07_2013_1131AM)
+#define SPIRIT_ALTERNATIVE_JAN_07_2013_1131AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/operator/detail/alternative.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct alternative : binary_parser<Left, Right, alternative<Left, Right>>
+    {
+        typedef binary_parser<Left, Right, alternative<Left, Right>> base_type;
+
+        alternative(Left left, Right right)
+            : base_type(left, right) {}
+
+        template <typename Iterator, typename Context, typename RContext>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, unused_type) const
+        {
+            return this->left.parse(first, last, context, rcontext, unused)
+               || this->right.parse(first, last, context, rcontext, unused);
+        }
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            if (detail::parse_alternative(this->left, first, last, context, rcontext, attr))
+                return true;
+            if (detail::parse_alternative(this->right, first, last, context, rcontext, attr))
+                return true;
+            return false;
+        }
+    };
+
+    template <typename Left, typename Right>
+    inline alternative<
+        typename extension::as_parser<Left>::value_type
+      , typename extension::as_parser<Right>::value_type>
+    operator|(Left const& left, Right const& right)
+    {
+        return {as_parser(left), as_parser(right)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Left, typename Right, typename Context>
+    struct attribute_of<x3::alternative<Left, Right>, Context>
+        : x3::detail::attribute_of_alternative<Left, Right, Context> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/and_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/and_predicate.hpp
new file mode 100644 (file)
index 0000000..e0892cd
--- /dev/null
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM)
+#define SPIRIT_AND_PREDICATE_MARCH_23_2007_0617PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct and_predicate : unary_parser<Subject, and_predicate<Subject>>
+    {
+        typedef unary_parser<Subject, and_predicate<Subject>> base_type;
+
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        and_predicate(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& /*attr*/) const
+        {
+            Iterator i = first;
+            return this->subject.parse(i, last, context, rcontext, unused);
+        }
+    };
+
+    template <typename Subject>
+    inline and_predicate<typename extension::as_parser<Subject>::value_type>
+    operator&(Subject const& subject)
+    {
+        return {as_parser(subject)};
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/alternative.hpp
new file mode 100644 (file)
index 0000000..54f86e0
--- /dev/null
@@ -0,0 +1,317 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_ALTERNATIVE_DETAIL_JAN_07_2013_1245PM)
+#define SPIRIT_ALTERNATIVE_DETAIL_JAN_07_2013_1245PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+#include <boost/spirit/home/x3/support/traits/tuple_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_has_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_find_substitute.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/variant/variant.hpp>
+
+#include <boost/mpl/copy_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/joint_view.hpp>
+
+#include <boost/fusion/include/front.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct alternative;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    struct pass_variant_unused
+    {
+        typedef unused_type type;
+
+        template <typename T>
+        static unused_type
+        call(T&)
+        {
+            return unused_type();
+        }
+    };
+
+    template <typename Attribute>
+    struct pass_variant_used
+    {
+        typedef Attribute& type;
+
+        static Attribute&
+        call(Attribute& v)
+        {
+            return v;
+        }
+    };
+
+    template <>
+    struct pass_variant_used<unused_type> : pass_variant_unused {};
+
+    template <typename Parser, typename Attribute, typename Context
+      , typename Enable = void>
+    struct pass_parser_attribute
+    {
+        typedef typename
+            traits::attribute_of<Parser, Context>::type
+        attribute_type;
+        typedef typename
+            traits::variant_find_substitute<Attribute, attribute_type>::type
+        substitute_type;
+
+        typedef typename
+            mpl::if_<
+                is_same<Attribute, substitute_type>
+              , Attribute&
+              , substitute_type
+            >::type
+        type;
+
+        template <typename Attribute_>
+        static Attribute_&
+        call(Attribute_& attr, mpl::true_)
+        {
+            return attr;
+        }
+
+        template <typename Attribute_>
+        static type
+        call(Attribute_&, mpl::false_)
+        {
+            return type();
+        }
+
+        template <typename Attribute_>
+        static type
+        call(Attribute_& attr)
+        {
+            return call(attr, is_same<Attribute_, typename remove_reference<type>::type>());
+        }
+    };
+
+    // Pass non-variant attributes as-is
+    template <typename Parser, typename Attribute, typename Context
+      , typename Enable = void>
+    struct pass_non_variant_attribute
+    {
+        typedef Attribute& type;
+
+        static Attribute&
+        call(Attribute& attr)
+        {
+            return attr;
+        }
+    };
+
+    // Unwrap single element sequences
+    template <typename Parser, typename Attribute, typename Context>
+    struct pass_non_variant_attribute<Parser, Attribute, Context,
+        typename enable_if<traits::is_size_one_sequence<Attribute>>::type>
+    {
+        typedef typename remove_reference<
+            typename fusion::result_of::front<Attribute>::type>::type
+        attr_type;
+
+        typedef pass_parser_attribute<Parser, attr_type, Context> pass;
+        typedef typename pass::type type;
+
+        template <typename Attribute_>
+        static type
+        call(Attribute_& attr)
+        {
+            return pass::call(fusion::front(attr));
+        }
+    };
+
+    template <typename Parser, typename Attribute, typename Context>
+    struct pass_parser_attribute<Parser, Attribute, Context,
+        typename enable_if_c<(!traits::is_variant<Attribute>::value)>::type>
+        : pass_non_variant_attribute<Parser, Attribute, Context>
+    {};
+
+    template <typename Parser, typename Context>
+    struct pass_parser_attribute<Parser, unused_type, Context>
+        : pass_variant_unused {};
+
+    template <typename Parser, typename Attribute, typename Context>
+    struct pass_variant_attribute :
+        mpl::if_c<traits::has_attribute<Parser, Context>::value
+          , pass_parser_attribute<Parser, Attribute, Context>
+          , pass_variant_unused>::type
+    {
+        typedef typename mpl::false_ is_alternative;
+    };
+
+    template <typename L, typename R, typename Attribute, typename Context>
+    struct pass_variant_attribute<alternative<L, R>, Attribute, Context> :
+        mpl::if_c<traits::has_attribute<alternative<L, R>, Context>::value
+          , pass_variant_used<Attribute>
+          , pass_variant_unused>::type
+    {
+        typedef typename mpl::true_ is_alternative;
+    };
+
+    template <typename L, typename R, typename C>
+    struct get_alternative_types
+    {
+        typedef
+            mpl::vector<
+                typename traits::attribute_of<L, C>::type
+              , typename traits::attribute_of<R, C>::type
+            >
+        type;
+    };
+
+    template <typename LL, typename LR, typename R, typename C>
+    struct get_alternative_types<alternative<LL, LR>, R, C>
+    {
+        typedef typename
+            mpl::push_back<
+                typename get_alternative_types<LL, LR, C>::type
+              , typename traits::attribute_of<R, C>::type
+            >::type
+        type;
+    };
+
+    template <typename L, typename RL, typename RR, typename C>
+    struct get_alternative_types<L, alternative<RL, RR>, C>
+    {
+        typedef typename
+            mpl::push_front<
+                typename get_alternative_types<RL, RR, C>::type
+              , typename traits::attribute_of<L, C>::type
+            >::type
+        type;
+    };
+
+    template <typename LL, typename LR, typename RL, typename RR, typename C>
+    struct get_alternative_types<alternative<LL, LR>, alternative<RL, RR>, C>
+    {
+        typedef
+            mpl::joint_view<
+                typename get_alternative_types<LL, LR, C>::type
+              , typename get_alternative_types<RL, RR, C>::type
+            >
+        type;
+    };
+
+    template <typename L, typename R, typename C>
+    struct attribute_of_alternative
+    {
+        // Get all alternative attribute types
+        typedef typename get_alternative_types<L, R, C>::type all_types;
+
+        // Filter all unused_types
+        typedef typename
+            mpl::copy_if<
+                all_types
+              , mpl::not_<is_same<mpl::_1, unused_type>>
+              , mpl::back_inserter<mpl::vector<>>
+            >::type
+        filtered_types;
+
+        // Build a variant if filtered_types is not empty,
+        // else just return unused_type
+        typedef typename
+            mpl::eval_if<
+                mpl::empty<filtered_types>
+              , mpl::identity<unused_type>
+              , make_variant_over<filtered_types>
+            >::type
+        type;
+    };
+
+    template <typename IsAlternative>
+    struct move_if_not_alternative
+    {
+        template<typename T1, typename T2>
+        static void call(T1& attr_, T2& attr) {}
+    };
+
+    template <>
+    struct move_if_not_alternative<mpl::false_ /*is alternative*/>
+    {
+        template<typename T1, typename T2>
+        static void call(T1& attr_, T2& attr)
+        {
+            traits::move_to(attr_, attr);
+        }
+    };
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_alternative(Parser const& p, Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr)
+    {
+        typedef detail::pass_variant_attribute<Parser, Attribute, Context> pass;
+
+        typename pass::type attr_ = pass::call(attr);
+        if (p.parse(first, last, context, rcontext, attr_))
+        {
+            move_if_not_alternative<typename pass::is_alternative>::call(attr_, attr);
+            return true;
+        }
+        return false;
+    }
+
+
+    template <typename Left, typename Right, typename Context, typename RContext>
+    struct parse_into_container_impl<alternative<Left, Right>, Context, RContext>
+    {
+        typedef alternative<Left, Right> parser_type;
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+        {
+            return parse_alternative(parser, first, last, context, rcontext, attr);
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+        {
+            return parse_into_container_base_impl<parser_type>::call(
+                parser, first, last, context, rcontext, attr);
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr)
+        {
+            typedef typename
+                traits::attribute_of<parser_type, Context>::type
+            attribute_type;
+
+            return call(parser, first, last, context, rcontext, attr
+                , traits::variant_has_substitute<attribute_type, Attribute>());
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/detail/sequence.hpp
new file mode 100644 (file)
index 0000000..1163707
--- /dev/null
@@ -0,0 +1,501 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM)
+#define SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/make_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+#include <boost/fusion/include/begin.hpp>
+#include <boost/fusion/include/end.hpp>
+#include <boost/fusion/include/advance.hpp>
+#include <boost/fusion/include/empty.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/iterator_range.hpp>
+#include <boost/fusion/include/as_deque.hpp>
+#include <boost/fusion/include/mpl.hpp>
+
+#include <boost/mpl/copy_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct sequence;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    template <typename Parser, typename Context, typename Enable = void>
+    struct sequence_size
+    {
+        static int const value = traits::has_attribute<Parser, Context>::value;
+    };
+
+    template <typename Parser, typename Context>
+    struct sequence_size_subject
+      : sequence_size<typename Parser::subject_type, Context> {};
+
+    template <typename Parser, typename Context>
+    struct sequence_size<Parser, Context
+      , typename enable_if_c<(Parser::is_pass_through_unary)>::type>
+      : sequence_size_subject<Parser, Context> {};
+
+    template <typename L, typename R, typename Context>
+    struct sequence_size<sequence<L, R>, Context>
+    {
+        static int const value =
+            sequence_size<L, Context>::value +
+            sequence_size<R, Context>::value;
+    };
+
+    struct pass_sequence_attribute_unused
+    {
+        typedef unused_type type;
+
+        template <typename T>
+        static unused_type
+        call(T&)
+        {
+            return unused_type();
+        }
+    };
+
+    template <typename Attribute>
+    struct pass_sequence_attribute_front
+    {
+        typedef typename fusion::result_of::front<Attribute>::type type;
+
+        static typename add_reference<type>::type
+        call(Attribute& attr)
+        {
+            return fusion::front(attr);
+        }
+    };
+
+    template <typename Attribute>
+    struct pass_through_sequence_attribute
+    {
+        typedef Attribute& type;
+
+        template <typename Attribute_>
+        static Attribute_&
+        call(Attribute_& attr)
+        {
+            return attr;
+        }
+    };
+
+    template <typename Parser, typename Attribute>
+    struct pass_sequence_attribute_used :
+        mpl::if_<
+            traits::is_size_one_sequence<Attribute>
+          , pass_sequence_attribute_front<Attribute>
+          , pass_through_sequence_attribute<Attribute>>::type {};
+
+    template <typename Parser, typename Attribute, typename Enable = void>
+    struct pass_sequence_attribute :
+        mpl::if_<
+            fusion::result_of::empty<Attribute>
+          , pass_sequence_attribute_unused
+          , pass_sequence_attribute_used<Parser, Attribute>>::type {};
+
+    template <typename L, typename R, typename Attribute>
+    struct pass_sequence_attribute<sequence<L, R>, Attribute>
+      : pass_through_sequence_attribute<Attribute> {};
+
+    template <typename Parser, typename Attribute>
+    struct pass_sequence_attribute_subject :
+        pass_sequence_attribute<typename Parser::subject_type, Attribute> {};
+
+    template <typename Parser, typename Attribute>
+    struct pass_sequence_attribute<Parser, Attribute
+      , typename enable_if_c<(Parser::is_pass_through_unary)>::type>
+      : pass_sequence_attribute_subject<Parser, Attribute> {};
+
+    template <typename L, typename R, typename Attribute, typename Context
+      , typename Enable = void>
+    struct partition_attribute
+    {
+        static int const l_size = sequence_size<L, Context>::value;
+        static int const r_size = sequence_size<R, Context>::value;
+
+        // If you got an error here, then you are trying to pass
+        // a fusion sequence with the wrong number of elements
+        // as that expected by the (sequence) parser.
+        static_assert(
+            fusion::result_of::size<Attribute>::value == (l_size + r_size)
+          , "Attribute does not have the expected size."
+        );
+
+        typedef typename fusion::result_of::begin<Attribute>::type l_begin;
+        typedef typename fusion::result_of::advance_c<l_begin, l_size>::type l_end;
+        typedef typename fusion::result_of::end<Attribute>::type r_end;
+        typedef fusion::iterator_range<l_begin, l_end> l_part;
+        typedef fusion::iterator_range<l_end, r_end> r_part;
+        typedef pass_sequence_attribute<L, l_part> l_pass;
+        typedef pass_sequence_attribute<R, r_part> r_pass;
+
+        static l_part left(Attribute& s)
+        {
+            auto i = fusion::begin(s);
+            return l_part(i, fusion::advance_c<l_size>(i));
+        }
+
+        static r_part right(Attribute& s)
+        {
+            return r_part(
+                fusion::advance_c<l_size>(fusion::begin(s))
+              , fusion::end(s));
+        }
+    };
+
+    template <typename L, typename R, typename Attribute, typename Context>
+    struct partition_attribute<L, R, Attribute, Context,
+        typename enable_if_c<(!traits::has_attribute<L, Context>::value &&
+            traits::has_attribute<R, Context>::value)>::type>
+    {
+        typedef unused_type l_part;
+        typedef Attribute& r_part;
+        typedef pass_sequence_attribute_unused l_pass;
+        typedef pass_sequence_attribute<R, Attribute> r_pass;
+
+        static unused_type left(Attribute&)
+        {
+            return unused;
+        }
+
+        static Attribute& right(Attribute& s)
+        {
+            return s;
+        }
+    };
+
+    template <typename L, typename R, typename Attribute, typename Context>
+    struct partition_attribute<L, R, Attribute, Context,
+        typename enable_if_c<(traits::has_attribute<L, Context>::value &&
+            !traits::has_attribute<R, Context>::value)>::type>
+    {
+        typedef Attribute& l_part;
+        typedef unused_type r_part;
+        typedef pass_sequence_attribute<L, Attribute> l_pass;
+        typedef pass_sequence_attribute_unused r_pass;
+
+        static Attribute& left(Attribute& s)
+        {
+            return s;
+        }
+
+        static unused_type right(Attribute&)
+        {
+            return unused;
+        }
+    };
+
+    template <typename L, typename R, typename Attribute, typename Context>
+    struct partition_attribute<L, R, Attribute, Context,
+        typename enable_if_c<(!traits::has_attribute<L, Context>::value &&
+            !traits::has_attribute<R, Context>::value)>::type>
+    {
+        typedef unused_type l_part;
+        typedef unused_type r_part;
+        typedef pass_sequence_attribute_unused l_pass;
+        typedef pass_sequence_attribute_unused r_pass;
+
+        static unused_type left(Attribute&)
+        {
+            return unused;
+        }
+
+        static unused_type right(Attribute&)
+        {
+            return unused;
+        }
+    };
+
+    template <typename L, typename R, typename C>
+    struct get_sequence_types
+    {
+        typedef
+            mpl::vector<
+                typename traits::attribute_of<L, C>::type
+              , typename traits::attribute_of<R, C>::type
+            >
+        type;
+    };
+
+    template <typename LL, typename LR, typename R, typename C>
+    struct get_sequence_types<sequence<LL, LR>, R, C>
+    {
+        typedef typename
+            mpl::push_back<
+                typename get_sequence_types<LL, LR, C>::type
+              , typename traits::attribute_of<R, C>::type
+            >::type
+        type;
+    };
+
+    template <typename L, typename RL, typename RR, typename C>
+    struct get_sequence_types<L, sequence<RL, RR>, C>
+    {
+        typedef typename
+            mpl::push_front<
+                typename get_sequence_types<RL, RR, C>::type
+              , typename traits::attribute_of<L, C>::type
+            >::type
+        type;
+    };
+
+    template <typename LL, typename LR, typename RL, typename RR, typename C>
+    struct get_sequence_types<sequence<LL, LR>, sequence<RL, RR>, C>
+    {
+        typedef
+            mpl::joint_view<
+                typename get_sequence_types<LL, LR, C>::type
+              , typename get_sequence_types<RL, RR, C>::type
+            >
+        type;
+    };
+
+    template <typename L, typename R, typename C>
+    struct attribute_of_sequence
+    {
+        // Get all sequence attribute types
+        typedef typename get_sequence_types<L, R, C>::type all_types;
+
+        // Filter all unused_types
+        typedef typename
+            mpl::copy_if<
+                all_types
+              , mpl::not_<is_same<mpl::_1, unused_type>>
+              , mpl::back_inserter<mpl::vector<>>
+            >::type
+        filtered_types;
+
+        // Build a fusion::deque if filtered_types is not empty,
+        // else just return unused_type
+        typedef typename
+            mpl::eval_if<
+                mpl::empty<filtered_types>
+           , mpl::identity<unused_type>
+           , mpl::if_<mpl::equal_to<mpl::size<filtered_types>, mpl::int_<1> >,
+           typename mpl::front<filtered_types>::type
+                     , typename fusion::result_of::as_deque<filtered_types>::type >
+            >::type
+        type;
+    };
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence(
+        Parser const& parser, Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr
+      , traits::tuple_attribute)
+    {
+        typedef typename Parser::left_type Left;
+        typedef typename Parser::right_type Right;
+        typedef partition_attribute<Left, Right, Attribute, Context> partition;
+        typedef typename partition::l_pass l_pass;
+        typedef typename partition::r_pass r_pass;
+
+        typename partition::l_part l_part = partition::left(attr);
+        typename partition::r_part r_part = partition::right(attr);
+        typename l_pass::type l_attr = l_pass::call(l_part);
+        typename r_pass::type r_attr = r_pass::call(r_part);
+
+        Iterator save = first;
+        if (parser.left.parse(first, last, context, rcontext, l_attr)
+            && parser.right.parse(first, last, context, rcontext, r_attr))
+            return true;
+        first = save;
+        return false;
+    }
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence(
+        Parser const& parser , Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr
+      , traits::plain_attribute)
+    {
+        typedef typename Parser::left_type Left;
+        typedef typename Parser::right_type Right;
+        typedef typename traits::attribute_of<Left, Context>::type l_attr_type;
+        typedef typename traits::attribute_of<Right, Context>::type r_attr_type;
+        typedef traits::make_attribute<l_attr_type, Attribute> l_make_attribute;
+        typedef traits::make_attribute<r_attr_type, Attribute> r_make_attribute;
+
+        typename l_make_attribute::type l_attr = l_make_attribute::call(attr);
+        typename r_make_attribute::type r_attr = r_make_attribute::call(attr);
+
+        Iterator save = first;
+        if (parser.left.parse(first, last, context, rcontext, l_attr)
+            && parser.right.parse(first, last, context, rcontext, r_attr))
+            return true;
+        first = save;
+        return false;
+    }
+
+    template <typename Left, typename Right, typename Iterator
+      , typename Context, typename RContext, typename Attribute>
+    bool parse_sequence(
+        Left const& left, Right const& right
+      , Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr
+      , traits::container_attribute);
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence(
+        Parser const& parser , Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr
+      , traits::container_attribute)
+    {
+        Iterator save = first;
+        if (parse_into_container(parser.left, first, last, context, rcontext, attr)
+            && parse_into_container(parser.right, first, last, context, rcontext, attr))
+            return true;
+        first = save;
+        return false;
+    }
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence_assoc(
+        Parser const& parser , Iterator& first, Iterator const& last
+         , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_ /*should_split*/)
+    {
+           return parse_into_container(parser, first, last, context, rcontext, attr);
+    }
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence_assoc(
+        Parser const& parser , Iterator& first, Iterator const& last
+         , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_ /*should_split*/)
+    {
+        Iterator save = first;
+        if (parser.left.parse( first, last, context, rcontext, attr)
+            && parser.right.parse(first, last, context, rcontext, attr))
+            return true;
+        first = save;
+        return false;
+    }
+
+    template <typename Parser, typename Iterator, typename Context
+      , typename RContext, typename Attribute>
+    bool parse_sequence(
+        Parser const& parser, Iterator& first, Iterator const& last
+      , Context const& context, RContext& rcontext, Attribute& attr
+      , traits::associative_attribute)
+    {
+        // we can come here in 2 cases:
+        // - when sequence is key >> value and therefore must
+        // be parsed with tuple synthesized attribute and then
+        // that tuple is used to save into associative attribute provided here.
+        // Example:  key >> value;
+        //
+        // - when either this->left or this->right provides full key-value
+        // pair (like in case 1) and another one provides nothing.
+        // Example:  eps >> rule<class x; fusion::map<...> >
+        //
+        // first case must be parsed as whole, and second one should
+        // be parsed separately for left and right.
+
+        typedef typename traits::attribute_of<
+            decltype(parser.left), Context>::type l_attr_type;
+        typedef typename traits::attribute_of<
+            decltype(parser.right), Context>::type r_attr_type;
+
+        typedef typename
+            mpl::or_<
+                is_same<l_attr_type, unused_type>
+              , is_same<r_attr_type, unused_type> >
+        should_split;
+
+        return parse_sequence_assoc(parser, first, last, context, rcontext, attr
+          , should_split());
+    }
+
+    template <typename Left, typename Right, typename Context, typename RContext>
+    struct parse_into_container_impl<sequence<Left, Right>, Context, RContext>
+    {
+        typedef sequence<Left, Right> parser_type;
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::false_)
+        {
+            // inform user what went wrong if we jumped here in attempt to
+            // parse incompatible sequence into fusion::map
+            static_assert(!is_same< typename traits::attribute_category<Attribute>::type,
+                  traits::associative_attribute>::value,
+                  "To parse directly into fusion::map sequence must produce tuple attribute "
+                  "where type of first element is existing key in fusion::map and second element "
+                  "is value to be stored under that key");
+
+            Attribute attr_;
+            if (!parse_sequence(parser
+                              , first, last, context, rcontext, attr_, traits::container_attribute()))
+            {
+                return false;
+            }
+            traits::append(attr, traits::begin(attr_), traits::end(attr_));
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr, mpl::true_)
+        {
+            return parse_into_container_base_impl<parser_type>::call(
+                parser, first, last, context, rcontext, attr);
+        }
+
+        template <typename Iterator, typename Attribute>
+        static bool call(
+            parser_type const& parser
+          , Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr)
+        {
+            typedef typename
+                traits::attribute_of<parser_type, Context>::type
+            attribute_type;
+
+            typedef typename
+                traits::container_value<Attribute>::type
+            value_type;
+
+            return call(parser, first, last, context, rcontext, attr
+               , typename traits::is_substitute<attribute_type, value_type>::type());
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/difference.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/difference.hpp
new file mode 100644 (file)
index 0000000..13a9274
--- /dev/null
@@ -0,0 +1,75 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM)
+#define SPIRIT_DIFFERENCE_FEBRUARY_11_2007_1250PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/has_attribute.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct difference : binary_parser<Left, Right, difference<Left, Right>>
+    {
+        typedef binary_parser<Left, Right, difference<Left, Right>> base_type;
+        static bool const handles_container = Left::handles_container;
+
+        difference(Left const& left, Right const& right)
+          : base_type(left, right) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            // Try Right first
+            Iterator start = first;
+            if (this->right.parse(first, last, context, rcontext, unused))
+            {
+                // Right succeeds, we fail.
+                first = start;
+                return false;
+            }
+            // Right fails, now try Left
+            return this->left.parse(first, last, context, rcontext, attr);
+        }
+
+        template <typename Left_, typename Right_>
+        difference<Left_, Right_>
+        make(Left_ const& left, Right_ const& right) const
+        {
+            return difference<Left_, Right_>(left, right);
+        }
+    };
+
+    template <typename Left, typename Right>
+    inline difference<
+        typename extension::as_parser<Left>::value_type
+      , typename extension::as_parser<Right>::value_type>
+    operator-(Left const& left, Right const& right)
+    {
+        return {as_parser(left), as_parser(right)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Left, typename Right, typename Context>
+    struct attribute_of<x3::difference<Left, Right>, Context>
+        : attribute_of<Left, Context> {};
+
+    template <typename Left, typename Right, typename Context>
+    struct has_attribute<x3::difference<Left, Right>, Context>
+        : has_attribute<Left, Context> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/kleene.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/kleene.hpp
new file mode 100644 (file)
index 0000000..7e02bf4
--- /dev/null
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_KLEENE_JANUARY_07_2007_0818AM)
+#define SPIRIT_KLEENE_JANUARY_07_2007_0818AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct kleene : unary_parser<Subject, kleene<Subject>>
+    {
+        typedef unary_parser<Subject, kleene<Subject>> base_type;
+        static bool const handles_container = true;
+
+        kleene(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            while (detail::parse_into_container(
+                this->subject, first, last, context, rcontext, attr))
+                ;
+            return true;
+        }
+    };
+
+    template <typename Subject>
+    inline kleene<typename extension::as_parser<Subject>::value_type>
+    operator*(Subject const& subject)
+    {
+        return {as_parser(subject)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Subject, typename Context>
+    struct attribute_of<x3::kleene<Subject>, Context>
+        : build_container<
+            typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/list.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/list.hpp
new file mode 100644 (file)
index 0000000..a463a7f
--- /dev/null
@@ -0,0 +1,73 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_LIST_MARCH_24_2007_1031AM)
+#define SPIRIT_LIST_MARCH_24_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct list : binary_parser<Left, Right, list<Left, Right>>
+    {
+        typedef binary_parser<Left, Right, list<Left, Right>> base_type;
+        static bool const handles_container = true;
+        static bool const has_attribute = true;
+
+        list(Left const& left, Right const& right)
+          : base_type(left, right) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            // in order to succeed we need to match at least one element
+            if (!detail::parse_into_container(
+                this->left, first, last, context, rcontext, attr))
+                return false;
+
+            Iterator save = first;
+            while (this->right.parse(first, last, context, rcontext, unused)
+                && detail::parse_into_container(
+                    this->left, first, last, context, rcontext, attr))
+            {
+                save = first;
+            }
+
+            first = save;
+            return true;
+        }
+    };
+
+    template <typename Left, typename Right>
+    inline list<
+        typename extension::as_parser<Left>::value_type
+      , typename extension::as_parser<Right>::value_type>
+    operator%(Left const& left, Right const& right)
+    {
+        return {as_parser(left), as_parser(right)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Left, typename Right, typename Context>
+    struct attribute_of<x3::list<Left, Right>, Context>
+        : traits::build_container<
+            typename attribute_of<Left, Context>::type> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/not_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/not_predicate.hpp
new file mode 100644 (file)
index 0000000..38b24bd
--- /dev/null
@@ -0,0 +1,47 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM)
+#define SPIRIT_NOT_PREDICATE_MARCH_23_2007_0618PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct not_predicate : unary_parser<Subject, not_predicate<Subject>>
+    {
+        typedef unary_parser<Subject, not_predicate<Subject>> base_type;
+
+        typedef unused_type attribute_type;
+        static bool const has_attribute = false;
+
+        not_predicate(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& /*attr*/) const
+        {
+            Iterator i = first;
+            return !this->subject.parse(i, last, context, rcontext, unused);
+        }
+    };
+
+    template <typename Subject>
+    inline not_predicate<typename extension::as_parser<Subject>::value_type>
+    operator!(Subject const& subject)
+    {
+        return {as_parser(subject)};
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/optional.hpp
new file mode 100644 (file)
index 0000000..16432f8
--- /dev/null
@@ -0,0 +1,86 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_OPTIONAL_MARCH_23_2007_1117PM)
+#define SPIRIT_OPTIONAL_MARCH_23_2007_1117PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/proxy.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/optional_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct optional : proxy<Subject, optional<Subject>>
+    {
+        typedef proxy<Subject, optional<Subject>> base_type;
+        static bool const handles_container = true;
+
+        optional(Subject const& subject)
+          : base_type(subject) {}
+
+        using base_type::parse_subject;
+
+        // Attribute is a container
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse_subject(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr
+          , traits::container_attribute) const
+        {
+            detail::parse_into_container(
+                this->subject, first, last, context, rcontext, attr);
+            return true;
+        }
+
+        // Attribute is an optional
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse_subject(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr
+          , traits::optional_attribute) const
+        {
+            typedef typename
+                x3::traits::optional_value<Attribute>::type
+            value_type;
+
+            // create a local value
+            value_type val = value_type();
+
+            if (this->subject.parse(first, last, context, rcontext, val))
+            {
+                // assign the parsed value into our attribute
+                x3::traits::move_to(val, attr);
+            }
+            return true;
+        }
+    };
+
+    template <typename Subject>
+    inline optional<typename extension::as_parser<Subject>::value_type>
+    operator-(Subject const& subject)
+    {
+        return {as_parser(subject)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Subject, typename Context>
+    struct attribute_of<x3::optional<Subject>, Context>
+        : build_optional<
+            typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/plus.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/plus.hpp
new file mode 100644 (file)
index 0000000..32c7dbf
--- /dev/null
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_PLUS_MARCH_13_2007_0127PM)
+#define SPIRIT_PLUS_MARCH_13_2007_0127PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/detail/parse_into_container.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Subject>
+    struct plus : unary_parser<Subject, plus<Subject>>
+    {
+        typedef unary_parser<Subject, plus<Subject>> base_type;
+        static bool const handles_container = true;
+
+        plus(Subject const& subject)
+          : base_type(subject) {}
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            if (!detail::parse_into_container(
+                this->subject, first, last, context, rcontext, attr))
+                return false;
+
+            while (detail::parse_into_container(
+                this->subject, first, last, context, rcontext, attr))
+                ;
+            return true;
+        }
+    };
+
+    template <typename Subject>
+    inline plus<typename extension::as_parser<Subject>::value_type>
+    operator+(Subject const& subject)
+    {
+        return {as_parser(subject)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Subject, typename Context>
+    struct attribute_of<x3::plus<Subject>, Context>
+        : build_container<
+            typename attribute_of<Subject, Context>::type> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/operator/sequence.hpp
new file mode 100644 (file)
index 0000000..23d5e3d
--- /dev/null
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SEQUENCE_JAN_06_2013_1015AM)
+#define SPIRIT_SEQUENCE_JAN_06_2013_1015AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/operator/detail/sequence.hpp>
+#include <boost/spirit/home/x3/directive/expect.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Left, typename Right>
+    struct sequence : binary_parser<Left, Right, sequence<Left, Right>>
+    {
+        typedef binary_parser<Left, Right, sequence<Left, Right>> base_type;
+
+        sequence(Left left, Right right)
+            : base_type(left, right) {}
+
+        template <typename Iterator, typename Context, typename RContext>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, unused_type) const
+        {
+            Iterator save = first;
+            if (this->left.parse(first, last, context, rcontext, unused)
+                && this->right.parse(first, last, context, rcontext, unused))
+                return true;
+            first = save;
+            return false;
+        }
+
+        template <typename Iterator, typename Context
+          , typename RContext, typename Attribute>
+        bool parse(
+            Iterator& first, Iterator const& last
+          , Context const& context, RContext& rcontext, Attribute& attr) const
+        {
+            return detail::parse_sequence(*this, first, last, context, rcontext, attr
+              , typename traits::attribute_category<Attribute>::type());
+        }
+    };
+
+    template <typename Left, typename Right>
+    inline sequence<
+        typename extension::as_parser<Left>::value_type
+      , typename extension::as_parser<Right>::value_type>
+    operator>>(Left const& left, Right const& right)
+    {
+        return {as_parser(left), as_parser(right)};
+    }
+
+    template <typename Left, typename Right>
+    inline sequence<
+        typename extension::as_parser<Left>::value_type
+      , expect_directive<typename extension::as_parser<Right>::value_type>>
+    operator>(Left const& left, Right const& right)
+    {
+        return {as_parser(left), as_parser(right)};
+    }
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Left, typename Right, typename Context>
+    struct attribute_of<x3::sequence<Left, Right>, Context>
+        : x3::detail::attribute_of_sequence<Left, Right, Context> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string.hpp
new file mode 100644 (file)
index 0000000..e0f5c6e
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_STRING_FEBRUARY_03_2007_0355PM)
+#define BOOST_SPIRIT_X3_STRING_FEBRUARY_03_2007_0355PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/literal_string.hpp>
+#include <boost/spirit/home/x3/string/symbols.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/string_parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/string_parse.hpp
new file mode 100644 (file)
index 0000000..f7a77df
--- /dev/null
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_STRING_PARSE_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_X3_STRING_PARSE_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    template <typename Char, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        Char const* str
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+        Char ch = *str;
+
+        for (; !!ch; ++i)
+        {
+            if (i == last || (ch != *i))
+                return false;
+            ch = *++str;
+        }
+
+        x3::traits::move_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename String, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        String const& str
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+        typename String::const_iterator stri = str.begin();
+        typename String::const_iterator str_last = str.end();
+
+        for (; stri != str_last; ++stri, ++i)
+            if (i == last || (*stri != *i))
+                return false;
+        x3::traits::move_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename Char, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        Char const* uc_i, Char const* lc_i
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        Iterator i = first;
+
+        for (; *uc_i && *lc_i; ++uc_i, ++lc_i, ++i)
+            if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+                return false;
+        x3::traits::move_to(first, i, attr);
+        first = i;
+        return true;
+    }
+
+    template <typename String, typename Iterator, typename Attribute>
+    inline bool string_parse(
+        String const& ucstr, String const& lcstr
+      , Iterator& first, Iterator const& last, Attribute& attr)
+    {
+        typename String::const_iterator uc_i = ucstr.begin();
+        typename String::const_iterator uc_last = ucstr.end();
+        typename String::const_iterator lc_i = lcstr.begin();
+        Iterator i = first;
+
+        for (; uc_i != uc_last; ++uc_i, ++lc_i, ++i)
+            if (i == last || ((*uc_i != *i) && (*lc_i != *i)))
+                return false;
+        x3::traits::move_to(first, i, attr);
+        first = i;
+        return true;
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/tst.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/detail/tst.hpp
new file mode 100644 (file)
index 0000000..df61f4d
--- /dev/null
@@ -0,0 +1,213 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_TST_MARCH_09_2007_0905AM)
+#define BOOST_SPIRIT_X3_TST_MARCH_09_2007_0905AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/call_traits.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/foreach.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    // This file contains low level TST routines, not for
+    // public consumption.
+
+    template <typename Char, typename T>
+    struct tst_node
+    {
+        tst_node(Char id)
+          : id(id), data(0), lt(0), eq(0), gt(0)
+        {
+        }
+
+        template <typename Alloc>
+        static void
+        destruct_node(tst_node* p, Alloc* alloc)
+        {
+            if (p)
+            {
+                if (p->data)
+                    alloc->delete_data(p->data);
+                destruct_node(p->lt, alloc);
+                destruct_node(p->eq, alloc);
+                destruct_node(p->gt, alloc);
+                alloc->delete_node(p);
+            }
+        }
+
+        template <typename Alloc>
+        static tst_node*
+        clone_node(tst_node* p, Alloc* alloc)
+        {
+            if (p)
+            {
+                tst_node* clone = alloc->new_node(p->id);
+                if (p->data)
+                    clone->data = alloc->new_data(*p->data);
+                clone->lt = clone_node(p->lt, alloc);
+                clone->eq = clone_node(p->eq, alloc);
+                clone->gt = clone_node(p->gt, alloc);
+                return clone;
+            }
+            return 0;
+        }
+
+        template <typename Iterator, typename Filter>
+        static T*
+        find(tst_node* start, Iterator& first, Iterator last, Filter filter)
+        {
+            if (first == last)
+                return 0;
+
+            Iterator i = first;
+            Iterator latest = first;
+            tst_node* p = start;
+            T* found = 0;
+
+            while (p && i != last)
+            {
+                typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                c = filter(*i); // filter only the input
+
+                if (c == p->id)
+                {
+                    if (p->data)
+                    {
+                        found = p->data;
+                        latest = i;
+                    }
+                    p = p->eq;
+                    i++;
+                }
+                else if (c < p->id)
+                {
+                    p = p->lt;
+                }
+                else
+                {
+                    p = p->gt;
+                }
+            }
+
+            if (found)
+                first = ++latest; // one past the last matching char
+            return found;
+        }
+
+        template <typename Iterator, typename Alloc>
+        static T*
+        add(
+            tst_node*& start
+          , Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val
+          , Alloc* alloc)
+        {
+            if (first == last)
+                return 0;
+
+            tst_node** pp = &start;
+            for(;;)
+            {
+                typename
+                    boost::detail::iterator_traits<Iterator>::value_type
+                c = *first;
+
+                if (*pp == 0)
+                    *pp = alloc->new_node(c);
+                tst_node* p = *pp;
+
+                if (c == p->id)
+                {
+                    if (++first == last)
+                    {
+                        if (p->data == 0)
+                            p->data = alloc->new_data(val);
+                        return p->data;
+                    }
+                    pp = &p->eq;
+                }
+                else if (c < p->id)
+                {
+                    pp = &p->lt;
+                }
+                else
+                {
+                    pp = &p->gt;
+                }
+            }
+        }
+
+        template <typename Iterator, typename Alloc>
+        static void
+        remove(tst_node*& p, Iterator first, Iterator last, Alloc* alloc)
+        {
+            if (p == 0 || first == last)
+                return;
+
+            typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            c = *first;
+
+            if (c == p->id)
+            {
+                if (++first == last)
+                {
+                    if (p->data)
+                    {
+                        alloc->delete_data(p->data);
+                        p->data = 0;
+                    }
+                }
+                remove(p->eq, first, last, alloc);
+            }
+            else if (c < p->id)
+            {
+                remove(p->lt, first, last, alloc);
+            }
+            else
+            {
+                remove(p->gt, first, last, alloc);
+            }
+
+            if (p->data == 0 && p->lt == 0 && p->eq == 0 && p->gt == 0)
+            {
+                alloc->delete_node(p);
+                p = 0;
+            }
+        }
+
+        template <typename F>
+        static void
+        for_each(tst_node* p, std::basic_string<Char> prefix, F f)
+        {
+            if (p)
+            {
+                for_each(p->lt, prefix, f);
+                std::basic_string<Char> s = prefix + p->id;
+                for_each(p->eq, s, f);
+                if (p->data)
+                    f(s, *p->data);
+                for_each(p->gt, prefix, f);
+            }
+        }
+
+        Char id;        // the node's identity character
+        T* data;        // optional data
+        tst_node* lt;   // left pointer
+        tst_node* eq;   // middle pointer
+        tst_node* gt;   // right pointer
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/literal_string.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/literal_string.hpp
new file mode 100644 (file)
index 0000000..bf05a9a
--- /dev/null
@@ -0,0 +1,124 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_LITERAL_STRING_APR_18_2006_1125PM)
+#define BOOST_SPIRIT_X3_LITERAL_STRING_APR_18_2006_1125PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/string/detail/string_parse.hpp>
+#include <boost/spirit/home/x3/support/utility/utf8.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename String, typename Encoding,
+        typename Attribute = std::basic_string<typename Encoding::char_type>>
+    struct literal_string : parser<literal_string<String, Encoding, Attribute>>
+    {
+        typedef typename Encoding::char_type char_type;
+        typedef Encoding encoding;
+        typedef Attribute attribute_type;
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+        static bool const handles_container = has_attribute;
+
+        literal_string(typename add_reference<String>::type str)
+          : str(str)
+        {}
+
+        template <typename Iterator, typename Context, typename Attribute_>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute_& attr) const
+        {
+            x3::skip_over(first, last, context);
+            return detail::string_parse(str, first, last, attr);
+        }
+
+        String str;
+    };
+
+    namespace standard
+    {
+        inline literal_string<char const*, char_encoding::standard>
+        string(char const* s)
+        {
+            return literal_string<char const*, char_encoding::standard>(s);
+        }
+    }
+    using standard::string;
+
+    namespace extension
+    {
+        template <int N>
+        struct as_parser<char[N]>
+        {
+            typedef
+                literal_string<
+                    char const*, char_encoding::standard, unused_type>
+            type;
+
+            typedef type value_type;
+
+            static type call(char const* s)
+            {
+                return type(s);
+            }
+        };
+
+        template <int N>
+        struct as_parser<char const[N]> : as_parser<char[N]> {};
+
+        template <int N>
+        struct as_parser<wchar_t[N]>
+        {
+            typedef
+                literal_string<
+                    wchar_t const*, char_encoding::standard_wide, unused_type>
+            type;
+
+            typedef type value_type;
+
+            static type call(wchar_t const* s)
+            {
+                return type(s);
+            }
+        };
+
+        template <int N>
+        struct as_parser<wchar_t const[N]> : as_parser<wchar_t[N]> {};
+    }
+
+    using standard::string;
+
+    inline literal_string<char const*, char_encoding::standard, unused_type>
+    lit(char const* s)
+    {
+        return literal_string<char const*, char_encoding::standard, unused_type>(s);
+    }
+
+    template <typename String, typename Encoding, typename Attribute>
+    struct get_info<literal_string<String, Encoding, Attribute>>
+    {
+        typedef std::string result_type;
+        std::string operator()(literal_string<String, Encoding, Attribute> const& p) const
+        {
+            return '"' + to_utf8(p.str) + '"';
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/symbols.hpp
new file mode 100644 (file)
index 0000000..b35a00a
--- /dev/null
@@ -0,0 +1,358 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Carl Barron
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SYMBOLS_MARCH_11_2007_1055AM)
+#define BOOST_SPIRIT_X3_SYMBOLS_MARCH_11_2007_1055AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/string/tst.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/string_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/range.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <initializer_list>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <
+        typename Char = char
+      , typename T = unused_type
+      , typename Lookup = tst<Char, T>
+      , typename Filter = tst_pass_through>
+    struct symbols : parser<symbols<Char, T, Lookup, Filter>>
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef symbols<Char, T, Lookup, Filter> this_type;
+        typedef value_type attribute_type;
+
+        static bool const has_attribute =
+            !is_same<unused_type, attribute_type>::value;
+        static bool const handles_container =
+            traits::is_container<attribute_type>::value;
+
+        symbols(std::string const& name = "symbols")
+          : add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+        }
+
+        symbols(symbols const& syms)
+          : add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {
+        }
+
+        template <typename Filter_>
+        symbols(symbols<Char, T, Lookup, Filter_> const& syms)
+          : add(*this)
+          , remove(*this)
+          , lookup(syms.lookup)
+          , name_(syms.name_)
+        {
+        }
+
+        template <typename Symbols>
+        symbols(Symbols const& syms, std::string const& name = "symbols")
+          : add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            while (si != boost::end(syms))
+                add(*si++);
+        }
+
+        template <typename Symbols, typename Data>
+        symbols(Symbols const& syms, Data const& data
+              , std::string const& name = "symbols")
+          : add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typename range_const_iterator<Symbols>::type si = boost::begin(syms);
+            typename range_const_iterator<Data>::type di = boost::begin(data);
+            while (si != boost::end(syms))
+                add(*si++, *di++);
+        }
+
+        symbols(std::initializer_list<std::pair<Char const*, T>> syms
+              , std::string const & name="symbols")
+          : add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typedef std::initializer_list<std::pair<Char const*, T>> symbols_t;
+            typename range_const_iterator<symbols_t>::type si = boost::begin(syms);
+            for (;si != boost::end(syms); ++si)
+                add(si->first, si->second);
+        }
+        
+        symbols(std::initializer_list<Char const*> syms
+              , std::string const &name="symbols")
+          : add(*this)
+          , remove(*this)
+          , lookup(new Lookup())
+          , name_(name)
+        {
+            typedef std::initializer_list<Char const*> symbols_t;
+            typename range_const_iterator<symbols_t>::type si = boost::begin(syms);
+            while (si != boost::end(syms))
+                add(*si++);
+        }
+
+        symbols&
+        operator=(symbols const& rhs)
+        {
+            name_ = rhs.name_;
+            lookup = rhs.lookup;
+            return *this;
+        }
+
+        template <typename Filter_>
+        symbols&
+        operator=(symbols<Char, T, Lookup, Filter_> const& rhs)
+        {
+            name_ = rhs.name_;
+            lookup = rhs.lookup;
+            return *this;
+        }
+
+        void clear()
+        {
+            lookup->clear();
+        }
+
+        struct adder;
+        struct remover;
+
+        template <typename Str>
+        adder const&
+        operator=(Str const& str)
+        {
+            lookup->clear();
+            return add(str);
+        }
+
+        template <typename Str>
+        friend adder const&
+        operator+=(symbols& sym, Str const& str)
+        {
+            return sym.add(str);
+        }
+
+        template <typename Str>
+        friend remover const&
+        operator-=(symbols& sym, Str const& str)
+        {
+            return sym.remove(str);
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            lookup->for_each(f);
+        }
+
+        template <typename Str>
+        value_type& at(Str const& str)
+        {
+            return *lookup->add(traits::get_string_begin<Char>(str)
+                , traits::get_string_end<Char>(str), T());
+        }
+
+        template <typename Iterator>
+        value_type* prefix_find(Iterator& first, Iterator const& last)
+        {
+            return lookup->find(first, last, Filter());
+        }
+
+        template <typename Iterator>
+        value_type const* prefix_find(Iterator& first, Iterator const& last) const
+        {
+            return lookup->find(first, last, Filter());
+        }
+
+        template <typename Str>
+        value_type* find(Str const& str)
+        {
+            return find_impl(traits::get_string_begin<Char>(str)
+                , traits::get_string_end<Char>(str));
+        }
+
+        template <typename Str>
+        value_type const* find(Str const& str) const
+        {
+            return find_impl(traits::get_string_begin<Char>(str)
+                , traits::get_string_end<Char>(str));
+        }
+
+    private:
+        template <typename Iterator>
+        value_type* find_impl(Iterator begin, Iterator end)
+        {
+            value_type* r = lookup->find(begin, end, Filter());
+            return begin == end ? r : 0;
+        }
+
+        template <typename Iterator>
+        value_type const* find_impl(Iterator begin, Iterator end) const
+        {
+            value_type const* r = lookup->find(begin, end, Filter());
+            return begin == end ? r : 0;
+        }
+
+    public:
+        template <typename Iterator, typename Context, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context const& context, unused_type, Attribute& attr) const
+        {
+            x3::skip_over(first, last, context);
+
+            if (value_type* val_ptr
+                = lookup->find(first, last, Filter()))
+            {
+                x3::traits::move_to(*val_ptr, attr);
+                return true;
+            }
+            return false;
+        }
+
+        void name(std::string const &str)
+        {
+            name_ = str;
+        }
+        std::string const &name() const
+        {
+            return name_;
+        }
+
+        struct adder
+        {
+            template <typename, typename = unused_type, typename = unused_type>
+            struct result { typedef adder const& type; };
+
+            adder(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Iterator>
+            adder const&
+            operator()(Iterator first, Iterator last, T const& val) const
+            {
+                sym.lookup->add(first, last, val);
+                return *this;
+            }
+
+            template <typename Str>
+            adder const&
+            operator()(Str const& s, T const& val = T()) const
+            {
+                sym.lookup->add(traits::get_string_begin<Char>(s)
+                  , traits::get_string_end<Char>(s), val);
+                return *this;
+            }
+
+            template <typename Str>
+            adder const&
+            operator,(Str const& s) const
+            {
+                sym.lookup->add(traits::get_string_begin<Char>(s)
+                  , traits::get_string_end<Char>(s), T());
+                return *this;
+            }
+
+            symbols& sym;
+        };
+
+        struct remover
+        {
+            template <typename, typename = unused_type, typename = unused_type>
+            struct result { typedef remover const& type; };
+
+            remover(symbols& sym)
+              : sym(sym)
+            {
+            }
+
+            template <typename Iterator>
+            remover const&
+            operator()(Iterator const& first, Iterator const& last) const
+            {
+                sym.lookup->remove(first, last);
+                return *this;
+            }
+
+            template <typename Str>
+            remover const&
+            operator()(Str const& s) const
+            {
+                sym.lookup->remove(traits::get_string_begin<Char>(s)
+                  , traits::get_string_end<Char>(s));
+                return *this;
+            }
+
+            template <typename Str>
+            remover const&
+            operator,(Str const& s) const
+            {
+                sym.lookup->remove(traits::get_string_begin<Char>(s)
+                  , traits::get_string_end<Char>(s));
+                return *this;
+            }
+
+            symbols& sym;
+        };
+
+        adder add;
+        remover remove;
+        shared_ptr<Lookup> lookup;
+        std::string name_;
+    };
+
+    template <typename Char, typename T, typename Lookup, typename Filter>
+    struct get_info<symbols<Char, T, Lookup, Filter>>
+    {
+      typedef std::string result_type;
+      result_type operator()(symbols< Char, T
+                                    , Lookup, Filter
+                                    > const& symbols) const
+      {
+         return symbols.name();
+      }
+    };
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst.hpp
new file mode 100644 (file)
index 0000000..5379b03
--- /dev/null
@@ -0,0 +1,137 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_TST_JUNE_03_2007_1031AM)
+#define BOOST_SPIRIT_X3_TST_JUNE_03_2007_1031AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/tst.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct tst_pass_through
+    {
+        template <typename Char>
+        Char operator()(Char ch) const
+        {
+            return ch;
+        }
+    };
+
+    template <typename Char, typename T>
+    struct tst
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef detail::tst_node<Char, T> node;
+
+        tst()
+          : root(0)
+        {
+        }
+
+        ~tst()
+        {
+            clear();
+        }
+
+        tst(tst const& rhs)
+          : root(0)
+        {
+            copy(rhs);
+        }
+
+        tst& operator=(tst const& rhs)
+        {
+            return assign(rhs);
+        }
+
+        template <typename Iterator, typename Filter>
+        T* find(Iterator& first, Iterator last, Filter filter) const
+        {
+            return node::find(root, first, last, filter);
+        }
+
+        template <typename Iterator>
+        T* find(Iterator& first, Iterator last) const
+        {
+            return find(first, last, tst_pass_through());
+        }
+
+        template <typename Iterator>
+        T* add(
+            Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val)
+        {
+            return node::add(root, first, last, val, this);
+        }
+
+        template <typename Iterator>
+        void remove(Iterator first, Iterator last)
+        {
+            node::remove(root, first, last, this);
+        }
+
+        void clear()
+        {
+            node::destruct_node(root, this);
+            root = 0;
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            node::for_each(root, std::basic_string<Char>(), f);
+        }
+
+    private:
+
+        friend struct detail::tst_node<Char, T>;
+
+        void copy(tst const& rhs)
+        {
+            root = node::clone_node(rhs.root, this);
+        }
+
+        tst& assign(tst const& rhs)
+        {
+            if (this != &rhs)
+            {
+                clear();
+                copy(rhs);
+            }
+            return *this;
+        }
+
+        node* root;
+
+        node* new_node(Char id)
+        {
+            return new node(id);
+        }
+
+        T* new_data(typename boost::call_traits<T>::param_type val)
+        {
+            return new T(val);
+        }
+
+        void delete_node(node* p)
+        {
+            delete p;
+        }
+
+        void delete_data(T* p)
+        {
+            delete p;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst_map.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/string/tst_map.hpp
new file mode 100644 (file)
index 0000000..2501324
--- /dev/null
@@ -0,0 +1,216 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_TST_MAP_JUNE_03_2007_1143AM)
+#define BOOST_SPIRIT_X3_TST_MAP_JUNE_03_2007_1143AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/string/detail/tst.hpp>
+#include <unordered_map>
+#include <boost/pool/object_pool.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct tst_pass_through; // declared in tst.hpp
+
+    template <typename Char, typename T>
+    struct tst_map
+    {
+        typedef Char char_type; // the character type
+        typedef T value_type; // the value associated with each entry
+        typedef detail::tst_node<Char, T> node;
+
+        tst_map()
+        {
+        }
+
+        ~tst_map()
+        {
+            // Nothing to do here.
+            // The pools do the right thing for us
+        }
+
+        tst_map(tst_map const& rhs)
+        {
+            copy(rhs);
+        }
+
+        tst_map& operator=(tst_map const& rhs)
+        {
+            return assign(rhs);
+        }
+
+        template <typename Iterator, typename Filter>
+        T* find(Iterator& first, Iterator last, Filter filter) const
+        {
+            if (first != last)
+            {
+                Iterator save = first;
+                typename map_type::const_iterator
+                    i = map.find(filter(*first++));
+                if (i == map.end())
+                {
+                    first = save;
+                    return 0;
+                }
+                if (T* p = node::find(i->second.root, first, last, filter))
+                {
+                    return p;
+                }
+                return i->second.data;
+            }
+            return 0;
+        }
+
+        template <typename Iterator>
+        T* find(Iterator& first, Iterator last) const
+        {
+            return find(first, last, tst_pass_through());
+        }
+
+        template <typename Iterator>
+        bool add(
+            Iterator first
+          , Iterator last
+          , typename boost::call_traits<T>::param_type val)
+        {
+            if (first != last)
+            {
+                map_data x = {0, 0};
+                std::pair<typename map_type::iterator, bool>
+                    r = map.insert(std::pair<Char, map_data>(*first++, x));
+
+                if (first != last)
+                {
+                    return node::add(r.first->second.root
+                      , first, last, val, this) ? true : false;
+                }
+                else
+                {
+                    if (r.first->second.data)
+                        return false;
+                    r.first->second.data = this->new_data(val);
+                }
+                return true;
+            }
+            return false;
+        }
+
+        template <typename Iterator>
+        void remove(Iterator first, Iterator last)
+        {
+            if (first != last)
+            {
+                typename map_type::iterator i = map.find(*first++);
+                if (i != map.end())
+                {
+                    if (first != last)
+                    {
+                        node::remove(i->second.root, first, last, this);
+                    }
+                    else if (i->second.data)
+                    {
+                        this->delete_data(i->second.data);
+                        i->second.data = 0;
+                    }
+                    if (i->second.data == 0 && i->second.root == 0)
+                    {
+                        map.erase(i);
+                    }
+                }
+            }
+        }
+
+        void clear()
+        {
+            BOOST_FOREACH(typename map_type::value_type& x, map)
+            {
+                node::destruct_node(x.second.root, this);
+                if (x.second.data)
+                    this->delete_data(x.second.data);
+            }
+            map.clear();
+        }
+
+        template <typename F>
+        void for_each(F f) const
+        {
+            BOOST_FOREACH(typename map_type::value_type const& x, map)
+            {
+                std::basic_string<Char> s(1, x.first);
+                node::for_each(x.second.root, s, f);
+                if (x.second.data)
+                    f(s, *x.second.data);
+            }
+        }
+
+    private:
+
+        friend struct detail::tst_node<Char, T>;
+
+        struct map_data
+        {
+            node* root;
+            T* data;
+        };
+
+        typedef std::unordered_map<Char, map_data> map_type;
+
+        void copy(tst_map const& rhs)
+        {
+            BOOST_FOREACH(typename map_type::value_type const& x, rhs.map)
+            {
+                map_data xx = {node::clone_node(x.second.root, this), 0};
+                if (x.second.data)
+                    xx.data = data_pool.construct(*x.second.data);
+                map[x.first] = xx;
+            }
+        }
+
+        tst_map& assign(tst_map const& rhs)
+        {
+            if (this != &rhs)
+            {
+                BOOST_FOREACH(typename map_type::value_type& x, map)
+                {
+                    node::destruct_node(x.second.root, this);
+                }
+                map.clear();
+                copy(rhs);
+            }
+            return *this;
+        }
+
+        node* new_node(Char id)
+        {
+            return node_pool.construct(id);
+        }
+
+        T* new_data(typename boost::call_traits<T>::param_type val)
+        {
+            return data_pool.construct(val);
+        }
+
+        void delete_node(node* p)
+        {
+            node_pool.destroy(p);
+        }
+
+        void delete_data(T* p)
+        {
+            data_pool.destroy(p);
+        }
+
+        map_type map;
+        object_pool<node> node_pool;
+        object_pool<T> data_pool;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/position_tagged.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/position_tagged.hpp
new file mode 100644 (file)
index 0000000..22cfd75
--- /dev/null
@@ -0,0 +1,96 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_POSITION_TAGGED_MAY_01_2014_0321PM)
+#define BOOST_SPIRIT_X3_POSITION_TAGGED_MAY_01_2014_0321PM
+
+#include <boost/range.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    struct position_tagged
+    {
+        // Use this to annotate an AST with the iterator position.
+        // These ids are used as a key to the position_cache (below)
+        // and marks the start and end of an AST node.
+        int id_first = -1;
+        int id_last = -1;
+    };
+
+    template <typename Container>
+    class position_cache
+    {
+    public:
+
+        typedef typename Container::value_type iterator_type;
+
+        position_cache(
+            iterator_type first
+          , iterator_type last)
+          : first_(first), last_(last) {}
+
+        // This will catch all nodes inheriting from position_tagged
+        boost::iterator_range<iterator_type>
+        position_of(position_tagged const& ast) const
+        {
+            return
+                boost::iterator_range<iterator_type>(
+                    positions.at(ast.id_first) // throws if out of range
+                  , positions.at(ast.id_last)  // throws if out of range
+                );
+        }
+
+        // This will catch all nodes except those inheriting from position_tagged
+        template <typename AST>
+        boost::iterator_range<iterator_type>
+        position_of(AST const& ast) const
+        {
+            // returns an empty position
+            return boost::iterator_range<iterator_type>();
+        }
+        
+        // This will catch all nodes except those inheriting from position_tagged
+        template <typename AST>
+        void annotate(AST& ast, iterator_type first, iterator_type last, mpl::false_)
+        {
+            // (no-op) no need for tags
+        }
+
+        // This will catch all nodes inheriting from position_tagged
+        void annotate(position_tagged& ast, iterator_type first, iterator_type last, mpl::true_)
+        {
+            ast.id_first = int(positions.size());
+            positions.push_back(first);
+            ast.id_last = int(positions.size());
+            positions.push_back(last);
+        }
+
+        template <typename AST>
+        void annotate(AST& ast, iterator_type first, iterator_type last)
+        {
+            annotate(ast, first, last, is_base_of<position_tagged, AST>());
+        }
+
+        Container const&
+        get_positions() const
+        {
+            return positions;
+        }
+
+        iterator_type first() const { return first_; }
+        iterator_type last() const { return last_; }
+
+    private:
+
+        Container positions;
+        iterator_type first_;
+        iterator_type last_;
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/variant.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/ast/variant.hpp
new file mode 100644 (file)
index 0000000..cf626e8
--- /dev/null
@@ -0,0 +1,249 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VARIANT_AUGUST_6_2011_0859AM)
+#define BOOST_SPIRIT_X3_VARIANT_AUGUST_6_2011_0859AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T>
+    class forward_ast
+    {
+    public:
+
+        typedef T type;
+
+    public:
+
+        forward_ast() : p_(new T) {}
+
+        forward_ast(forward_ast const& operand)
+            : p_(new T(operand.get())) {}
+
+        forward_ast(forward_ast&& operand)
+            : p_(operand.p_)
+        {
+            operand.p_ = 0;
+        }
+
+        forward_ast(T const& operand)
+            : p_(new T(operand)) {}
+
+        forward_ast(T&& operand)
+            : p_(new T(std::move(operand))) {}
+
+        ~forward_ast()
+        {
+            boost::checked_delete(p_);
+        }
+
+        forward_ast& operator=(forward_ast const& rhs)
+        {
+            assign(rhs.get());
+            return *this;
+        }
+
+        void swap(forward_ast& operand) BOOST_NOEXCEPT
+        {
+            T* temp = operand.p_;
+            operand.p_ = p_;
+            p_ = temp;
+        }
+
+        forward_ast& operator=(T const& rhs)
+        {
+            assign(rhs);
+            return *this;
+        }
+
+        forward_ast& operator=(forward_ast&& rhs) BOOST_NOEXCEPT
+        {
+            swap(rhs);
+            return *this;
+        }
+
+        forward_ast& operator=(T&& rhs)
+        {
+            get() = std::move(rhs);
+            return *this;
+        }
+
+        T& get() { return *get_pointer(); }
+        const T& get() const { return *get_pointer(); }
+
+        T* get_pointer() { return p_; }
+        const T* get_pointer() const { return p_; }
+
+        operator T const&() const { return this->get(); }
+        operator T&() { return this->get(); }
+
+    private:
+
+        void assign(const T& rhs)
+        {
+            this->get() = rhs;
+        }
+
+        T* p_;
+    };
+
+    // function template swap
+    //
+    // Swaps two forward_ast<T> objects of the same type T.
+    //
+    template <typename T>
+    inline void swap(forward_ast<T>& lhs, forward_ast<T>& rhs) BOOST_NOEXCEPT
+    {
+        lhs.swap(rhs);
+    }
+
+    namespace detail
+    {
+        template <typename T>
+        struct remove_forward : mpl::identity<T>
+        {};
+
+        template <typename T>
+        struct remove_forward<forward_ast<T>> : mpl::identity<T>
+        {};
+    }
+
+    template <typename ...Types>
+    struct variant
+    {
+        // tell spirit that this is an adapted variant
+        struct adapted_variant_tag;
+
+        typedef boost::variant<Types...> variant_type;
+        typedef mpl::list<typename detail::remove_forward<Types>::type...> types;
+        typedef variant<Types...> base_type;
+
+        variant() : var() {}
+
+        template <typename T, typename disable_if<is_base_of<base_type, T>>::type>
+        explicit variant(T const& rhs)
+            : var(rhs) {}
+
+        template <typename T, typename disable_if<is_base_of<base_type, T>>::type>
+        explicit variant(T&& rhs)
+            : var(std::forward<T>(rhs)) {}
+
+        variant(variant const& rhs)
+            : var(rhs.var) {}
+
+        variant(variant& rhs)
+            : var(rhs.var) {}
+
+        variant(variant&& rhs)
+            : var(std::forward<variant_type>(rhs.var)) {}
+
+        variant& operator=(variant const& rhs)
+        {
+            var = rhs.get();
+            return *this;
+        }
+
+        variant& operator=(variant&& rhs)
+        {
+            var = std::forward<variant_type>(rhs.get());
+            return *this;
+        }
+
+        template <typename T>
+        //typename disable_if<is_base_of<base_type, T>, variant&>::type
+        variant& operator=(T const& rhs)
+        {
+            var = rhs;
+            return *this;
+        }
+
+        template <typename T>
+        //typename disable_if<is_base_of<base_type, T>, variant&>::type
+        variant& operator=(T&& rhs)
+        {
+            var = std::forward<T>(rhs);
+            return *this;
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F const& v)
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F const& v) const
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F& v)
+        {
+            return var.apply_visitor(v);
+        }
+
+        template <typename F>
+        typename F::result_type apply_visitor(F& v) const
+        {
+            return var.apply_visitor(v);
+        }
+
+        variant_type const& get() const
+        {
+            return var;
+        }
+
+        variant_type& get()
+        {
+            return var;
+        }
+
+        variant_type var;
+    };
+}}}
+
+namespace boost
+{
+    template <typename T, typename ...Types>
+    inline T const&
+    get(boost::spirit::x3::variant<Types...> const& x)
+    {
+        return boost::get<T>(x.get());
+    }
+
+    template <typename T, typename ...Types>
+    inline T&
+    get(boost::spirit::x3::variant<Types...>& x)
+    {
+        return boost::get<T>(x.get());
+    }
+
+    template <typename T, typename ...Types>
+    inline T const*
+    get(boost::spirit::x3::variant<Types...> const* x)
+    {
+        return boost::get<T>(&x->get());
+    }
+
+    template <typename T, typename ...Types>
+    inline T*
+    get(boost::spirit::x3::variant<Types...>* x)
+    {
+        return boost::get<T>(&x->get());
+    }
+}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/context.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/context.hpp
new file mode 100644 (file)
index 0000000..93bcb24
--- /dev/null
@@ -0,0 +1,135 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM)
+#define BOOST_SPIRIT_X3_CONTEXT_JAN_4_2012_1215PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename ID, typename T, typename Next = unused_type>
+    struct context
+    {
+        context(T& val, Next const& next)
+            : val(val), next(next) {}
+
+        template <typename ID_, typename Unused = void>
+        struct get_result
+        {
+            typedef typename Next::template get_result<ID_>::type type;
+        };
+
+        template <typename Unused>
+        struct get_result<mpl::identity<ID>, Unused>
+        {
+            typedef T& type;
+        };
+
+        T& get(mpl::identity<ID>) const
+        {
+            return val;
+        }
+
+        template <typename ID_>
+        typename Next::template get_result<ID_>::type
+        get(ID_ id) const
+        {
+            return next.get(id);
+        }
+
+        T& val;
+        Next const& next;
+    };
+
+    template <typename ID, typename T>
+    struct context<ID, T, unused_type>
+    {
+        context(T& val)
+            : val(val) {}
+
+        context(T& val, unused_type)
+            : val(val) {}
+
+        template <typename ID_, typename Unused = void>
+        struct get_result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Unused>
+        struct get_result<mpl::identity<ID>, Unused>
+        {
+            typedef T& type;
+        };
+
+        T& get(mpl::identity<ID>) const
+        {
+            return val;
+        }
+
+        template <typename ID_>
+        unused_type
+        get(ID_) const
+        {
+            return unused;
+        }
+
+        T& val;
+    };
+
+    template <typename Tag, typename Context>
+    inline auto
+    get(Context const& context)
+        -> decltype(context.get(mpl::identity<Tag>()))
+    {
+        return context.get(mpl::identity<Tag>());
+    }
+
+    template <typename ID, typename T, typename Next>
+    inline context<ID, T, Next> make_context(T& val, Next const& next)
+    {
+        return context<ID, T, Next>(val, next);
+    }
+
+    template <typename ID, typename T>
+    inline context<ID, T> make_context(T& val)
+    {
+        return context<ID, T>(val);
+    }
+    
+    namespace detail
+    {
+        template <typename ID, typename T, typename Next, typename FoundVal>
+        inline Next const&
+        make_unique_context(T& val, Next const& next, FoundVal&)
+        {
+            return next;
+        }
+        
+        template <typename ID, typename T, typename Next>
+        inline context<ID, T, Next>
+        make_unique_context(T& val, Next const& next, unused_type)
+        {
+            return context<ID, T, Next>(val, next);
+        }
+    }
+    
+    template <typename ID, typename T, typename Next>
+    inline auto
+    make_unique_context(T& val, Next const& next)
+    {
+        return detail::make_unique_context<ID>(val, next, x3::get<ID>(next));
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp
new file mode 100644 (file)
index 0000000..73770c8
--- /dev/null
@@ -0,0 +1,512 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011 Jan Frederick Eick
+    Copyright (c) 2011 Christopher Jefferson
+    Copyright (c) 2006 Stephen Nutt
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_DETAIL_EXTRACT_INT_APRIL_17_2006_0816AM)
+#define BOOST_SPIRIT_X3_DETAIL_EXTRACT_INT_APRIL_17_2006_0816AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_type.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/traits/numeric_traits.hpp>
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/comparison/less.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#include <boost/detail/iterator.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/limits.hpp>
+
+#if !defined(SPIRIT_NUMERICS_LOOP_UNROLL)
+# define SPIRIT_NUMERICS_LOOP_UNROLL 3
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  The maximum radix digits that can be represented without
+    //  overflow:
+    //
+    //          template<typename T, unsigned Radix>
+    //          struct digits_traits::value;
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix>
+    struct digits_traits;
+
+// lookup table for log2(x) : 2 <= x <= 36
+#define BOOST_SPIRIT_X3_LOG2 (#error)(#error)                                   \
+        (1000000)(1584960)(2000000)(2321920)(2584960)(2807350)                  \
+        (3000000)(3169920)(3321920)(3459430)(3584960)(3700430)                  \
+        (3807350)(3906890)(4000000)(4087460)(4169920)(4247920)                  \
+        (4321920)(4392310)(4459430)(4523560)(4584960)(4643850)                  \
+        (4700430)(4754880)(4807350)(4857980)(4906890)(4954190)                  \
+        (5000000)(5044390)(5087460)(5129280)(5169925)                           \
+    /***/
+
+#define BOOST_PP_LOCAL_MACRO(Radix)                                             \
+    template <typename T> struct digits_traits<T, Radix>                        \
+    {                                                                           \
+        typedef std::numeric_limits<T> numeric_limits_type;                     \
+        BOOST_STATIC_CONSTANT(int, value = static_cast<int>(                    \
+            (numeric_limits_type::digits * 1000000) /                           \
+                BOOST_PP_SEQ_ELEM(Radix, BOOST_SPIRIT_X3_LOG2)));               \
+    };                                                                          \
+    /***/
+
+#define BOOST_PP_LOCAL_LIMITS (2, 36)
+#include BOOST_PP_LOCAL_ITERATE()
+
+#undef BOOST_SPIRIT_X3_LOG2
+
+    ///////////////////////////////////////////////////////////////////////////
+    //
+    //  Traits class for radix specific number conversion
+    //
+    //      Test the validity of a single character:
+    //
+    //          template<typename Char> static bool is_valid(Char ch);
+    //
+    //      Convert a digit from character representation to binary
+    //      representation:
+    //
+    //          template<typename Char> static int digit(Char ch);
+    //
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct radix_traits
+    {
+        template <typename Char>
+        inline static bool is_valid(Char ch)
+        {
+            if (Radix <= 10)
+                return (ch >= '0' && ch <= static_cast<Char>('0' + Radix -1));
+            return (ch >= '0' && ch <= '9')
+                || (ch >= 'a' && ch <= static_cast<Char>('a' + Radix -10 -1))
+                || (ch >= 'A' && ch <= static_cast<Char>('A' + Radix -10 -1));
+        }
+
+        template <typename Char>
+        inline static unsigned digit(Char ch)
+        {
+            if (Radix <= 10 || (ch >= '0' && ch <= '9'))
+                return ch - '0';
+            return char_encoding::ascii::tolower(ch) - 'a' + 10;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  positive_accumulator/negative_accumulator: Accumulator policies for
+    //  extracting integers. Use positive_accumulator if number is positive.
+    //  Use negative_accumulator if number is negative.
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix>
+    struct positive_accumulator
+    {
+        template <typename T, typename Char>
+        inline static void add(T& n, Char ch, mpl::false_) // unchecked add
+        {
+            const int digit = radix_traits<Radix>::digit(ch);
+            n = n * T(Radix) + T(digit);
+        }
+
+        template <typename T, typename Char>
+        inline static bool add(T& n, Char ch, mpl::true_) // checked add
+        {
+            // Ensure n *= Radix will not overflow
+            static T const max = (std::numeric_limits<T>::max)();
+            static T const val = max / Radix;
+            if (n > val)
+                return false;
+
+            n *= Radix;
+
+            // Ensure n += digit will not overflow
+            const int digit = radix_traits<Radix>::digit(ch);
+            if (n > max - digit)
+                return false;
+
+            n += static_cast<T>(digit);
+            return true;
+        }
+    };
+
+    template <unsigned Radix>
+    struct negative_accumulator
+    {
+        template <typename T, typename Char>
+        inline static void add(T& n, Char ch, mpl::false_) // unchecked subtract
+        {
+            const int digit = radix_traits<Radix>::digit(ch);
+            n = n * T(Radix) - T(digit);
+        }
+
+        template <typename T, typename Char>
+        inline static bool add(T& n, Char ch, mpl::true_) // checked subtract
+        {
+            // Ensure n *= Radix will not underflow
+            static T const min = (std::numeric_limits<T>::min)();
+            static T const val = (min + 1) / T(Radix);
+            if (n < val)
+                return false;
+
+            n *= Radix;
+
+            // Ensure n -= digit will not underflow
+            int const digit = radix_traits<Radix>::digit(ch);
+            if (n < min + digit)
+                return false;
+
+            n -= static_cast<T>(digit);
+            return true;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  Common code for extract_int::parse specializations
+    ///////////////////////////////////////////////////////////////////////////
+    template <unsigned Radix, typename Accumulator, int MaxDigits>
+    struct int_extractor
+    {
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t count, T& n, mpl::true_)
+        {
+            static std::size_t const
+                overflow_free = digits_traits<T, Radix>::value - 1;
+
+            if (count < overflow_free)
+            {
+                Accumulator::add(n, ch, mpl::false_());
+            }
+            else
+            {
+                if (!Accumulator::add(n, ch, mpl::true_()))
+                    return false; //  over/underflow!
+            }
+            return true;
+        }
+
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t /*count*/, T& n, mpl::false_)
+        {
+            // no need to check for overflow
+            Accumulator::add(n, ch, mpl::false_());
+            return true;
+        }
+
+        template <typename Char>
+        inline static bool
+        call(Char /*ch*/, std::size_t /*count*/, unused_type, mpl::false_)
+        {
+            return true;
+        }
+
+        template <typename Char, typename T>
+        inline static bool
+        call(Char ch, std::size_t count, T& n)
+        {
+            return call(ch, count, n
+              , mpl::bool_<
+                    (   (MaxDigits < 0)
+                    ||  (MaxDigits > digits_traits<T, Radix>::value)
+                    )
+                  && traits::check_overflow<T>::value
+                >()
+            );
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  End of loop checking: check if the number of digits
+    //  being parsed exceeds MaxDigits. Note: if MaxDigits == -1
+    //  we don't do any checking.
+    ///////////////////////////////////////////////////////////////////////////
+    template <int MaxDigits>
+    struct check_max_digits
+    {
+        inline static bool
+        call(std::size_t count)
+        {
+            return count < MaxDigits; // bounded
+        }
+    };
+
+    template <>
+    struct check_max_digits<-1>
+    {
+        inline static bool
+        call(std::size_t /*count*/)
+        {
+            return true; // unbounded
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  extract_int: main code for extracting integers
+    ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data)                                   \
+        if (!check_max_digits<MaxDigits>::call(count + leading_zeros)           \
+            || it == last)                                                      \
+            break;                                                              \
+        ch = *it;                                                               \
+        if (!radix_check::is_valid(ch) || !extractor::call(ch, count, val))     \
+            break;                                                              \
+        ++it;                                                                   \
+        ++count;                                                                \
+    /**/
+
+    template <
+        typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+      , typename Accumulator = positive_accumulator<Radix>
+      , bool Accumulate = false
+    >
+    struct extract_int
+    {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse_main(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            typedef radix_traits<Radix> radix_check;
+            typedef int_extractor<Radix, Accumulator, MaxDigits> extractor;
+            typedef typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            char_type;
+
+            Iterator it = first;
+            std::size_t leading_zeros = 0;
+            if (!Accumulate)
+            {
+                // skip leading zeros
+                while (it != last && *it == '0' && leading_zeros < MaxDigits)
+                {
+                    ++it;
+                    ++leading_zeros;
+                }
+            }
+
+            typedef typename
+                traits::attribute_type<Attribute>::type
+            attribute_type;
+
+            attribute_type val = Accumulate ? attr : attribute_type(0);
+            std::size_t count = 0;
+            char_type ch;
+
+            while (true)
+            {
+                BOOST_PP_REPEAT(
+                    SPIRIT_NUMERICS_LOOP_UNROLL
+                  , SPIRIT_NUMERIC_INNER_LOOP, _)
+            }
+
+            if (count + leading_zeros >= MinDigits)
+            {
+                traits::move_to(val, attr);
+                first = it;
+                return true;
+            }
+            return false;
+        }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+        template <typename Iterator>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , unused_type)
+        {
+            T n = 0; // must calculate value to detect over/underflow
+            return parse_main(first, last, n);
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            return parse_main(first, last, attr);
+        }
+    };
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+    ///////////////////////////////////////////////////////////////////////////
+    //  extract_int: main code for extracting integers
+    //  common case where MinDigits == 1 and MaxDigits = -1
+    ///////////////////////////////////////////////////////////////////////////
+#define SPIRIT_NUMERIC_INNER_LOOP(z, x, data)                                   \
+        if (it == last)                                                         \
+            break;                                                              \
+        ch = *it;                                                               \
+        if (!radix_check::is_valid(ch))                                         \
+            break;                                                              \
+        if (!extractor::call(ch, count, val))                                   \
+            return false;                                                       \
+        ++it;                                                                   \
+        ++count;                                                                \
+    /**/
+
+    template <typename T, unsigned Radix, typename Accumulator, bool Accumulate>
+    struct extract_int<T, Radix, 1, -1, Accumulator, Accumulate>
+    {
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse_main(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            typedef radix_traits<Radix> radix_check;
+            typedef int_extractor<Radix, Accumulator, -1> extractor;
+            typedef typename
+                boost::detail::iterator_traits<Iterator>::value_type
+            char_type;
+
+            Iterator it = first;
+            std::size_t count = 0;
+            if (!Accumulate)
+            {
+                // skip leading zeros
+                while (it != last && *it == '0')
+                {
+                    ++it;
+                    ++count;
+                }
+
+                if (it == last)
+                {
+                    if (count == 0) // must have at least one digit
+                        return false;
+                    attr = 0;
+                    first = it;
+                    return true;
+                }
+            }
+
+            typedef typename
+                traits::attribute_type<Attribute>::type
+            attribute_type;
+
+            attribute_type val = Accumulate ? attr : attribute_type(0);
+            char_type ch = *it;
+
+            if (!radix_check::is_valid(ch) || !extractor::call(ch, 0, val))
+            {
+                if (count == 0) // must have at least one digit
+                    return false;
+                traits::move_to(val, attr);
+                first = it;
+                return true;
+            }
+
+            count = 0;
+            ++it;
+            while (true)
+            {
+                BOOST_PP_REPEAT(
+                    SPIRIT_NUMERICS_LOOP_UNROLL
+                  , SPIRIT_NUMERIC_INNER_LOOP, _)
+            }
+
+            traits::move_to(val, attr);
+            first = it;
+            return true;
+        }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+        template <typename Iterator>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , unused_type)
+        {
+            T n = 0; // must calculate value to detect over/underflow
+            return parse_main(first, last, n);
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool
+        parse(
+            Iterator& first
+          , Iterator const& last
+          , Attribute& attr)
+        {
+            return parse_main(first, last, attr);
+        }
+    };
+
+#undef SPIRIT_NUMERIC_INNER_LOOP
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Cast an signed integer to an unsigned integer
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T,
+        bool force_unsigned
+            = mpl::and_<is_integral<T>, is_signed<T> >::value>
+    struct cast_unsigned;
+
+    template <typename T>
+    struct cast_unsigned<T, true>
+    {
+        typedef typename make_unsigned<T>::type unsigned_type;
+        typedef typename make_unsigned<T>::type& unsigned_type_ref;
+
+        inline static unsigned_type_ref call(T& n)
+        {
+            return unsigned_type_ref(n);
+        }
+    };
+
+    template <typename T>
+    struct cast_unsigned<T, false>
+    {
+        inline static T& call(T& n)
+        {
+            return n;
+        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp
new file mode 100644 (file)
index 0000000..aa80cdd
--- /dev/null
@@ -0,0 +1,147 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2011 Jan Frederick Eick
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_EXTRACT_INT_APRIL_17_2006_0830AM)
+#define BOOST_SPIRIT_X3_EXTRACT_INT_APRIL_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  Extract the prefix sign (- or +), return true if a '-' was found
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator>
+    inline bool
+    extract_sign(Iterator& first, Iterator const& last)
+    {
+        (void)last;                  // silence unused warnings
+        BOOST_ASSERT(first != last); // precondition
+
+        // Extract the sign
+        bool neg = *first == '-';
+        if (neg || (*first == '+'))
+        {
+            ++first;
+            return neg;
+        }
+        return false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Low level unsigned integer parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits
+      , bool Accumulate = false>
+    struct extract_uint
+    {
+        // check template parameter 'Radix' for validity
+        static_assert(
+            (Radix >= 2 && Radix <= 36),
+            "Error Unsupported Radix");
+
+        template <typename Iterator>
+        inline static bool call(Iterator& first, Iterator const& last, T& attr)
+        {
+            if (first == last)
+                return false;
+
+            typedef detail::extract_int<
+                T
+              , Radix
+              , MinDigits
+              , MaxDigits
+              , detail::positive_accumulator<Radix>
+              , Accumulate>
+            extract_type;
+
+            Iterator save = first;
+            if (!extract_type::parse(first, last,
+                detail::cast_unsigned<T>::call(attr)))
+            {
+                first = save;
+                return false;
+            }
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            // this case is called when Attribute is not T
+            T attr;
+            if (call(first, last, attr))
+            {
+                traits::move_to(attr, attr_);
+                return true;
+            }
+            return false;
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Low level signed integer parser
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, unsigned Radix, unsigned MinDigits, int MaxDigits>
+    struct extract_int
+    {
+        // check template parameter 'Radix' for validity
+        static_assert(
+            (Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16),
+            "Error Unsupported Radix");
+
+        template <typename Iterator>
+        inline static bool call(Iterator& first, Iterator const& last, T& attr)
+        {
+            if (first == last)
+                return false;
+
+            typedef detail::extract_int<
+                T, Radix, MinDigits, MaxDigits>
+            extract_pos_type;
+
+            typedef detail::extract_int<
+                T, Radix, MinDigits, MaxDigits, detail::negative_accumulator<Radix> >
+            extract_neg_type;
+
+            Iterator save = first;
+            bool hit = extract_sign(first, last);
+            if (hit)
+                hit = extract_neg_type::parse(first, last, attr);
+            else
+                hit = extract_pos_type::parse(first, last, attr);
+
+            if (!hit)
+            {
+                first = save;
+                return false;
+            }
+            return true;
+        }
+
+        template <typename Iterator, typename Attribute>
+        inline static bool call(Iterator& first, Iterator const& last, Attribute& attr_)
+        {
+            // this case is called when Attribute is not T
+            T attr;
+            if (call(first, last, attr))
+            {
+                traits::move_to(attr, attr_);
+                return true;
+            }
+            return false;
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp
new file mode 100644 (file)
index 0000000..fb30f02
--- /dev/null
@@ -0,0 +1,271 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_EXTRACT_REAL_APRIL_18_2006_0901AM)
+#define SPIRIT_EXTRACT_REAL_APRIL_18_2006_0901AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/pow10.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/sign.hpp>
+#include <boost/spirit/home/x3/support/traits/move_to.hpp>
+#include <boost/assert.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4100)   // 'p': unreferenced formal parameter
+# pragma warning(disable: 4127)   // conditional expression is constant
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace extension
+{
+    using x3::traits::pow10;
+
+    template <typename T>
+    inline void
+    scale(int exp, T& n)
+    {
+        if (exp >= 0)
+        {
+            // $$$ Why is this failing for boost.math.concepts ? $$$
+            //~ int nn = std::numeric_limits<T>::max_exponent10;
+            //~ BOOST_ASSERT(exp <= std::numeric_limits<T>::max_exponent10);
+            n *= pow10<T>(exp);
+        }
+        else
+        {
+            if (exp < std::numeric_limits<T>::min_exponent10)
+            {
+                n /= pow10<T>(-std::numeric_limits<T>::min_exponent10);
+                n /= pow10<T>(-exp + std::numeric_limits<T>::min_exponent10);
+            }
+            else
+            {
+                n /= pow10<T>(-exp);
+            }
+        }
+    }
+
+    inline void
+    scale(int /*exp*/, unused_type /*n*/)
+    {
+        // no-op for unused_type
+    }
+
+    template <typename T>
+    inline void
+    scale(int exp, int frac, T& n)
+    {
+        scale(exp - frac, n);
+    }
+
+    inline void
+    scale(int /*exp*/, int /*frac*/, unused_type /*n*/)
+    {
+        // no-op for unused_type
+    }
+
+    inline float
+    negate(bool neg, float n)
+    {
+        return neg ? x3::changesign(n) : n;
+    }
+
+    inline double
+    negate(bool neg, double n)
+    {
+        return neg ? x3::changesign(n) : n;
+    }
+
+    inline long double
+    negate(bool neg, long double n)
+    {
+        return neg ? x3::changesign(n) : n;
+    }
+
+    template <typename T>
+    inline T
+    negate(bool neg, T const& n)
+    {
+        return neg ? -n : n;
+    }
+
+    inline unused_type
+    negate(bool /*neg*/, unused_type n)
+    {
+        // no-op for unused_type
+        return n;
+    }
+
+    template <typename T>
+    inline bool
+    is_equal_to_one(T const& value)
+    {
+        return value == 1.0;
+    }
+
+    inline bool
+    is_equal_to_one(unused_type)
+    {
+        // no-op for unused_type
+        return false;
+    }
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T, typename RealPolicies>
+    struct extract_real
+    {
+        template <typename Iterator, typename Attribute>
+        static bool
+        parse(Iterator& first, Iterator const& last, Attribute& attr,
+            RealPolicies const& p)
+        {
+            if (first == last)
+                return false;
+            Iterator save = first;
+
+            // Start by parsing the sign. neg will be true if
+            // we got a "-" sign, false otherwise.
+            bool neg = p.parse_sign(first, last);
+
+            // Now attempt to parse an integer
+            T n = 0;
+            bool got_a_number = p.parse_n(first, last, n);
+
+            // If we did not get a number it might be a NaN, Inf or a leading
+            // dot.
+            if (!got_a_number)
+            {
+                // Check whether the number to parse is a NaN or Inf
+                if (p.parse_nan(first, last, n) ||
+                    p.parse_inf(first, last, n))
+                {
+                    // If we got a negative sign, negate the number
+                    traits::move_to(extension::negate(neg, n), attr);
+                    return true;    // got a NaN or Inf, return early
+                }
+
+                // If we did not get a number and our policies do not
+                // allow a leading dot, fail and return early (no-match)
+                if (!p.allow_leading_dot)
+                {
+                    first = save;
+                    return false;
+                }
+            }
+
+            bool e_hit = false;
+            int frac_digits = 0;
+
+            // Try to parse the dot ('.' decimal point)
+            if (p.parse_dot(first, last))
+            {
+                // We got the decimal point. Now we will try to parse
+                // the fraction if it is there. If not, it defaults
+                // to zero (0) only if we already got a number.
+                Iterator savef = first;
+                if (p.parse_frac_n(first, last, n))
+                {
+                    // Optimization note: don't compute frac_digits if T is
+                    // an unused_type. This should be optimized away by the compiler.
+                    if (!is_same<T, unused_type>::value)
+                        frac_digits =
+                            static_cast<int>(std::distance(savef, first));
+                }
+                else if (!got_a_number || !p.allow_trailing_dot)
+                {
+                    // We did not get a fraction. If we still haven't got a
+                    // number and our policies do not allow a trailing dot,
+                    // return no-match.
+                    first = save;
+                    return false;
+                }
+
+                // Now, let's see if we can parse the exponent prefix
+                e_hit = p.parse_exp(first, last);
+            }
+            else
+            {
+                // No dot and no number! Return no-match.
+                if (!got_a_number)
+                {
+                    first = save;
+                    return false;
+                }
+
+                // If we must expect a dot and we didn't see an exponent
+                // prefix, return no-match.
+                e_hit = p.parse_exp(first, last);
+                if (p.expect_dot && !e_hit)
+                {
+                    first = save;
+                    return false;
+                }
+            }
+
+            if (e_hit)
+            {
+                // We got the exponent prefix. Now we will try to parse the
+                // actual exponent. It is an error if it is not there.
+                int exp = 0;
+                if (p.parse_exp_n(first, last, exp))
+                {
+                    // Got the exponent value. Scale the number by
+                    // exp-frac_digits.
+                    extension::scale(exp, frac_digits, n);
+                }
+                else
+                {
+                    // Oops, no exponent, return no-match.
+                    first = save;
+                    return false;
+                }
+            }
+            else if (frac_digits)
+            {
+                // No exponent found. Scale the number by -frac_digits.
+                extension::scale(-frac_digits, n);
+            }
+            else if (extension::is_equal_to_one(n))
+            {
+                // There is a chance of having to parse one of the 1.0#...
+                // styles some implementations use for representing NaN or Inf.
+
+                // Check whether the number to parse is a NaN or Inf
+                if (p.parse_nan(first, last, n) ||
+                    p.parse_inf(first, last, n))
+                {
+                    // If we got a negative sign, negate the number
+                    traits::move_to(extension::negate(neg, n), attr);
+                    return true;    // got a NaN or Inf, return immediately
+                }
+            }
+
+            // If we got a negative sign, negate the number
+            traits::move_to(extension::negate(neg, n), attr);
+
+            // Success!!!
+            return true;
+        }
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/pow10.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/pow10.hpp
new file mode 100644 (file)
index 0000000..f51d29f
--- /dev/null
@@ -0,0 +1,116 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM)
+#define BOOST_SPIRIT_X3_POW10_DECEMBER_26_2008_1118AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/limits.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/spirit/home/x3/support/traits/numeric_traits.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(push)
+# pragma warning(disable: 4244)   // conversion from 'double' to 'float', possible loss of data
+#endif
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    namespace detail
+    {
+        template <typename T, typename Enable = void>
+        struct pow10_helper
+        {
+            static T call(unsigned dim)
+            {
+                using namespace std;    // allow for ADL to find the correct overload
+                return pow(T(10), T(dim));
+            }
+        };
+
+        template <>
+        struct pow10_helper<unused_type>
+        {
+            static unused_type call(unused_type)
+            {
+                return unused;
+            }
+        };
+
+#if (DBL_MAX_10_EXP == 308) // for IEEE-754
+        template <>
+        struct pow10_helper<double>
+        {
+            static double call(unsigned dim)
+            {
+                static double const exponents[] =
+                {
+                    1e0,   1e1,   1e2,   1e3,   1e4,   1e5,   1e6,   1e7,   1e8,    1e9,
+                    1e10,  1e11,  1e12,  1e13,  1e14,  1e15,  1e16,  1e17,  1e18,  1e19,
+                    1e20,  1e21,  1e22,  1e23,  1e24,  1e25,  1e26,  1e27,  1e28,  1e29,
+                    1e30,  1e31,  1e32,  1e33,  1e34,  1e35,  1e36,  1e37,  1e38,  1e39,
+                    1e40,  1e41,  1e42,  1e43,  1e44,  1e45,  1e46,  1e47,  1e48,  1e49,
+                    1e50,  1e51,  1e52,  1e53,  1e54,  1e55,  1e56,  1e57,  1e58,  1e59,
+                    1e60,  1e61,  1e62,  1e63,  1e64,  1e65,  1e66,  1e67,  1e68,  1e69,
+                    1e70,  1e71,  1e72,  1e73,  1e74,  1e75,  1e76,  1e77,  1e78,  1e79,
+                    1e80,  1e81,  1e82,  1e83,  1e84,  1e85,  1e86,  1e87,  1e88,  1e89,
+                    1e90,  1e91,  1e92,  1e93,  1e94,  1e95,  1e96,  1e97,  1e98,  1e99,
+                    1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109,
+                    1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119,
+                    1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129,
+                    1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139,
+                    1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149,
+                    1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159,
+                    1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169,
+                    1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179,
+                    1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189,
+                    1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199,
+                    1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209,
+                    1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219,
+                    1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229,
+                    1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239,
+                    1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249,
+                    1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259,
+                    1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269,
+                    1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279,
+                    1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289,
+                    1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299,
+                    1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308,
+                };
+                BOOST_ASSERT(dim < sizeof(exponents)/sizeof(double));
+                return exponents[dim];
+            }
+        };
+
+        template <>
+        struct pow10_helper<float>
+        {
+            static float call(unsigned dim)
+            {
+                return pow10_helper<double>::call(dim);
+            }
+        };
+#endif // for IEEE-754
+    }
+
+    template <typename T>
+    inline T pow10(unsigned dim)
+    {
+        return detail::pow10_helper<T>::call(dim);
+    }
+}}}}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/sign.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/numeric_utils/sign.hpp
new file mode 100644 (file)
index 0000000..fe2fece
--- /dev/null
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_SIGN_MAR_11_2009_0734PM)
+#define SPIRIT_SIGN_MAR_11_2009_0734PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/math/special_functions/fpclassify.hpp>
+#include <boost/math/special_functions/sign.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template<typename T>
+    inline bool (signbit)(T x)
+    {
+        return (boost::math::signbit)(x) ? true : false;
+    }
+
+    // This routine has been taken and adapted from Johan Rade's fp_traits
+    // library
+    template<typename T>
+    inline T (changesign)(T x)
+    {
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+        return -x;
+#else
+        typedef typename math::detail::fp_traits<T>::type traits_type;
+
+        typename traits_type::bits a;
+        traits_type::get_bits(x, a);
+        a ^= traits_type::sign;
+        traits_type::set_bits(x, a);
+        return x;
+#endif
+    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/subcontext.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/subcontext.hpp
new file mode 100644 (file)
index 0000000..7614fcb
--- /dev/null
@@ -0,0 +1,89 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustín Bergé
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM)
+#define BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/support/pair.hpp>
+#include <boost/spirit/home/x3/support/context.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename... T>
+    struct subcontext;
+
+    template <>
+    struct subcontext<>
+    {
+        template <typename Context>
+        subcontext(Context const& /*context*/)
+        {}
+        
+        template <typename ID_, typename Unused = void>
+        struct get_result
+        {
+            typedef unused_type type;
+        };
+
+        template <typename ID_>
+        unused_type
+        get(ID_) const
+        {
+            return unused;
+        }
+    };
+
+    template <typename T>
+    struct subcontext<T>
+      : context<typename T::first_type, typename T::second_type>
+    {
+        typedef context<
+            typename T::first_type, typename T::second_type
+        > context_type;
+
+        template <typename Context>
+        subcontext(Context const& context)
+          : context_type(x3::get<typename T::first_type>(context))
+        {}
+
+        using context_type::get;
+    };
+
+    template <typename T, typename... Tail>
+    struct subcontext<T, Tail...>
+      : subcontext<Tail...>
+      , context<
+            typename T::first_type, typename T::second_type
+          , subcontext<Tail...>
+        >
+    {
+        typedef subcontext<Tail...> base_type;
+        typedef context<
+            typename T::first_type, typename T::second_type
+          , base_type
+        > context_type;
+
+        template <typename Context>
+        subcontext(Context const& context)
+          : base_type(context)
+          , context_type(
+                x3::get<typename T::first_type>(context)
+              , *static_cast<base_type*>(this))
+        {}
+
+        using context_type::get;
+    };
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_category.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_category.hpp
new file mode 100644 (file)
index 0000000..a003327
--- /dev/null
@@ -0,0 +1,82 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/include/copy.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+   struct unused_type;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    struct unused_attribute {};
+    struct plain_attribute {};
+    struct container_attribute {};
+    struct tuple_attribute {};
+    struct associative_attribute {};
+    struct variant_attribute {};
+    struct optional_attribute {};
+
+    template <typename T, typename Enable = void>
+    struct attribute_category
+        : mpl::identity<plain_attribute> {};
+
+    template <>
+    struct attribute_category<unused_type>
+        : mpl::identity<unused_attribute> {};
+
+    template <>
+    struct attribute_category<unused_type const>
+        : mpl::identity<unused_attribute> {};
+
+    template <typename T>
+    struct attribute_category< T
+       , typename enable_if<
+             typename mpl::eval_if< 
+                 fusion::traits::is_sequence<T>
+                 , fusion::traits::is_associative<T>
+                 , mpl::false_
+                 >::type >::type >
+        : mpl::identity<associative_attribute> {};
+
+    template <typename T>
+    struct attribute_category< T
+       , typename enable_if<
+             mpl::and_<
+                 fusion::traits::is_sequence<T>
+                 , mpl::not_<fusion::traits::is_associative<T> > 
+                 > >::type >
+        : mpl::identity<tuple_attribute> {};
+
+    template <typename T>
+    struct attribute_category<T,
+        typename enable_if<traits::is_variant<T>>::type>
+        : mpl::identity<variant_attribute> {};
+
+    template <typename T>
+    struct attribute_category<T,
+        typename enable_if<traits::is_container<T>>::type>
+        : mpl::identity<container_attribute> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_of.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_of.hpp
new file mode 100644 (file)
index 0000000..71f70b0
--- /dev/null
@@ -0,0 +1,59 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the attribute type of a component. By default, this gets the 
+    // Component's attribute_type typedef or instantiates a nested attribute 
+    // metafunction. Components may specialize this if such an attribute_type
+    // is not readily available (e.g. expensive to compute at compile time).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Context, typename Enable = void>
+    struct attribute_of;
+
+    namespace detail
+    {
+        template <typename Component, typename Context, typename Enable = void>
+        struct default_attribute_of;
+        
+        template <typename Component, typename Context>
+        struct default_attribute_of<Component, Context, 
+            typename disable_if_substitution_failure<
+                typename Component::attribute_type>::type>
+          : mpl::identity<typename Component::attribute_type> {};
+        
+        template <typename Component, typename Context>
+        struct default_attribute_of<Component, Context, 
+            typename disable_if_substitution_failure<
+                typename Component::template attribute<Context>::type>::type>
+          : Component::template attribute<Context> {};
+        
+        template <typename Component, typename Context>
+        struct default_attribute_of<Component, Context,
+            typename enable_if_c<Component::is_pass_through_unary>::type>
+          : attribute_of<typename Component::subject_type, Context>{};
+    }
+    
+    template <typename Component, typename Context, typename Enable>
+    struct attribute_of : detail::default_attribute_of<Component, Context> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_type.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/attribute_type.hpp
new file mode 100644 (file)
index 0000000..55e788b
--- /dev/null
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_TYPE_JAN_5_2012_0358PM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_TYPE_JAN_5_2012_0358PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Retrieve the attribute type to use from the given type
+    //
+    // This is needed to extract the correct attribute type from proxy classes
+    // as utilized in FUSION_ADAPT_ADT et. al.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Attribute, typename Enable = void>
+    struct attribute_type : mpl::identity<Attribute> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/container_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/container_traits.hpp
new file mode 100644 (file)
index 0000000..c382b7b
--- /dev/null
@@ -0,0 +1,333 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_CONTAINER_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_X3_CONTAINER_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/fusion/include/deque.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <vector>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains some container utils for stl containers.
+    ///////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+    }
+
+    template <typename T, typename Enable = void>
+    struct is_container
+      : mpl::bool_<
+            detail::has_value_type<T>::value &&
+            detail::has_iterator<T>::value &&
+            detail::has_size_type<T>::value &&
+            detail::has_reference<T>::value>
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename T>
+        struct remove_value_const : mpl::identity<T> {};
+
+        template <typename T>
+        struct remove_value_const<T const> : remove_value_const<T> {};
+
+        template <typename F, typename S>
+        struct remove_value_const<std::pair<F, S>>
+        {
+            typedef typename remove_value_const<F>::type first_type;
+            typedef typename remove_value_const<S>::type second_type;
+            typedef std::pair<first_type, second_type> type;
+        };
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct container_value
+      : detail::remove_value_const<typename Container::value_type>
+    {};
+
+    template <typename Container>
+    struct container_value<Container const> : container_value<Container> {};
+
+    // There is no single container value for fusion maps, but because output
+    // of this metafunc is used to check wheter parser's attribute can be
+    // saved to container, we simply return whole fusion::map as is
+    // so that check can be done in traits::is_substitute specialisation
+    template <typename T>
+    struct container_value<T
+                          , typename enable_if<typename mpl::eval_if <
+                                                   fusion::traits::is_sequence<T>
+                                                   , fusion::traits::is_associative<T>
+                                                   , mpl::false_ >::type >::type>
+    : mpl::identity<T> {};
+
+    template <>
+    struct container_value<unused_type> : mpl::identity<unused_type> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct container_iterator
+        : mpl::identity<typename Container::iterator> {};
+
+    template <typename Container>
+    struct container_iterator<Container const>
+         : mpl::identity<typename Container::const_iterator> {};
+
+    template <>
+    struct container_iterator<unused_type>
+        : mpl::identity<unused_type const*> {};
+
+    template <>
+    struct container_iterator<unused_type const>
+        : mpl::identity<unused_type const*> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename T>
+    bool push_back(Container& c, T&& val);
+
+    template <typename Container, typename Enable = void>
+    struct push_back_container
+    {
+        template <typename T>
+        static bool call(Container& c, T&& val)
+        {
+            c.insert(c.end(), std::move(val));
+            return true;
+        }
+    };
+
+    template <typename Container, typename T>
+    inline bool push_back(Container& c, T&& val)
+    {
+        return push_back_container<Container>::call(c, std::move(val));
+    }
+
+    template <typename Container>
+    inline bool push_back(Container&, unused_type)
+    {
+        return true;
+    }
+
+    template <typename T>
+    inline bool push_back(unused_type, T const&)
+    {
+        return true;
+    }
+
+    inline bool push_back(unused_type, unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Iterator>
+    bool append(Container& c, Iterator first, Iterator last);
+
+    template <typename Container, typename Enable = void>
+    struct append_container
+    {
+        // Not all containers have "reserve"
+        template <typename Container_>
+        static void reserve(Container_& c, std::size_t size) {}
+
+        template <typename T>
+        static void reserve(std::vector<T>& c, std::size_t size)
+        {
+            c.reserve(size);
+        }
+
+        template <typename Iterator>
+        static bool call(Container& c, Iterator first, Iterator last)
+        {
+            reserve(c, c.size() + std::distance(first, last));
+            c.insert(c.end(), first, last);
+            return true;
+        }
+    };
+
+    template <typename Container, typename Iterator>
+    inline bool append(Container& c, Iterator first, Iterator last)
+    {
+        return append_container<Container>::call(c, first, last);
+    }
+
+    template <typename Iterator>
+    inline bool append(unused_type, Iterator first, Iterator last)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct is_empty_container
+    {
+        static bool call(Container const& c)
+        {
+            return c.empty();
+        }
+    };
+
+    template <typename Container>
+    inline bool is_empty(Container const& c)
+    {
+        return is_empty_container<Container>::call(c);
+    }
+
+    inline bool is_empty(unused_type)
+    {
+        return true;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct begin_container
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.begin();
+        }
+    };
+
+    template <typename Container>
+    inline typename container_iterator<Container>::type
+    begin(Container& c)
+    {
+        return begin_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    begin(unused_type)
+    {
+        return &unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Container, typename Enable = void>
+    struct end_container
+    {
+        static typename container_iterator<Container>::type call(Container& c)
+        {
+            return c.end();
+        }
+    };
+
+    template <typename Container>
+    inline typename container_iterator<Container>::type
+    end(Container& c)
+    {
+        return end_container<Container>::call(c);
+    }
+
+    inline unused_type const*
+    end(unused_type)
+    {
+        return &unused;
+    }
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable = void>
+    struct deref_iterator
+    {
+        typedef typename boost::detail::iterator_traits<Iterator>::reference type;
+        static type call(Iterator& it)
+        {
+            return *it;
+        }
+    };
+
+    template <typename Iterator>
+    typename deref_iterator<Iterator>::type
+    deref(Iterator& it)
+    {
+        return deref_iterator<Iterator>::call(it);
+    }
+
+    inline unused_type
+    deref(unused_type const*)
+    {
+        return unused;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable = void>
+    struct next_iterator
+    {
+        static void call(Iterator& it)
+        {
+            ++it;
+        }
+    };
+
+    template <typename Iterator>
+    void next(Iterator& it)
+    {
+        next_iterator<Iterator>::call(it);
+    }
+
+    inline void next(unused_type const*)
+    {
+        // do nothing
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Iterator, typename Enable = void>
+    struct compare_iterators
+    {
+        static bool call(Iterator const& it1, Iterator const& it2)
+        {
+            return it1 == it2;
+        }
+    };
+
+    template <typename Iterator>
+    bool compare(Iterator& it1, Iterator& it2)
+    {
+        return compare_iterators<Iterator>::call(it1, it2);
+    }
+
+    inline bool compare(unused_type const*, unused_type const*)
+    {
+        return false;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_container : mpl::identity<std::vector<T>> {};
+
+    template <typename T>
+    struct build_container<boost::fusion::deque<T> > : build_container<T> {};
+
+    template <>
+    struct build_container<unused_type> : mpl::identity<unused_type> {};
+
+    template <>
+    struct build_container<char> : mpl::identity<std::string> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/handles_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/handles_container.hpp
new file mode 100644 (file)
index 0000000..3fe05ae
--- /dev/null
@@ -0,0 +1,31 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_HANDLES_CONTAINER_DEC_18_2010_0920AM)
+#define BOOST_SPIRIT_X3_HANDLES_CONTAINER_DEC_18_2010_0920AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Whether a component handles container attributes intrinsically
+    // (or whether container attributes need to be split up separately).
+    // By default, this gets the Component's handles_container nested value.
+    // Components may specialize this if such a handles_container is not 
+    // readily available (e.g. expensive to compute at compile time).
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Context, typename Enable = void>
+    struct handles_container : mpl::bool_<Component::handles_container> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/has_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/has_attribute.hpp
new file mode 100644 (file)
index 0000000..c8b1f8a
--- /dev/null
@@ -0,0 +1,63 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_HAS_ATTRIBUTE_JUN_6_2012_1714PM)
+#define BOOST_SPIRIT_X3_HAS_ATTRIBUTE_JUN_6_2012_1714PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_of.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3
+{
+   struct unused_type;
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Whether a component has an attribute. By default, this compares the 
+    // component attribute against unused_type. If the component provides a
+    // nested constant expression has_attribute as a hint, that value is used
+    // instead. Components may specialize this.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Component, typename Context, typename Enable = void>
+    struct has_attribute;
+    
+    namespace detail
+    {
+        template <typename Component, typename Context, typename Enable = void>
+        struct default_has_attribute
+          : mpl::not_<is_same<unused_type,
+                typename attribute_of<Component, Context>::type>> {};
+
+        template <typename Component, typename Context>
+        struct default_has_attribute<Component, Context,
+            typename disable_if_substitution_failure<
+                mpl::bool_<Component::has_attribute>>::type>
+          : mpl::bool_<Component::has_attribute> {};
+    
+        template <typename Component, typename Context>
+        struct default_has_attribute<Component, Context,
+            typename enable_if_c<Component::is_pass_through_unary>::type>
+          : has_attribute<typename Component::subject_type, Context> {};
+    }
+    
+    template <typename Component, typename Context, typename Enable>
+    struct has_attribute : detail::default_has_attribute<Component, Context> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_parser.hpp
new file mode 100644 (file)
index 0000000..cfbe8f7
--- /dev/null
@@ -0,0 +1,37 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2014 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_IS_PARSER_MAY_20_2013_0235PM)
+#define BOOST_SPIRIT_X3_IS_PARSER_MAY_20_2013_0235PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // is_parser<T>: metafunction that evaluates to mpl::true_ if a type T 
+    // can be used as a parser, mpl::false_ otherwise
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct is_parser
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct is_parser<T, typename disable_if_substitution_failure<
+        typename extension::as_parser<T>::type>::type>
+      : mpl::true_
+    {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_substitute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_substitute.hpp
new file mode 100644 (file)
index 0000000..9e02337
--- /dev/null
@@ -0,0 +1,164 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_IS_SUBSTITUTE_JAN_9_2012_1049PM)
+#define BOOST_SPIRIT_X3_IS_SUBSTITUTE_JAN_9_2012_1049PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/container_traits.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/map.hpp>
+#include <boost/fusion/include/value_at_key.hpp>
+#include <boost/fusion/adapted/mpl.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/equal.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/filter_view.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/count_if.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Find out if T can be a (strong) substitute for Attribute
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute, typename Enable = void>
+    struct is_substitute;
+
+    template <typename Variant, typename Attribute>
+    struct variant_has_substitute;
+
+    namespace detail
+    {
+        template <typename T, typename Attribute>
+        struct value_type_is_substitute
+          : is_substitute<
+                typename container_value<T>::type
+              , typename container_value<Attribute>::type>
+        {};
+
+        template <typename T, typename Attribute, typename Enable = void>
+        struct is_substitute_impl : is_same<T, Attribute> {};
+
+        template <typename T, typename Attribute>
+        struct is_substitute_impl<T, Attribute,
+            typename enable_if<
+                mpl::and_<
+                    fusion::traits::is_sequence<T>,
+                    fusion::traits::is_sequence<Attribute>,
+                    mpl::equal<T, Attribute, is_substitute<mpl::_1, mpl::_2>>
+                >
+            >::type>
+          : mpl::true_ {};
+
+        template <typename T, typename Attribute>
+        struct is_substitute_impl<T, Attribute,
+            typename enable_if<
+                mpl::and_<
+                    is_container<T>,
+                    is_container<Attribute>,
+                    value_type_is_substitute<T, Attribute>
+                >
+            >::type>
+          : mpl::true_ {};
+
+        template <typename T, typename Attribute>
+        struct is_substitute_impl<T, Attribute,
+            typename enable_if<
+                is_variant<Attribute>
+            >::type>
+          : mpl::or_<
+                is_same<T, Attribute>
+              , variant_has_substitute<Attribute, T>
+            >
+        {};
+    }
+
+    template <typename T, typename Attribute, typename Enable /*= void*/>
+    struct is_substitute
+        : detail::is_substitute_impl<T, Attribute> {};
+
+    // for reference T
+    template <typename T, typename Attribute, typename Enable>
+    struct is_substitute<T&, Attribute, Enable>
+        : is_substitute<T, Attribute, Enable> {};
+
+    // for reference Attribute
+    template <typename T, typename Attribute, typename Enable>
+    struct is_substitute<T, Attribute&, Enable>
+        : is_substitute<T, Attribute, Enable> {};
+
+    // 2 element mpl tuple is compatible with fusion::map if:
+    // - it's first element type is existing key in map
+    // - it second element type is compatible to type stored at the key in map
+    template <typename T, typename Attribute>
+    struct is_substitute<T, Attribute
+       , typename enable_if<
+             typename mpl::eval_if<
+                 mpl::and_<fusion::traits::is_sequence<T>
+                           , fusion::traits::is_sequence<Attribute>>
+                 , mpl::and_<traits::has_size<T, 2>
+                          , fusion::traits::is_associative<Attribute>>
+                 , mpl::false_>::type>::type>
+
+    {
+        // checking that "p_key >> p_value" parser can
+        // store it's result in fusion::map attribute
+        typedef typename mpl::at_c<T, 0>::type p_key;
+        typedef typename mpl::at_c<T, 1>::type p_value;
+
+        // for simple p_key type we just check that
+        // such key can be found in attr and that value under that key
+        // matches p_value
+        template <typename Key, typename Value, typename Map>
+        struct has_kv_in_map
+            : mpl::eval_if<
+                fusion::result_of::has_key<Map, Key>
+              , mpl::apply<
+                    is_substitute<
+                        fusion::result_of::value_at_key<mpl::_1, Key>
+                      , Value>
+                      , Map>
+              , mpl::false_>
+        {};
+
+        // if p_key is variant over multiple types (as a result of
+        // "(key1|key2|key3) >> p_value" parser) check that all
+        // keys are found in fusion::map attribute and that values
+        // under these keys match p_value
+        template <typename Variant>
+        struct variant_kv
+            : mpl::equal_to<
+                mpl::size< typename Variant::types>
+              , mpl::size< mpl::filter_view<typename Variant::types
+              , has_kv_in_map<mpl::_1, p_value, Attribute>>>
+            >
+        {};
+
+        typedef typename
+            mpl::eval_if<
+                is_variant<p_key>
+              , variant_kv<p_key>
+              , has_kv_in_map<p_key, p_value, Attribute>
+            >::type
+        type;
+    };
+
+    template <typename T, typename Attribute>
+    struct is_substitute<optional<T>, optional<Attribute>>
+      : is_substitute<T, Attribute> {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_variant.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/is_variant.hpp
new file mode 100644 (file)
index 0000000..829a673
--- /dev/null
@@ -0,0 +1,45 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_IS_VARIANT_JAN_10_2012_0823AM)
+#define BOOST_SPIRIT_X3_IS_VARIANT_JAN_10_2012_0823AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    namespace detail
+    {
+        // By declaring a nested struct in your class/struct, you tell
+        // spirit that it is regarded as a variant type. The minimum
+        // required interface for such a variant is that it has constructors
+        // for various types supported by your variant and a typedef 'types'
+        // which is an mpl sequence of the contained types.
+        //
+        // This is an intrusive interface. For a non-intrusive interface,
+        // use the is_variant trait.
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(adapted_variant_tag)
+    }
+
+    template <typename T, typename Enable = void>
+    struct is_variant
+      : detail::has_adapted_variant_tag<T>
+    {};
+
+    template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
+    struct is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>>
+      : mpl::true_
+    {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/make_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/make_attribute.hpp
new file mode 100644 (file)
index 0000000..cf3baee
--- /dev/null
@@ -0,0 +1,86 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2012 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_MAKE_ATTRIBUTE_JAN_8_2012_0721PM)
+#define BOOST_SPIRIT_X3_MAKE_ATTRIBUTE_JAN_8_2012_0721PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/spirit/home/x3/support/unused.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Attribute>
+    struct make_attribute_base
+    {
+        static Attribute call(unused_type)
+        {
+             // synthesize the attribute/parameter
+            return Attribute();
+        }
+
+        template <typename T>
+        static T& call(T& value)
+        {
+            return value; // just pass the one provided
+        }
+    };
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute : make_attribute_base<Attribute>
+    {
+        typedef ActualAttribute& type;
+        typedef ActualAttribute value_type;
+    };
+
+    template <typename Attribute>
+    struct make_attribute<Attribute, unused_type>
+        : make_attribute_base<Attribute>
+    {
+        typedef typename remove_const<Attribute>::type attribute_type;
+        typedef attribute_type type;
+        typedef attribute_type value_type;
+    };
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute&, ActualAttribute>
+      : make_attribute<Attribute, ActualAttribute> {};
+
+    template <typename Attribute, typename ActualAttribute>
+    struct make_attribute<Attribute const&, ActualAttribute>
+      : make_attribute<Attribute const, ActualAttribute> {};
+
+    template <typename ActualAttribute>
+    struct make_attribute<unused_type, ActualAttribute>
+    {
+        typedef unused_type type;
+        typedef unused_type value_type;
+        static unused_type call(unused_type)
+        {
+            return unused;
+        }
+    };
+    
+    template <>
+    struct make_attribute<unused_type, unused_type>
+    {
+        typedef unused_type type;
+        typedef unused_type value_type;
+        static unused_type call(unused_type)
+        {
+            return unused;
+        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/move_to.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/move_to.hpp
new file mode 100644 (file)
index 0000000..ecd7c6f
--- /dev/null
@@ -0,0 +1,211 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_MOVE_TO_JAN_17_2013_0859PM)
+#define BOOST_SPIRIT_X3_MOVE_TO_JAN_17_2013_0859PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/tuple_traits.hpp>
+#include <boost/spirit/home/x3/support/traits/variant_has_substitute.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/move.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <utility>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Source, typename Dest>
+    void move_to(Source&& src, Dest& dest);
+
+    template <typename Dest>
+    inline void move_to(unused_type, Dest&) {}
+
+    template <typename Source>
+    inline void move_to(Source&, unused_type) {}
+
+    inline void move_to(unused_type, unused_type) {}
+
+    template <typename Iterator, typename Dest>
+    void
+    move_to(Iterator first, Iterator last, Dest& dest);
+
+    template <typename Iterator>
+    inline void
+    move_to(Iterator, Iterator, unused_type) {}
+
+    namespace detail
+    {
+        template <typename Source, typename Dest>
+        inline void
+        move_to(Source&&, Dest&, unused_attribute) {}
+        
+        template <typename Source, typename Dest>
+        inline void
+        move_to_plain(Source&& src, Dest& dest, mpl::false_) // src is not a single-element tuple
+        {
+            dest = std::move(src);
+        }
+        
+        template <typename Source, typename Dest>
+        inline void
+        move_to_plain(Source&& src, Dest& dest, mpl::true_) // src is a single-element tuple
+        {
+            dest = std::move(fusion::front(src));
+        }
+
+        template <typename Source, typename Dest>
+        inline void
+        move_to(Source&& src, Dest& dest, plain_attribute)
+        {
+            typename mpl::and_<
+                fusion::traits::is_sequence<Source>,
+                is_size_one_sequence<Source> >
+            is_single_element_sequence;
+        
+            move_to_plain(std::move(src), dest, is_single_element_sequence);
+        }
+
+        template <typename Source, typename Dest>
+        inline typename enable_if<is_container<Source>>::type
+        move_to(Source&& src, Dest& dest, container_attribute)
+        {
+            traits::move_to(src.begin(), src.end(), dest);
+        }
+
+        template <typename Source, typename Dest>
+        inline typename enable_if<
+            mpl::and_<
+                is_same_size_sequence<Dest, Source>,
+                mpl::not_<is_size_one_sequence<Dest> > >
+        >::type
+        move_to(Source&& src, Dest& dest, tuple_attribute)
+        {
+            fusion::move(std::move(src), dest);
+        }
+
+        template <typename Source, typename Dest>
+        inline typename enable_if<
+            is_size_one_sequence<Dest>
+        >::type
+        move_to(Source&& src, Dest& dest, tuple_attribute)
+        {
+            traits::move_to(src, fusion::front(dest));
+        }
+
+        template <typename Source, typename Dest>
+        inline void
+        move_to(Source&& src, Dest& dest, variant_attribute, mpl::false_)
+        {
+            dest = std::move(src);
+        }
+        
+        template <typename Source, typename Dest>
+        inline void
+        move_to_variant_from_single_element_sequence(Source&& src, Dest& dest, mpl::false_)
+        {
+            // dest is a variant, src is a single element fusion sequence that the variant
+            // cannot directly hold. We'll try to unwrap the single element fusion sequence.
+            
+            // Make sure that the Dest variant can really hold Source
+            static_assert(variant_has_substitute<Dest, typename fusion::result_of::front<Source>::type>::value,
+                "Error! The destination variant (Dest) cannot hold the source type (Source)");
+            
+            dest = std::move(fusion::front(src));
+        }
+        
+        template <typename Source, typename Dest>
+        inline void
+        move_to_variant_from_single_element_sequence(Source&& src, Dest& dest, mpl::true_)
+        {
+            // dest is a variant, src is a single element fusion sequence that the variant
+            // *can* directly hold.
+            dest = std::move(src);
+        }
+
+        template <typename Source, typename Dest>
+        inline void
+        move_to(Source&& src, Dest& dest, variant_attribute, mpl::true_)
+        {
+            move_to_variant_from_single_element_sequence(src, dest, variant_has_substitute<Dest, Source>());
+        }
+
+        template <typename Source, typename Dest>
+        inline void
+        move_to(Source&& src, Dest& dest, variant_attribute tag)
+        {
+            move_to(src, dest, tag, is_size_one_sequence<Source>());
+        }
+
+        template <typename Iterator>
+        inline void
+        move_to(Iterator, Iterator, unused_type, unused_attribute) {}
+
+        template <typename Iterator, typename Dest>
+        inline void
+        move_to(Iterator first, Iterator last, Dest& dest, container_attribute)
+        {
+            if (is_empty(dest))
+                dest = Dest(first, last);
+            else
+                append(dest, first, last);
+        }
+        
+        template <typename Iterator>
+        inline void
+        move_to(Iterator first, Iterator last, boost::iterator_range<Iterator>& rng, container_attribute)
+        {
+            rng = {first, last};
+        }
+    }
+
+    template <typename Source, typename Dest>
+    inline void
+    move_to(Source&& src, Dest& dest)
+    {
+        detail::move_to(std::move(src), dest
+          , typename attribute_category<Dest>::type());
+    }
+
+    template <typename T>
+    inline void move_to(T& src, T& dest)
+    {
+        if (&src != &dest)
+            dest = std::move(src);
+    }
+
+    template <typename T>
+    inline void move_to(T const& src, T& dest)
+    {
+        if (&src != &dest)
+            dest = std::move(src);
+    }
+
+    template <typename T>
+    inline void move_to(T&& src, T& dest)
+    {
+        if (&src != &dest)
+            dest = std::move(src);
+    }
+
+    template <typename Iterator, typename Dest>
+    inline void
+    move_to(Iterator first, Iterator last, Dest& dest)
+    {
+        // $$$ Use std::move_iterator when iterator is not a const-iterator $$$
+        detail::move_to(first, last, dest, typename attribute_category<Dest>::type());
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/numeric_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/numeric_traits.hpp
new file mode 100644 (file)
index 0000000..3cdbdae
--- /dev/null
@@ -0,0 +1,128 @@
+/*=============================================================================
+       Copyright (c) 2001-2011 Hartmut Kaiser
+
+       Distributed under the Boost Software License, Version 1.0. (See accompanying
+       file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM)
+#define BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a boolean type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_bool : mpl::false_ {};
+
+    template <typename T>
+    struct is_bool<T const> : is_bool<T> {};
+
+    template <>
+    struct is_bool<bool> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a signed integer type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_int : mpl::false_ {};
+
+    template <typename T>
+    struct is_int<T const> : is_int<T> {};
+
+    template <>
+    struct is_int<short> : mpl::true_ {};
+
+    template <>
+    struct is_int<int> : mpl::true_ {};
+
+    template <>
+    struct is_int<long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct is_int<boost::long_long_type> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is an unsigned integer type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_uint : mpl::false_ {};
+
+    template <typename T>
+    struct is_uint<T const> : is_uint<T> {};
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    template <>
+    struct is_uint<unsigned short> : mpl::true_ {};
+#endif
+
+    template <>
+    struct is_uint<unsigned int> : mpl::true_ {};
+
+    template <>
+    struct is_uint<unsigned long> : mpl::true_ {};
+
+#ifdef BOOST_HAS_LONG_LONG
+    template <>
+    struct is_uint<boost::ulong_long_type> : mpl::true_ {};
+#endif
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a floating point type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_real : mpl::false_ {};
+
+    template <typename T>
+    struct is_real<T const> : is_uint<T> {};
+
+    template <>
+    struct is_real<float> : mpl::true_ {};
+
+    template <>
+    struct is_real<double> : mpl::true_ {};
+
+    template <>
+    struct is_real<long double> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // customization points for numeric operations
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct absolute_value;
+
+    template <typename T, typename Enable = void>
+    struct is_negative;
+
+    template <typename T, typename Enable = void>
+    struct is_zero;
+
+    template <typename T, typename Enable = void>
+    struct pow10_helper;
+
+    template <typename T, typename Enable = void>
+    struct is_nan;
+
+    template <typename T, typename Enable = void>
+    struct is_infinite;
+    
+    template <typename T, typename Enable = void>
+    struct check_overflow : mpl::false_ {};
+        
+    template <typename T>
+    struct check_overflow<T, typename enable_if_c<integer_traits<T>::is_integral>::type>
+        : mpl::true_ {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/optional_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/optional_traits.hpp
new file mode 100644 (file)
index 0000000..65568b0
--- /dev/null
@@ -0,0 +1,78 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_OPTIONAL_TRAITS_FEBRUARY_06_2007_1001AM)
+#define BOOST_SPIRIT_X3_OPTIONAL_TRAITS_FEBRUARY_06_2007_1001AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/unused.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct is_optional
+      : mpl::false_
+    {};
+
+    template <typename T>
+    struct is_optional<boost::optional<T>>
+      : mpl::true_
+    {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // build_optional
+    //
+    // Build a boost::optional from T. Return unused_type if T is unused_type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct build_optional
+    {
+        typedef boost::optional<T> type;
+    };
+
+    template <typename T>
+    struct build_optional<boost::optional<T> >
+    {
+        typedef boost::optional<T> type;
+    };
+
+    template <>
+    struct build_optional<unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // optional_value
+    //
+    // Get the optional's value_type. Handles unused_type as well.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct optional_value : mpl::identity<T> {};
+
+    template <typename T>
+    struct optional_value<boost::optional<T> >
+      : mpl::identity<T> {};
+
+    template <>
+    struct optional_value<unused_type>
+      : mpl::identity<unused_type> {};
+
+    template <>
+    struct optional_value<unused_type const>
+      : mpl::identity<unused_type> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_attribute.hpp
new file mode 100644 (file)
index 0000000..47bffce
--- /dev/null
@@ -0,0 +1,150 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_PRINT_ATTRIBUTE_JANUARY_20_2013_0814AM)
+#define BOOST_SPIRIT_X3_PRINT_ATTRIBUTE_JANUARY_20_2013_0814AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/variant.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/for_each.hpp>
+#include <boost/spirit/home/x3/support/traits/attribute_category.hpp>
+#include <boost/spirit/home/x3/support/traits/is_variant.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Out, typename T>
+    void print_attribute(Out& out, T const& val);
+
+    template <typename Out>
+    inline void print_attribute(Out&, unused_type) {}
+
+    ///////////////////////////////////////////////////////////////////////////
+    namespace detail
+    {
+        template <typename Out>
+        struct print_fusion_sequence
+        {
+            print_fusion_sequence(Out& out)
+              : out(out), is_first(true) {}
+
+            typedef void result_type;
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                if (is_first)
+                    is_first = false;
+                else
+                    out << ", ";
+                x3::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+            mutable bool is_first;
+        };
+
+        // print elements in a variant
+        template <typename Out>
+        struct print_visitor : static_visitor<>
+        {
+            print_visitor(Out& out) : out(out) {}
+
+            template <typename T>
+            void operator()(T const& val) const
+            {
+                x3::traits::print_attribute(out, val);
+            }
+
+            Out& out;
+        };
+    }
+
+    template <typename Out, typename T, typename Enable = void>
+    struct print_attribute_debug
+    {
+        // for plain data types
+        template <typename T_>
+        static void call(Out& out, T_ const& val, unused_attribute)
+        {
+            out << "unused";
+        }
+
+        // for plain data types
+        template <typename T_>
+        static void call(Out& out, T_ const& val, plain_attribute)
+        {
+            out << val;
+        }
+
+        // for fusion data types
+        template <typename T_>
+        static void call(Out& out, T_ const& val, tuple_attribute)
+        {
+            out << '[';
+            fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
+            out << ']';
+        }
+
+        // stl container
+        template <typename T_>
+        static void call(Out& out, T_ const& val, container_attribute)
+        {
+            out << '[';
+            if (!traits::is_empty(val))
+            {
+                bool first = true;
+                typename container_iterator<T_ const>::type iend = traits::end(val);
+                for (typename container_iterator<T_ const>::type i = traits::begin(val);
+                     !traits::compare(i, iend); traits::next(i))
+                {
+                    if (!first)
+                        out << ", ";
+                    first = false;
+                    x3::traits::print_attribute(out, traits::deref(i));
+                }
+            }
+            out << ']';
+        }
+
+        // for variant types
+        template <typename T_>
+        static void call(Out& out, T_ const& val, variant_attribute)
+        {
+            apply_visitor(detail::print_visitor<Out>(out), val);
+        }
+
+        // for optional types
+        template <typename T_>
+        static void call(Out& out, T_ const& val, optional_attribute)
+        {
+            if (val)
+                x3::traits::print_attribute(out, *val);
+            else
+                out << "[empty]";
+        }
+
+        // main entry point
+        static void call(Out& out, T const& val)
+        {
+            call(out, val, typename attribute_category<T>::type());
+        }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T>
+    inline void print_attribute(Out& out, T const& val)
+    {
+        print_attribute_debug<Out, T>::call(out, val);
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/print_token.hpp
new file mode 100644 (file)
index 0000000..f1429f4
--- /dev/null
@@ -0,0 +1,79 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_PRINT_TOKEN_JANUARY_20_2013_0814AM)
+#define BOOST_SPIRIT_X3_PRINT_TOKEN_JANUARY_20_2013_0814AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <cctype>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // generate debug output for lookahead token (character) stream
+    namespace detail
+    {
+        struct token_printer_debug_for_chars
+        {
+            template<typename Out, typename Char>
+            static void print(Out& o, Char c)
+            {
+                using namespace std;    // allow for ADL to find the proper iscntrl
+
+                switch (c)
+                {
+                    case '\a': o << "\\a"; break;
+                    case '\b': o << "\\b"; break;
+                    case '\f': o << "\\f"; break;
+                    case '\n': o << "\\n"; break;
+                    case '\r': o << "\\r"; break;
+                    case '\t': o << "\\t"; break;
+                    case '\v': o << "\\v"; break;
+                    default:
+                        if (c >= 0 && c < 127 && iscntrl(c))
+                            o << "\\" << std::oct << int(c);
+                        else
+                            o << Char(c);
+                }
+            }
+        };
+
+        // for token types where the comparison with char constants wouldn't work
+        struct token_printer_debug
+        {
+            template<typename Out, typename T>
+            static void print(Out& o, T const& val)
+            {
+                o << val;
+            }
+        };
+    }
+
+    template <typename T, typename Enable = void>
+    struct token_printer_debug
+      : mpl::if_<
+            mpl::and_<
+                is_convertible<T, char>, is_convertible<char, T> >
+          , detail::token_printer_debug_for_chars
+          , detail::token_printer_debug>::type
+    {};
+
+    template <typename Out, typename T>
+    inline void print_token(Out& out, T const& val)
+    {
+        // allow to customize the token printer routine
+        token_printer_debug<T>::print(out, val);
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/string_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/string_traits.hpp
new file mode 100644 (file)
index 0000000..46ee356
--- /dev/null
@@ -0,0 +1,291 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_STRING_TRAITS_OCTOBER_2008_1252PM)
+#define BOOST_SPIRIT_X3_STRING_TRAITS_OCTOBER_2008_1252PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a character type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_char : mpl::false_ {};
+
+    template <typename T>
+    struct is_char<T const> : is_char<T> {};
+
+    template <>
+    struct is_char<char> : mpl::true_ {};
+
+    template <>
+    struct is_char<wchar_t> : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine if T is a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct is_string : mpl::false_ {};
+
+    template <typename T>
+    struct is_string<T const> : is_string<T> {};
+
+    template <>
+    struct is_string<char const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t const*> : mpl::true_ {};
+
+    template <>
+    struct is_string<char*> : mpl::true_ {};
+
+    template <>
+    struct is_string<wchar_t*> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<char const(&)[N]> : mpl::true_ {};
+
+    template <std::size_t N>
+    struct is_string<wchar_t const(&)[N]> : mpl::true_ {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct is_string<std::basic_string<T, Traits, Allocator> > : mpl::true_ {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the underlying char type of a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T>
+    struct char_type_of;
+
+    template <typename T>
+    struct char_type_of<T const> : char_type_of<T> {};
+
+    template <>
+    struct char_type_of<char> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t> : mpl::identity<wchar_t> {};
+
+    template <>
+    struct char_type_of<char const*> : mpl::identity<char const> {};
+
+    template <>
+    struct char_type_of<wchar_t const*> : mpl::identity<wchar_t const> {};
+
+    template <>
+    struct char_type_of<char*> : mpl::identity<char> {};
+
+    template <>
+    struct char_type_of<wchar_t*> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const[N]> : mpl::identity<wchar_t const> {};
+
+    template <std::size_t N>
+    struct char_type_of<char(&)[N]> : mpl::identity<char> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t(&)[N]> : mpl::identity<wchar_t> {};
+
+    template <std::size_t N>
+    struct char_type_of<char const(&)[N]> : mpl::identity<char const> {};
+
+    template <std::size_t N>
+    struct char_type_of<wchar_t const(&)[N]> : mpl::identity<wchar_t const> {};
+
+    template <typename T, typename Traits, typename Allocator>
+    struct char_type_of<std::basic_string<T, Traits, Allocator> >
+      : mpl::identity<T> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the C string from a string
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename String>
+    struct extract_c_string;
+
+    template <typename String>
+    struct extract_c_string
+    {
+        typedef typename char_type_of<String>::type char_type;
+
+        template <typename T>
+        static T const* call (T* str)
+        {
+            return (T const*)str;
+        }
+
+        template <typename T>
+        static T const* call (T const* str)
+        {
+            return str;
+        }
+    };
+
+    // Forwarder that strips const
+    template <typename T>
+    struct extract_c_string<T const>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T const str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips references
+    template <typename T>
+    struct extract_c_string<T&>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    // Forwarder that strips const references
+    template <typename T>
+    struct extract_c_string<T const&>
+    {
+        typedef typename extract_c_string<T>::char_type char_type;
+
+        static typename extract_c_string<T>::char_type const* call (T const& str)
+        {
+            return extract_c_string<T>::call(str);
+        }
+    };
+
+    template <typename T, typename Traits, typename Allocator>
+    struct extract_c_string<std::basic_string<T, Traits, Allocator> >
+    {
+        typedef T char_type;
+
+        typedef std::basic_string<T, Traits, Allocator> string;
+
+        static T const* call (string const& str)
+        {
+            return str.c_str();
+        }
+    };
+
+    template <typename T>
+    typename extract_c_string<T*>::char_type const*
+    get_c_string(T* str)
+    {
+        return extract_c_string<T*>::call(str);
+    }
+
+    template <typename T>
+    typename extract_c_string<T const*>::char_type const*
+    get_c_string(T const* str)
+    {
+        return extract_c_string<T const*>::call(str);
+    }
+
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string(String& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    template <typename String>
+    typename extract_c_string<String>::char_type const*
+    get_c_string(String const& str)
+    {
+        return extract_c_string<String>::call(str);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Get the begin/end iterators from a string
+    ///////////////////////////////////////////////////////////////////////////
+
+    // Implementation for C-style strings.
+
+    template <typename T>
+    inline T const* get_string_begin(T const* str) { return str; }
+
+    template <typename T>
+    inline T* get_string_begin(T* str) { return str; }
+
+    template <typename T>
+    inline T const* get_string_end(T const* str)
+    {
+        T const* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+
+    template <typename T>
+    inline T* get_string_end(T* str)
+    {
+        T* last = str;
+        while (*last)
+            last++;
+        return last;
+    }
+
+    // Implementation for containers (includes basic_string).
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_string_begin(Str const& str)
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_string_begin(Str& str)
+    { return str.begin(); }
+
+    template <typename T, typename Str>
+    inline typename Str::const_iterator get_string_end(Str const& str)
+    { return str.end(); }
+
+    template <typename T, typename Str>
+    inline typename Str::iterator
+    get_string_end(Str& str)
+    { return str.end(); }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/transform_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/transform_attribute.hpp
new file mode 100644 (file)
index 0000000..2426852
--- /dev/null
@@ -0,0 +1,48 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2012 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ATTRIBUTE_TRANSFORM_JAN_8_2012_0721PM)
+#define BOOST_SPIRIT_X3_ATTRIBUTE_TRANSFORM_JAN_8_2012_0721PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  transform_attribute
+    //
+    //  Sometimes the user needs to transform the attribute types for certain
+    //  attributes. This template can be used as a customization point, where
+    //  the user is able specify specific transformation rules for any attribute
+    //  type.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Exposed, typename Transformed, typename Tag
+      , typename Enable = void>
+    struct transform_attribute;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Tag, typename Transformed, typename Exposed>
+    typename transform_attribute<Exposed, Transformed, Tag>::type
+    pre_transform(Exposed& attr)
+    {
+        return transform_attribute<Exposed, Transformed, Tag>::pre(attr);
+    }
+
+    template <typename Tag, typename Transformed, typename Exposed>
+    typename transform_attribute<Exposed, Transformed, Tag>::type
+    pre_transform(Exposed const& attr)
+    {
+        return transform_attribute<Exposed const, Transformed, Tag>::pre(attr);
+    }
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/tuple_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/tuple_traits.hpp
new file mode 100644 (file)
index 0000000..17bfd4e
--- /dev/null
@@ -0,0 +1,52 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+================================================_==============================*/
+#if !defined(BOOST_SPIRIT_X3_TUPLE_TRAITS_JANUARY_2012_1132PM)
+#define BOOST_SPIRIT_X3_TUPLE_TRAITS_JANUARY_2012_1132PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/fusion/include/is_sequence.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename A, typename B>
+    struct has_same_size
+      : mpl::bool_<(
+            fusion::result_of::size<A>::value ==
+            fusion::result_of::size<B>::value
+        )>
+    {};
+
+    template <typename T, std::size_t N>
+    struct has_size
+      : mpl::bool_<(fusion::result_of::size<T>::value == N)>
+    {};
+
+    template <typename A, typename B>
+    struct is_same_size_sequence
+      : mpl::and_<
+            fusion::traits::is_sequence<A>
+          , fusion::traits::is_sequence<B>
+          , has_same_size<A, B>
+        >
+    {};
+
+    template <typename Seq>
+    struct is_size_one_sequence
+      : mpl::and_<
+            fusion::traits::is_sequence<Seq>
+          , has_size<Seq, 1>
+        >
+    {};
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/value_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/value_traits.hpp
new file mode 100644 (file)
index 0000000..5f004c9
--- /dev/null
@@ -0,0 +1,30 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VALUE_TRAITS_MAY_07_2013_0203PM)
+#define BOOST_SPIRIT_X3_VALUE_TRAITS_MAY_07_2013_0203PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/utility/value_init.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename T, typename Enable = void>
+    struct value_initialize
+    {
+        static T call()
+        {
+            return boost::value_initialized<T>();
+        }
+    };
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp
new file mode 100644 (file)
index 0000000..4de7b7d
--- /dev/null
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VARIANT_FIND_SUBSTITUTE_APR_18_2014_930AM)
+#define BOOST_SPIRIT_X3_VARIANT_FIND_SUBSTITUTE_APR_18_2014_930AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Variant, typename Attribute>
+    struct variant_find_substitute
+    {
+        // Get the type from the variant that can be a substitute for Attribute.
+        // If none is found, just return Attribute
+
+        typedef Variant variant_type;
+        typedef typename variant_type::types types;
+        typedef typename mpl::end<types>::type end;
+
+        typedef typename
+            mpl::find_if<types, is_same<mpl::_1, Attribute> >::type
+        iter_1;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter_1, end>,
+                mpl::find_if<types, traits::is_substitute<mpl::_1, Attribute> >,
+                mpl::identity<iter_1>
+            >::type
+        iter;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter, end>,
+                mpl::identity<Attribute>,
+                mpl::deref<iter>
+            >::type
+        type;
+    };
+    
+    template <typename Variant>
+    struct variant_find_substitute<Variant, Variant>
+        : mpl::identity<Variant> {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp
new file mode 100644 (file)
index 0000000..d0dfb49
--- /dev/null
@@ -0,0 +1,56 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM)
+#define BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/support/traits/is_substitute.hpp>
+
+namespace boost { namespace spirit { namespace x3 { namespace traits
+{
+    template <typename Variant, typename Attribute>
+    struct variant_has_substitute_impl
+    {
+        // Find a type from the variant that can be a substitute for Attribute.
+        // return true_ if one is found, else false_
+
+        typedef Variant variant_type;
+        typedef typename variant_type::types types;
+        typedef typename mpl::end<types>::type end;
+
+        typedef typename
+            mpl::find_if<types, is_same<mpl::_1, Attribute>>::type
+        iter_1;
+
+        typedef typename
+            mpl::eval_if<
+                is_same<iter_1, end>,
+                mpl::find_if<types, traits::is_substitute<mpl::_1, Attribute>>,
+                mpl::identity<iter_1>
+            >::type
+        iter;
+
+        typedef mpl::not_<is_same<iter, end>> type;
+    };
+
+    template <typename Variant, typename Attribute>
+    struct variant_has_substitute
+        : variant_has_substitute_impl<Variant, Attribute>::type {};
+
+    template <typename Attribute>
+    struct variant_has_substitute<unused_type, Attribute> : mpl::true_ {};
+
+    template <typename Attribute>
+    struct variant_has_substitute<unused_type const, Attribute> : mpl::true_ {};
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/unused.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/unused.hpp
new file mode 100644 (file)
index 0000000..cf42d13
--- /dev/null
@@ -0,0 +1,93 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_UNUSED_APRIL_16_2006_0616PM)
+#define BOOST_SPIRIT_X3_UNUSED_APRIL_16_2006_0616PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <ostream>
+#include <istream>
+#include <boost/mpl/identity.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4522) // multiple assignment operators specified warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace x3
+{
+    struct unused_type
+    {
+        unused_type()
+        {
+        }
+
+        template <typename T>
+        unused_type(T const&)
+        {
+        }
+
+        template <typename T>
+        unused_type const&
+        operator=(T const&) const
+        {
+            return *this;
+        }
+
+        template <typename T>
+        unused_type&
+        operator=(T const&)
+        {
+            return *this;
+        }
+
+        unused_type const&
+        operator=(unused_type const&) const
+        {
+            return *this;
+        }
+
+        unused_type&
+        operator=(unused_type const&)
+        {
+            return *this;
+        }
+
+        // unused_type can also masquerade as an empty context (see context.hpp)
+
+        template <typename ID>
+        struct get_result : mpl::identity<unused_type> {};
+
+        template <typename ID>
+        unused_type get(ID) const
+        {
+            return unused_type();
+        }
+    };
+
+    unused_type const unused = unused_type();
+
+    inline std::ostream& operator<<(std::ostream& out, unused_type const&)
+    {
+        return out;
+    }
+
+    inline std::istream& operator>>(std::istream& in, unused_type&)
+    {
+        return in;
+    }
+}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/detail/testing.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/detail/testing.hpp
new file mode 100644 (file)
index 0000000..1423d9f
--- /dev/null
@@ -0,0 +1,16 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_DETAIL_TESTING_JUNE_05_2014_00422PM)
+#define BOOST_SPIRIT_X3_DETAIL_TESTING_JUNE_05_2014_00422PM
+
+namespace boost { namespace spirit { namespace x3 { namespace testing
+{
+
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/error_reporting.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/error_reporting.hpp
new file mode 100644 (file)
index 0000000..9e65f21
--- /dev/null
@@ -0,0 +1,241 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_ERROR_REPORTING_MAY_19_2014_00405PM)
+#define BOOST_SPIRIT_X3_ERROR_REPORTING_MAY_19_2014_00405PM
+
+#include <boost/filesystem/path.hpp>
+#include <boost/spirit/home/x3/support/ast/position_tagged.hpp>
+#include <ostream>
+
+// Clang-style error handling utilities
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Iterator>
+    class error_handler
+    {
+    public:
+
+        typedef Iterator iterator_type;
+
+        error_handler(
+            Iterator first, Iterator last, std::ostream& err_out
+          , std::string file = "", int tabs = 4)
+          : err_out(err_out)
+          , file(file)
+          , tabs(tabs)
+          , pos_cache(first, last) {}
+
+        typedef void result_type;
+
+        void operator()(Iterator err_pos, std::string const& error_message) const;
+        void operator()(Iterator err_first, Iterator err_last, std::string const& error_message) const;
+        void operator()(position_tagged pos, std::string const& message) const
+        {
+            auto where = pos_cache.position_of(pos);
+            (*this)(
+                where.begin()
+              , where.end()
+              , message
+            );
+        }
+
+        template <typename AST>
+        void tag(AST& ast, Iterator first, Iterator last)
+        {
+            return pos_cache.annotate(ast, first, last);
+        }
+//
+//        void operator()(
+//            Iterator first
+//          , Iterator last
+//          , Iterator err_op
+//          , Iterator err_first
+//          , Iterator err_last
+//          , std::string const& error_message
+//        ) const;
+
+    private:
+
+        void print_file_line(std::size_t line) const;
+        void print_line(Iterator& line_start, Iterator last) const;
+        void print_indicator(Iterator& line_start, Iterator last, char ind) const;
+        void skip_whitespace(Iterator& err_pos, Iterator last) const;
+        void skip_non_whitespace(Iterator& err_pos, Iterator last) const;
+        Iterator get_line_start(Iterator first, Iterator pos) const;
+        std::size_t position(Iterator i) const;
+
+        std::ostream& err_out;
+        std::string file;
+        int tabs;
+        position_cache<std::vector<Iterator>> pos_cache;
+    };
+
+    template <typename Iterator>
+    void error_handler<Iterator>::print_file_line(std::size_t line) const
+    {
+        namespace fs = boost::filesystem;
+
+        if (file != "")
+            err_out << "In file " << fs::path(file).generic_string() << ", ";
+        else
+            err_out << "In ";
+
+        err_out << "line " << line << ':' << std::endl;
+    }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::print_line(Iterator& start, Iterator last) const
+    {
+        for (; start != last; ++start)
+        {
+            auto c = *start;
+            if (c == '\r' || c == '\n')
+                break;
+            else
+                err_out << c;
+        }
+        err_out << std::endl;
+   }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::print_indicator(Iterator& start, Iterator last, char ind) const
+    {
+        for (; start != last; ++start)
+        {
+            auto c = *start;
+            if (c == '\r' || c == '\n')
+                break;
+            else if (c == '\t')
+                for (int i = 0; i < tabs; ++i)
+                    err_out << ind;
+            else
+                err_out << ind;
+        }
+    }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::skip_whitespace(Iterator& err_pos, Iterator last) const
+    {
+        // make sure err_pos does not point to white space
+        while (err_pos != last)
+        {
+            char c = *err_pos;
+            if (std::isspace(c))
+                ++err_pos;
+            else
+                break;
+        }
+    }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::skip_non_whitespace(Iterator& err_pos, Iterator last) const
+    {
+        // make sure err_pos does not point to white space
+        while (err_pos != last)
+        {
+            char c = *err_pos;
+            if (std::isspace(c))
+                break;
+            else
+                ++err_pos;
+        }
+    }
+
+    template <class Iterator>
+    inline Iterator error_handler<Iterator>::get_line_start(Iterator first, Iterator pos) const
+    {
+        Iterator latest = first;
+        for (Iterator i = first; i != pos; ++i)
+            if (*i == '\r' || *i == '\n')
+                latest = i;
+        return latest;
+    }
+
+    template <typename Iterator>
+    std::size_t error_handler<Iterator>::position(Iterator i) const
+    {
+        // $$$ asumes iterator is similar to line_pos_iterator $$$
+        return i.position();
+    }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::operator()(
+        Iterator err_pos, std::string const& error_message) const
+    {
+        Iterator first = pos_cache.first();
+        Iterator last = pos_cache.last();
+
+        // make sure err_pos does not point to white space
+        skip_whitespace(err_pos, last);
+
+        print_file_line(position(err_pos));
+        err_out << error_message << std::endl;
+
+        Iterator start = get_line_start(first, err_pos);
+        if (start != first)
+            ++start;
+        Iterator i = start;
+        print_line(i, last);
+        print_indicator(start, err_pos, '_');
+        err_out << "^_" << std::endl;
+    }
+
+    template <typename Iterator>
+    void error_handler<Iterator>::operator()(
+        Iterator err_first, Iterator err_last, std::string const& error_message) const
+    {
+        Iterator first = pos_cache.first();
+        Iterator last = pos_cache.last();
+
+        // make sure err_pos does not point to white space
+        skip_whitespace(err_first, last);
+
+        print_file_line(position(err_first));
+        err_out << error_message << std::endl;
+
+        Iterator start = get_line_start(first, err_first);
+        if (start != first)
+            ++start;
+        Iterator i = start;
+        print_line(i, last);
+        print_indicator(start, err_first, ' ');
+        print_indicator(start, err_last, '~');
+        err_out << " <<-- Here" << std::endl;
+    }
+//
+//    template <typename Iterator>
+//    void error_handler<Iterator>::operator()(
+//        Iterator first
+//      , Iterator last
+//      , Iterator err_op
+//      , Iterator err_first
+//      , Iterator err_last
+//      , std::string const& error_message
+//    ) const
+//    {
+//        // make sure err_pos does not point to white space
+//        skip_whitespace(err_first, last);
+//
+//        print_file_line(position(err_pos));
+//        err_out << error_message << std::endl;
+//
+//        Iterator start = get_line_start(first, err_first);
+//        if (start != first)
+//            ++start;
+//        Iterator i = start;
+//        print_line(i, last);
+//        print_indicator(start, err_first, ' ');
+//        print_indicator(start, err_op, '~');
+//        err_out << '^';
+//        print_indicator(++start, err_last, '~');
+//        err_out << " <<-- Here" << std::endl;
+//    }
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/integer_sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/integer_sequence.hpp
new file mode 100644 (file)
index 0000000..1f0bace
--- /dev/null
@@ -0,0 +1,94 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2014 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_INTEGER_SEQUENCE_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_INTEGER_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <cstddef>
+#include <boost/type_traits/integral_constant.hpp>
+
+// This is a standard (c++1y) compatible integer_sequence implementation,
+// it's needed for now, and it could be replaced with std::integer_sequence
+// once the new standard is available everywhere.
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T, T... Ns>
+    struct integer_sequence
+    {
+        typedef T value_type;
+        
+        static constexpr std::size_t size() noexcept
+        {
+            return sizeof...(Ns);
+        }
+    };
+}}}
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    template <typename T, typename S1, typename S2, T N>
+    struct accum_integer_sequence;
+
+    template <typename T, T... N1, T... N2, T N>
+    struct accum_integer_sequence<T, integer_sequence<T, N1...>, integer_sequence<T, N2...>, N>
+    {
+        typedef integer_sequence<T, N1..., (N + N2)...> type;
+    };
+
+    template <typename N>
+    struct make_integer_sequence_impl
+    {
+        typedef typename N::value_type T;
+        static T const n = N::value;
+        static T const m = n / 2;
+        typedef typename
+            make_integer_sequence_impl<integral_constant<T, m>>::type
+        part1;
+        typedef typename
+            make_integer_sequence_impl<integral_constant<T, n - m>>::type
+        part2;
+        typedef typename
+            accum_integer_sequence<T, part1, part2, m>::type
+        type;
+    };
+    
+    template <typename T>
+    struct make_integer_sequence_impl<integral_constant<T, 0>>
+    {
+        typedef integer_sequence<T> type;
+    };
+    
+    template <typename T>
+    struct make_integer_sequence_impl<integral_constant<T, 1>>
+    {
+        typedef integer_sequence<T, 0> type;
+    };
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <std::size_t... Ns>
+    using index_sequence = integer_sequence<std::size_t, Ns...>;
+
+    template <typename T, T N>
+    using make_integer_sequence = typename detail::make_integer_sequence_impl<
+        integral_constant<T, N>>::type;
+
+    template <std::size_t N>
+    using make_index_sequence = make_integer_sequence<std::size_t, N>;
+
+    template <typename... T>
+    using index_sequence_for = make_index_sequence<sizeof...(T)>;
+}}}
+
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/is_callable.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/is_callable.hpp
new file mode 100644 (file)
index 0000000..17f8682
--- /dev/null
@@ -0,0 +1,45 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2014 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_IS_CALLABLE_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_IS_CALLABLE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/utility/result_of.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/home/x3/support/utility/sfinae.hpp>
+
+
+namespace boost { namespace spirit { namespace x3 { namespace detail
+{
+    template <typename Sig, typename Enable = void>
+    struct is_callable_impl
+      : mpl::false_
+    {};
+
+    template <typename F, typename... A>
+    struct is_callable_impl<F(A...), typename disable_if_substitution_failure<
+        typename result_of<F(A...)>::type>::type>
+      : mpl::true_
+    {};
+}}}}
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Sig>
+    struct is_callable;
+
+    template <typename F, typename... A>
+    struct is_callable<F(A...)>
+      : detail::is_callable_impl<F(A...)>
+    {};
+}}}
+
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/lambda_visitor.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/lambda_visitor.hpp
new file mode 100644 (file)
index 0000000..83e1d2f
--- /dev/null
@@ -0,0 +1,49 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM)
+#define BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename RT, typename... Lambdas>
+    struct lambda_visitor;
+
+    template <typename RT, typename F, typename... Lambdas>
+    struct lambda_visitor<RT, F, Lambdas...> : F, lambda_visitor<RT, Lambdas...>
+    {
+        typedef lambda_visitor<RT , Lambdas...> base_type;
+        using F::operator();
+        using base_type::operator();
+        lambda_visitor(F f, Lambdas... lambdas)
+          : F(f), base_type(lambdas...)
+        {}
+    };
+
+    template <typename RT, typename F>
+    struct lambda_visitor<RT, F> : F
+    {
+        typedef RT result_type;
+        using F::operator();
+        lambda_visitor(F f)
+          : F(f)
+        {}
+    };
+
+    template <typename RT>
+    struct lambda_visitor<RT>
+    {
+        typedef RT result_type;
+    };
+
+    template <typename RT, typename... Lambdas>
+    lambda_visitor<RT, Lambdas...> make_lambda_visitor(Lambdas... lambdas)
+    {
+        return { lambdas... };
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/sfinae.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/sfinae.hpp
new file mode 100644 (file)
index 0000000..6cefa95
--- /dev/null
@@ -0,0 +1,29 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+    Copyright (c) 2013 Agustin Berge
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_SFINAE_MAY_20_2013_0840AM)
+#define BOOST_SPIRIT_X3_SFINAE_MAY_20_2013_0840AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename Expr, typename T = void>
+    struct disable_if_substitution_failure
+    {
+        typedef T type;
+    };
+    template <typename Expr, typename T>
+    struct lazy_disable_if_substitution_failure
+    {
+        typedef typename T::type type;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/testing.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/testing.hpp
new file mode 100644 (file)
index 0000000..fced46b
--- /dev/null
@@ -0,0 +1,69 @@
+/*=============================================================================
+    Copyright (c) 2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM)
+#define BOOST_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM
+
+namespace boost { namespace spirit { namespace x3 { namespace testing
+{
+    ////////////////////////////////////////////////////////////////////////////
+    //
+    //  Test utility
+    //
+    //  The test function accepts a file loaded in memory. The 'test_file'
+    //  range param points to the data contained in the file. This file
+    //  contains two parts.
+    //
+    //      1) The source input for testing
+    //      2) The expected result.
+    //
+    //  The first part of the file is sent to the generator function
+    //  'gen' which returns a string. This generated string is then compared
+    //  to the contents of the second (expected result) part.
+    //
+    //  The second part is demarcated by the string parameter 'demarcation'
+    //  which defaults to "<**expected**>". The expected template may include
+    //  embedded regular expressions marked-up within re_prefix and re_suffix
+    //  parameter tags. For example, given the default RE markup ("<%" and
+    //  "%>"), this template:
+    //
+    //      <%[0-9]+%>
+    //
+    //  will match any integer in the source input being tested. The function
+    //  will return the first non-matching position. The flag full_match
+    //  indicates a full match. It is possible for returned pos to be
+    //  at the end of in (in.end()) while still returning full_match ==
+    //  false. In that case, we have a partial match.
+    //
+    //  Here's an example of a test file:
+    //
+    //      Hello World, I am Joel. This is a test.
+    //
+    //      <**expected**>
+    //      Hello World, I am <%[a-zA-Z]+%>. This is a test.
+    //
+    ////////////////////////////////////////////////////////////////////////////
+
+    template <typename Iterator>
+    struct test_result
+    {
+        Iterator pos;
+        bool full_match;
+    };
+
+    template <typename Range, typename F>
+    test_result<typename Range::const_iterator>
+    test(
+        Range test_file
+      , F gen
+      , char const* demarcation = "<**expected**>"
+      , char const* re_prefix = "<%"
+      , char const* re_suffix = "%>"
+   );
+
+}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/unrefcv.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/unrefcv.hpp
new file mode 100644 (file)
index 0000000..fa4d448
--- /dev/null
@@ -0,0 +1,29 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2014 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_X3_UNREFCV_HPP_INCLUDED
+#define BOOST_SPIRIT_X3_UNREFCV_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+
+namespace boost { namespace spirit { namespace x3
+{
+    template <typename T>
+    struct unrefcv : remove_cv<typename remove_reference<T>::type> {};
+
+    template <typename T>
+    using unrefcv_t = typename unrefcv<T>::type;
+}}}
+
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/utf8.hpp b/bundled/boost-1.56.0/include/boost/spirit/home/x3/support/utility/utf8.hpp
new file mode 100644 (file)
index 0000000..93b5a22
--- /dev/null
@@ -0,0 +1,72 @@
+/*=============================================================================
+    Copyright (c) 2001-2014 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_X3_UC_TYPES_NOVEMBER_23_2008_0840PM)
+#define BOOST_SPIRIT_X3_UC_TYPES_NOVEMBER_23_2008_0840PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/foreach.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <string>
+
+namespace boost { namespace spirit { namespace x3
+{
+    typedef ::boost::uint32_t ucs4_char;
+    typedef char utf8_char;
+    typedef std::basic_string<ucs4_char> ucs4_string;
+    typedef std::basic_string<utf8_char> utf8_string;
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char value)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        *utf8_iter = (UChar)value;
+        return result;
+    }
+
+    template <typename Char>
+    inline utf8_string to_utf8(Char const* str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        while (*str)
+            *utf8_iter++ = (UChar)*str++;
+        return result;
+    }
+
+    template <typename Char, typename Traits, typename Allocator>
+    inline utf8_string
+    to_utf8(std::basic_string<Char, Traits, Allocator> const& str)
+    {
+        // always store as UTF8
+        utf8_string result;
+        typedef std::back_insert_iterator<utf8_string> insert_iter;
+        insert_iter out_iter(result);
+        utf8_output_iterator<insert_iter> utf8_iter(out_iter);
+        typedef typename make_unsigned<Char>::type UChar;
+        BOOST_FOREACH(Char ch, str)
+        {
+            *utf8_iter++ = (UChar)ch;
+        }
+        return result;
+    }
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic.hpp
new file mode 100644 (file)
index 0000000..c3b0dd8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC
+#define BOOST_SPIRIT_INCLUDE_CLASSIC
+#include <boost/spirit/home/classic.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_actions.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_actions.hpp
new file mode 100644 (file)
index 0000000..a37d631
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CLASSIC_ACTIONS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CLASSIC_ACTIONS
+#include <boost/spirit/home/classic/core/composite/actions.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_actor.hpp
new file mode 100644 (file)
index 0000000..a4c9914
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ACTOR
+#include <boost/spirit/home/classic/actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_alternative.hpp
new file mode 100644 (file)
index 0000000..d23aa32
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ALTERNATIVE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ALTERNATIVE
+#include <boost/spirit/home/classic/core/composite/alternative.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_as_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_as_parser.hpp
new file mode 100644 (file)
index 0000000..da55d40
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_AS_PARSER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_AS_PARSER
+#include <boost/spirit/home/classic/meta/as_parser.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_assert.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_assert.hpp
new file mode 100644 (file)
index 0000000..f6c4383
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ASSERT
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ASSERT
+#include <boost/spirit/home/classic/core/assert.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_actor.hpp
new file mode 100644 (file)
index 0000000..d85e199
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ASSIGN_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ASSIGN_ACTOR
+#include <boost/spirit/home/classic/actor/assign_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_key_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_assign_key_actor.hpp
new file mode 100644 (file)
index 0000000..38a81fe
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ASSIGN_KEY_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ASSIGN_KEY_ACTOR
+#include <boost/spirit/home/classic/actor/assign_key_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ast.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ast.hpp
new file mode 100644 (file)
index 0000000..d70876c
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_AST
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_AST
+#include <boost/spirit/home/classic/tree/ast.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ast_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ast_fwd.hpp
new file mode 100644 (file)
index 0000000..311859b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_AST_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_AST_FWD
+#include <boost/spirit/home/classic/tree/ast_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_attribute.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_attribute.hpp
new file mode 100644 (file)
index 0000000..033e484
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ATTRIBUTE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ATTRIBUTE
+#include <boost/spirit/home/classic/attribute.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_basic_chset.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_basic_chset.hpp
new file mode 100644 (file)
index 0000000..0a919c9
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_BASIC_CHSET
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_BASIC_CHSET
+#include <boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_chset.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_chset.hpp
new file mode 100644 (file)
index 0000000..2f8df49
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CHSET
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CHSET
+#include <boost/spirit/home/classic/utility/chset.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_chset_operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_chset_operators.hpp
new file mode 100644 (file)
index 0000000..0bf8ea7
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CHSET_OPERATORS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CHSET_OPERATORS
+#include <boost/spirit/home/classic/utility/chset_operators.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_clear_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_clear_actor.hpp
new file mode 100644 (file)
index 0000000..289d4aa
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CLEAR_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CLEAR_ACTOR
+#include <boost/spirit/home/classic/actor/clear_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure.hpp
new file mode 100644 (file)
index 0000000..977b923
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE
+#include <boost/spirit/home/classic/attribute/closure.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_context.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_context.hpp
new file mode 100644 (file)
index 0000000..f2d6bc4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE_CONTEXT
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE_CONTEXT
+#include <boost/spirit/home/classic/attribute/closure_context.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_closure_fwd.hpp
new file mode 100644 (file)
index 0000000..428ba37
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CLOSURE_FWD
+#include <boost/spirit/home/classic/attribute/closure_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_common.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_common.hpp
new file mode 100644 (file)
index 0000000..855f6be
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_COMMON
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_COMMON
+#include <boost/spirit/home/classic/tree/common.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_common_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_common_fwd.hpp
new file mode 100644 (file)
index 0000000..56f3abd
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_COMMON_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_COMMON_FWD
+#include <boost/spirit/home/classic/tree/common_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_composite.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_composite.hpp
new file mode 100644 (file)
index 0000000..67a8c29
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_COMPOSITE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_COMPOSITE
+#include <boost/spirit/home/classic/core/composite/composite.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_config.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_config.hpp
new file mode 100644 (file)
index 0000000..3462417
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIG
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIG
+#include <boost/spirit/home/classic/core/config.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_confix.hpp
new file mode 100644 (file)
index 0000000..0c390da
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIX
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIX
+#include <boost/spirit/home/classic/utility/confix.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_confix_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_confix_fwd.hpp
new file mode 100644 (file)
index 0000000..99b5a1a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIX_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CONFIX_FWD
+#include <boost/spirit/home/classic/utility/confix_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_core.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_core.hpp
new file mode 100644 (file)
index 0000000..ba6aacb
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_CORE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_CORE
+#include <boost/spirit/home/classic/core.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_debug.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_debug.hpp
new file mode 100644 (file)
index 0000000..da5622d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DEBUG
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DEBUG
+#include <boost/spirit/home/classic/debug.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_debug_node.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_debug_node.hpp
new file mode 100644 (file)
index 0000000..bf127b3
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DEBUG_NODE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DEBUG_NODE
+#include <boost/spirit/home/classic/debug/debug_node.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_decrement_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_decrement_actor.hpp
new file mode 100644 (file)
index 0000000..4088d0e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DECREMENT_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DECREMENT_ACTOR
+#include <boost/spirit/home/classic/actor/decrement_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_difference.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_difference.hpp
new file mode 100644 (file)
index 0000000..e9f5451
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DIFFERENCE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DIFFERENCE
+#include <boost/spirit/home/classic/core/composite/difference.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_directives.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_directives.hpp
new file mode 100644 (file)
index 0000000..b139a70
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DIRECTIVES
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DIRECTIVES
+#include <boost/spirit/home/classic/core/composite/directives.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct.hpp
new file mode 100644 (file)
index 0000000..a0f6ce5
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DISTINCT
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DISTINCT
+#include <boost/spirit/home/classic/utility/distinct.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_distinct_fwd.hpp
new file mode 100644 (file)
index 0000000..dd78230
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DISTINCT_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DISTINCT_FWD
+#include <boost/spirit/home/classic/utility/distinct_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_dynamic.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_dynamic.hpp
new file mode 100644 (file)
index 0000000..91a772e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_DYNAMIC
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_DYNAMIC
+#include <boost/spirit/home/classic/dynamic.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_epsilon.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_epsilon.hpp
new file mode 100644 (file)
index 0000000..00e2e1f
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_EPSILON
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_EPSILON
+#include <boost/spirit/home/classic/core/composite/epsilon.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_erase_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_erase_actor.hpp
new file mode 100644 (file)
index 0000000..9d79a2e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ERASE_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ERASE_ACTOR
+#include <boost/spirit/home/classic/actor/erase_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_error_handling.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_error_handling.hpp
new file mode 100644 (file)
index 0000000..3071278
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ERROR_HANDLING
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ERROR_HANDLING
+#include <boost/spirit/home/classic/error_handling.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char.hpp
new file mode 100644 (file)
index 0000000..08468cc
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ESCAPE_CHAR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ESCAPE_CHAR
+#include <boost/spirit/home/classic/utility/escape_char.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_escape_char_fwd.hpp
new file mode 100644 (file)
index 0000000..746ed3e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ESCAPE_CHAR_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ESCAPE_CHAR_FWD
+#include <boost/spirit/home/classic/utility/escape_char_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions.hpp
new file mode 100644 (file)
index 0000000..1ad4109
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_EXCEPTIONS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_EXCEPTIONS
+#include <boost/spirit/home/classic/error_handling/exceptions.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_exceptions_fwd.hpp
new file mode 100644 (file)
index 0000000..ae923f5
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_EXCEPTIONS_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_EXCEPTIONS_FWD
+#include <boost/spirit/home/classic/error_handling/exceptions_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_exclusive_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_exclusive_or.hpp
new file mode 100644 (file)
index 0000000..ea2e13b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_EXCLUSIVE_OR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_EXCLUSIVE_OR
+#include <boost/spirit/home/classic/core/composite/exclusive_or.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator.hpp
new file mode 100644 (file)
index 0000000..11e5efe
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FILE_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FILE_ITERATOR
+#include <boost/spirit/home/classic/iterator/file_iterator.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_file_iterator_fwd.hpp
new file mode 100644 (file)
index 0000000..61505ce
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FILE_ITERATOR_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FILE_ITERATOR_FWD
+#include <boost/spirit/home/classic/iterator/file_iterator_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_fixed_size_queue.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_fixed_size_queue.hpp
new file mode 100644 (file)
index 0000000..4caf714
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FIXED_SIZE_QUEUE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FIXED_SIZE_QUEUE
+#include <boost/spirit/home/classic/iterator/fixed_size_queue.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_flush_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_flush_multi_pass.hpp
new file mode 100644 (file)
index 0000000..6dd78f6
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FLUSH_MULTI_PASS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FLUSH_MULTI_PASS
+#include <boost/spirit/home/classic/utility/flush_multi_pass.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_for.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_for.hpp
new file mode 100644 (file)
index 0000000..9b18f94
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FOR
+#include <boost/spirit/home/classic/dynamic/for.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_functor_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_functor_parser.hpp
new file mode 100644 (file)
index 0000000..f0bfb90
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FUNCTOR_PARSER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FUNCTOR_PARSER
+#include <boost/spirit/home/classic/utility/functor_parser.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_fundamental.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_fundamental.hpp
new file mode 100644 (file)
index 0000000..bced502
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_FUNDAMENTAL
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_FUNDAMENTAL
+#include <boost/spirit/home/classic/meta/fundamental.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar.hpp
new file mode 100644 (file)
index 0000000..a1528af
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR
+#include <boost/spirit/home/classic/core/non_terminal/grammar.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def.hpp
new file mode 100644 (file)
index 0000000..1af6b6a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR_DEF
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR_DEF
+#include <boost/spirit/home/classic/utility/grammar_def.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_grammar_def_fwd.hpp
new file mode 100644 (file)
index 0000000..c07cd73
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR_DEF_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_GRAMMAR_DEF_FWD
+#include <boost/spirit/home/classic/utility/grammar_def_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_if.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_if.hpp
new file mode 100644 (file)
index 0000000..14a84c8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_IF
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_IF
+#include <boost/spirit/home/classic/dynamic/if.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_increment_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_increment_actor.hpp
new file mode 100644 (file)
index 0000000..af0c3b5
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_INCREMENT_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_INCREMENT_ACTOR
+#include <boost/spirit/home/classic/actor/increment_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_at_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_at_actor.hpp
new file mode 100644 (file)
index 0000000..9c75afc
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_INSERT_AT_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_INSERT_AT_ACTOR
+#include <boost/spirit/home/classic/actor/insert_at_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_key_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_insert_key_actor.hpp
new file mode 100644 (file)
index 0000000..d7ce5e8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_INSERT_KEY_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_INSERT_KEY_ACTOR
+#include <boost/spirit/home/classic/actor/insert_key_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_intersection.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_intersection.hpp
new file mode 100644 (file)
index 0000000..386f3f7
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_INTERSECTION
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_INTERSECTION
+#include <boost/spirit/home/classic/core/composite/intersection.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_iterator.hpp
new file mode 100644 (file)
index 0000000..67eb7e8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_ITERATOR
+#include <boost/spirit/home/classic/iterator.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_kleene_star.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_kleene_star.hpp
new file mode 100644 (file)
index 0000000..829318a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_KLEENE_STAR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_KLEENE_STAR
+#include <boost/spirit/home/classic/core/composite/kleene_star.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_lazy.hpp
new file mode 100644 (file)
index 0000000..8f8b344
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_LAZY
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_LAZY
+#include <boost/spirit/home/classic/dynamic/lazy.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_list.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_list.hpp
new file mode 100644 (file)
index 0000000..e3ddaf3
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_LIST
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_LIST
+#include <boost/spirit/home/classic/core/composite/list.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_lists.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_lists.hpp
new file mode 100644 (file)
index 0000000..f5d4b26
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_LISTS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_LISTS
+#include <boost/spirit/home/classic/utility/lists.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_lists_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_lists_fwd.hpp
new file mode 100644 (file)
index 0000000..bd95132
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_LISTS_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_LISTS_FWD
+#include <boost/spirit/home/classic/utility/lists_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_loops.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_loops.hpp
new file mode 100644 (file)
index 0000000..bd5255b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_LOOPS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_LOOPS
+#include <boost/spirit/home/classic/utility/loops.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_match.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_match.hpp
new file mode 100644 (file)
index 0000000..a8e4218
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_MATCH
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_MATCH
+#include <boost/spirit/home/classic/core/match.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_meta.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_meta.hpp
new file mode 100644 (file)
index 0000000..aa604a2
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_META
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_META
+#include <boost/spirit/home/classic/meta.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_minimal.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_minimal.hpp
new file mode 100644 (file)
index 0000000..c4757c8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_MINIMAL
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_MINIMAL
+#include <boost/spirit/home/classic/debug/minimal.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass.hpp
new file mode 100644 (file)
index 0000000..4d4c076
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_MULTI_PASS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_MULTI_PASS
+#include <boost/spirit/home/classic/iterator/multi_pass.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_multi_pass_fwd.hpp
new file mode 100644 (file)
index 0000000..7e5675c
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_MULTI_PASS_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_MULTI_PASS_FWD
+#include <boost/spirit/home/classic/iterator/multi_pass_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_nil.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_nil.hpp
new file mode 100644 (file)
index 0000000..ae47dc2
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_NIL
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_NIL
+#include <boost/spirit/home/classic/core/nil.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_no_actions.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_no_actions.hpp
new file mode 100644 (file)
index 0000000..7fc244a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_NO_ACTIONS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_NO_ACTIONS
+#include <boost/spirit/home/classic/core/composite/no_actions.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics.hpp
new file mode 100644 (file)
index 0000000..75f7c05
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_NUMERICS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_NUMERICS
+#include <boost/spirit/home/classic/core/primitives/numerics.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_numerics_fwd.hpp
new file mode 100644 (file)
index 0000000..b881dfc
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_NUMERICS_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_NUMERICS_FWD
+#include <boost/spirit/home/classic/core/primitives/numerics_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_operators.hpp
new file mode 100644 (file)
index 0000000..c05d947
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_OPERATORS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_OPERATORS
+#include <boost/spirit/home/classic/core/composite/operators.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_optional.hpp
new file mode 100644 (file)
index 0000000..d1bb3db
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_OPTIONAL
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_OPTIONAL
+#include <boost/spirit/home/classic/core/composite/optional.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parametric.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parametric.hpp
new file mode 100644 (file)
index 0000000..38f4cae
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARAMETRIC
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARAMETRIC
+#include <boost/spirit/home/classic/attribute/parametric.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree.hpp
new file mode 100644 (file)
index 0000000..566297b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE
+#include <boost/spirit/home/classic/tree/parse_tree.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_fwd.hpp
new file mode 100644 (file)
index 0000000..f993262
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE_FWD
+#include <boost/spirit/home/classic/tree/parse_tree_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_utils.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parse_tree_utils.hpp
new file mode 100644 (file)
index 0000000..32bb9d4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE_UTILS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSE_TREE_UTILS
+#include <boost/spirit/home/classic/tree/parse_tree_utils.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser.hpp
new file mode 100644 (file)
index 0000000..51051cc
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER
+#include <boost/spirit/home/classic/core/parser.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_context.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_context.hpp
new file mode 100644 (file)
index 0000000..68a9e56
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_CONTEXT
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_CONTEXT
+#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_id.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_id.hpp
new file mode 100644 (file)
index 0000000..128a5a4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_ID
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_ID
+#include <boost/spirit/home/classic/core/non_terminal/parser_id.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_names.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_names.hpp
new file mode 100644 (file)
index 0000000..da4fe80
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_NAMES
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_NAMES
+#include <boost/spirit/home/classic/debug/parser_names.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_parser_traits.hpp
new file mode 100644 (file)
index 0000000..76b8275
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_TRAITS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PARSER_TRAITS
+#include <boost/spirit/home/classic/meta/parser_traits.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator.hpp
new file mode 100644 (file)
index 0000000..441b682
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_POSITION_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_POSITION_ITERATOR
+#include <boost/spirit/home/classic/iterator/position_iterator.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_position_iterator_fwd.hpp
new file mode 100644 (file)
index 0000000..fe4849d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_POSITION_ITERATOR_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_POSITION_ITERATOR_FWD
+#include <boost/spirit/home/classic/iterator/position_iterator_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_positive.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_positive.hpp
new file mode 100644 (file)
index 0000000..9f4a467
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_POSITIVE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_POSITIVE
+#include <boost/spirit/home/classic/core/composite/positive.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_primitives.hpp
new file mode 100644 (file)
index 0000000..02650dd
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PRIMITIVES
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PRIMITIVES
+#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_push_back_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_push_back_actor.hpp
new file mode 100644 (file)
index 0000000..c849a12
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PUSH_BACK_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PUSH_BACK_ACTOR
+#include <boost/spirit/home/classic/actor/push_back_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_push_front_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_push_front_actor.hpp
new file mode 100644 (file)
index 0000000..432fbd4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_PUSH_FRONT_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_PUSH_FRONT_ACTOR
+#include <boost/spirit/home/classic/actor/push_front_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_range_run.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_range_run.hpp
new file mode 100644 (file)
index 0000000..20f3a27
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_RANGE_RUN
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_RANGE_RUN
+#include <boost/spirit/home/classic/utility/impl/chset/range_run.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_actor.hpp
new file mode 100644 (file)
index 0000000..d0c9a7b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REF_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REF_ACTOR
+#include <boost/spirit/home/classic/actor/ref_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_actor.hpp
new file mode 100644 (file)
index 0000000..95b85a6
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_ACTOR
+#include <boost/spirit/home/classic/actor/ref_const_ref_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp
new file mode 100644 (file)
index 0000000..5293ee8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_CONST_REF_A
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_CONST_REF_A
+#include <boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_value_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_const_ref_value_actor.hpp
new file mode 100644 (file)
index 0000000..880fa7f
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_VALUE_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REF_CONST_REF_VALUE_ACTOR
+#include <boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_value_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_ref_value_actor.hpp
new file mode 100644 (file)
index 0000000..3ed730d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REF_VALUE_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REF_VALUE_ACTOR
+#include <boost/spirit/home/classic/actor/ref_value_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_refactoring.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_refactoring.hpp
new file mode 100644 (file)
index 0000000..94f5487
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REFACTORING
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REFACTORING
+#include <boost/spirit/home/classic/meta/refactoring.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_regex.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_regex.hpp
new file mode 100644 (file)
index 0000000..18f05a1
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_REGEX
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_REGEX
+#include <boost/spirit/home/classic/utility/regex.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule.hpp
new file mode 100644 (file)
index 0000000..c2e0df1
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_RULE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_RULE
+#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_alias.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_alias.hpp
new file mode 100644 (file)
index 0000000..6577ab5
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_RULE_ALIAS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_RULE_ALIAS
+#include <boost/spirit/home/classic/dynamic/rule_alias.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_parser.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_rule_parser.hpp
new file mode 100644 (file)
index 0000000..b177518
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_RULE_PARSER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_RULE_PARSER
+#include <boost/spirit/home/classic/utility/rule_parser.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_safe_bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_safe_bool.hpp
new file mode 100644 (file)
index 0000000..a7e470a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SAFE_BOOL
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SAFE_BOOL
+#include <boost/spirit/home/classic/core/safe_bool.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner.hpp
new file mode 100644 (file)
index 0000000..9088d78
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SCANNER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SCANNER
+#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_scanner_fwd.hpp
new file mode 100644 (file)
index 0000000..972dca7
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SCANNER_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SCANNER_FWD
+#include <boost/spirit/home/classic/core/scanner/scanner_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_scoped_lock.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_scoped_lock.hpp
new file mode 100644 (file)
index 0000000..6e1a3e0
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SCOPED_LOCK
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SCOPED_LOCK
+#include <boost/spirit/home/classic/utility/scoped_lock.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_select.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_select.hpp
new file mode 100644 (file)
index 0000000..d7514f3
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SELECT
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SELECT
+#include <boost/spirit/home/classic/dynamic/select.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequence.hpp
new file mode 100644 (file)
index 0000000..babe66b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENCE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENCE
+#include <boost/spirit/home/classic/core/composite/sequence.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_and.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_and.hpp
new file mode 100644 (file)
index 0000000..67465ce
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENTIAL_AND
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENTIAL_AND
+#include <boost/spirit/home/classic/core/composite/sequential_and.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_sequential_or.hpp
new file mode 100644 (file)
index 0000000..f8b6f3d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENTIAL_OR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SEQUENTIAL_OR
+#include <boost/spirit/home/classic/core/composite/sequential_or.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper.hpp
new file mode 100644 (file)
index 0000000..b8faf9a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SKIPPER
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SKIPPER
+#include <boost/spirit/home/classic/core/scanner/skipper.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_skipper_fwd.hpp
new file mode 100644 (file)
index 0000000..6837973
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SKIPPER_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SKIPPER_FWD
+#include <boost/spirit/home/classic/core/scanner/skipper_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_spirit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_spirit.hpp
new file mode 100644 (file)
index 0000000..fcfc851
--- /dev/null
@@ -0,0 +1,13 @@
+/*=============================================================================
+  Copyright (c) 1998-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLASSIC_APR_12_2008_0949AM)
+#define BOOST_SPIRIT_CLASSIC_APR_12_2008_0949AM
+
+#include <boost/spirit/home/classic.hpp>
+
+#endif // !defined(SPIRIT_CLASSIC_HPP)
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_static.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_static.hpp
new file mode 100644 (file)
index 0000000..bd12e0e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_STATIC
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_STATIC
+#include <boost/spirit/home/classic/core/non_terminal/impl/static.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule.hpp
new file mode 100644 (file)
index 0000000..c7370ee
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_STORED_RULE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_STORED_RULE
+#include <boost/spirit/home/classic/dynamic/stored_rule.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_stored_rule_fwd.hpp
new file mode 100644 (file)
index 0000000..0e7b9c6
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_STORED_RULE_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_STORED_RULE_FWD
+#include <boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule.hpp
new file mode 100644 (file)
index 0000000..e16db05
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SUBRULE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SUBRULE
+#include <boost/spirit/home/classic/core/non_terminal/subrule.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_subrule_fwd.hpp
new file mode 100644 (file)
index 0000000..012693f
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SUBRULE_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SUBRULE_FWD
+#include <boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_swap_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_swap_actor.hpp
new file mode 100644 (file)
index 0000000..ad60ebb
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SWAP_ACTOR
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SWAP_ACTOR
+#include <boost/spirit/home/classic/actor/swap_actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_switch.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_switch.hpp
new file mode 100644 (file)
index 0000000..ad6b9ba
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SWITCH
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SWITCH
+#include <boost/spirit/home/classic/dynamic/switch.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols.hpp
new file mode 100644 (file)
index 0000000..ff16ff4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SYMBOLS
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SYMBOLS
+#include <boost/spirit/home/classic/symbols.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_symbols_fwd.hpp
new file mode 100644 (file)
index 0000000..da2dbff
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_SYMBOLS_FWD
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_SYMBOLS_FWD
+#include <boost/spirit/home/classic/symbols/symbols_fwd.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_traverse.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_traverse.hpp
new file mode 100644 (file)
index 0000000..a764234
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_TRAVERSE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_TRAVERSE
+#include <boost/spirit/home/classic/meta/traverse.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_tree_to_xml.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_tree_to_xml.hpp
new file mode 100644 (file)
index 0000000..29dc2ed
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_TREE_TO_XML
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_TREE_TO_XML
+#include <boost/spirit/home/classic/tree/tree_to_xml.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_typeof.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_typeof.hpp
new file mode 100644 (file)
index 0000000..fc9b696
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_TYPEOF
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_TYPEOF
+#include <boost/spirit/home/classic/actor/typeof.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_utility.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_utility.hpp
new file mode 100644 (file)
index 0000000..e4d1b81
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_UTILITY
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_UTILITY
+#include <boost/spirit/home/classic/utility.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_version.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_version.hpp
new file mode 100644 (file)
index 0000000..7944af1
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_VERSION
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_VERSION
+#include <boost/spirit/home/classic/version.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/classic_while.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/classic_while.hpp
new file mode 100644 (file)
index 0000000..e383d40
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_CLASSIC_WHILE
+#define BOOST_SPIRIT_INCLUDE_CLASSIC_WHILE
+#include <boost/spirit/home/classic/dynamic/while.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma.hpp
new file mode 100644 (file)
index 0000000..281250b
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA
+#define BOOST_SPIRIT_INCLUDE_KARMA
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_action.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_action.hpp
new file mode 100644 (file)
index 0000000..690017c
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_ACTION
+#define BOOST_SPIRIT_INCLUDE_KARMA_ACTION
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/action.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_alternative.hpp
new file mode 100644 (file)
index 0000000..c8708a0
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_ALTERNATIVE
+#define BOOST_SPIRIT_INCLUDE_KARMA_ALTERNATIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/alternative.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_and_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_and_predicate.hpp
new file mode 100644 (file)
index 0000000..ee81faa
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_AND_PREDICATE
+#define BOOST_SPIRIT_INCLUDE_KARMA_AND_PREDICATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/and_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_as.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_as.hpp
new file mode 100644 (file)
index 0000000..48b7372
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_AS
+#define BOOST_SPIRIT_INCLUDE_KARMA_AS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/as.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_attr_cast.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_attr_cast.hpp
new file mode 100644 (file)
index 0000000..0699f2c
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_ATTR_CAST
+#define BOOST_SPIRIT_INCLUDE_KARMA_ATTR_CAST
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_auto.hpp
new file mode 100644 (file)
index 0000000..c717793
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_AUTO
+#define BOOST_SPIRIT_INCLUDE_KARMA_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_auxiliary.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_auxiliary.hpp
new file mode 100644 (file)
index 0000000..94b9976
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_AUXILIARY
+#define BOOST_SPIRIT_INCLUDE_KARMA_AUXILIARY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_binary.hpp
new file mode 100644 (file)
index 0000000..85679a8
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_BINARY
+#define BOOST_SPIRIT_INCLUDE_KARMA_BINARY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/binary.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_bool.hpp
new file mode 100644 (file)
index 0000000..e76de1b
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_BOOL
+#define BOOST_SPIRIT_INCLUDE_KARMA_BOOL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric/bool.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_buffer.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_buffer.hpp
new file mode 100644 (file)
index 0000000..c4252a2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_BUFFER
+#define BOOST_SPIRIT_INCLUDE_KARMA_BUFFER
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/buffer.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_center_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_center_alignment.hpp
new file mode 100644 (file)
index 0000000..77fc006
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_CENTER_ALIGNMENT
+#define BOOST_SPIRIT_INCLUDE_KARMA_CENTER_ALIGNMENT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/center_alignment.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_char.hpp
new file mode 100644 (file)
index 0000000..e129f3e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_CHAR
+#define BOOST_SPIRIT_INCLUDE_KARMA_CHAR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/char.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_char_.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_char_.hpp
new file mode 100644 (file)
index 0000000..018a097
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_CHAR_
+#define BOOST_SPIRIT_INCLUDE_KARMA_CHAR_
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/char/char.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_char_class.hpp
new file mode 100644 (file)
index 0000000..a26ceb9
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_CHAR_CLASS
+#define BOOST_SPIRIT_INCLUDE_KARMA_CHAR_CLASS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/char/char_class.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_columns.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_columns.hpp
new file mode 100644 (file)
index 0000000..87feb2f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_COLUMNS
+#define BOOST_SPIRIT_INCLUDE_KARMA_COLUMNS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/columns.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_delimit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_delimit.hpp
new file mode 100644 (file)
index 0000000..177925f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_DELIMIT
+#define BOOST_SPIRIT_INCLUDE_KARMA_DELIMIT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/delimit.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_directive.hpp
new file mode 100644 (file)
index 0000000..bfc4b3f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_DIRECTIVE
+#define BOOST_SPIRIT_INCLUDE_KARMA_DIRECTIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_domain.hpp
new file mode 100644 (file)
index 0000000..cb33991
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_DOMAIN
+#define BOOST_SPIRIT_INCLUDE_KARMA_DOMAIN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_duplicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_duplicate.hpp
new file mode 100644 (file)
index 0000000..7607301
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_DUPLICATE
+#define BOOST_SPIRIT_INCLUDE_KARMA_DUPLICATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/duplicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_eol.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_eol.hpp
new file mode 100644 (file)
index 0000000..b720bc2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_EOL
+#define BOOST_SPIRIT_INCLUDE_KARMA_EOL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary/eol.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_eps.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_eps.hpp
new file mode 100644 (file)
index 0000000..82d4cce
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_EPS
+#define BOOST_SPIRIT_INCLUDE_KARMA_EPS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary/eps.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_format.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_format.hpp
new file mode 100644 (file)
index 0000000..3fb071a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_FORMAT
+#define BOOST_SPIRIT_INCLUDE_KARMA_FORMAT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/format.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_format_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_format_attr.hpp
new file mode 100644 (file)
index 0000000..88fbd60
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_FORMAT_ATTR
+#define BOOST_SPIRIT_INCLUDE_KARMA_FORMAT_ATTR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/stream/format_manip_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_format_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_format_auto.hpp
new file mode 100644 (file)
index 0000000..fffa730
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_FORMAT_AUTO
+#define BOOST_SPIRIT_INCLUDE_KARMA_FORMAT_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/format_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate.hpp
new file mode 100644 (file)
index 0000000..4ad2f15
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_GENERATE
+#define BOOST_SPIRIT_INCLUDE_KARMA_GENERATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/generate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_attr.hpp
new file mode 100644 (file)
index 0000000..09e0e18
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_GENERATE_ATTR
+#define BOOST_SPIRIT_INCLUDE_KARMA_GENERATE_ATTR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/generate_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_generate_auto.hpp
new file mode 100644 (file)
index 0000000..97abd81
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_GENERATE_AUTO
+#define BOOST_SPIRIT_INCLUDE_KARMA_GENERATE_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/generate.hpp>
+#include <boost/spirit/home/karma/detail/generate_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_grammar.hpp
new file mode 100644 (file)
index 0000000..a389831
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL_GRAMMAR
+#define BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL_GRAMMAR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/nonterminal/grammar.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_int.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_int.hpp
new file mode 100644 (file)
index 0000000..79b7bb1
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_INT
+#define BOOST_SPIRIT_INCLUDE_KARMA_INT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric/int.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_kleene.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_kleene.hpp
new file mode 100644 (file)
index 0000000..344b84b
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_KLEENE
+#define BOOST_SPIRIT_INCLUDE_KARMA_KLEENE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/kleene.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_lazy.hpp
new file mode 100644 (file)
index 0000000..1b7f638
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_LAZY
+#define BOOST_SPIRIT_INCLUDE_KARMA_LAZY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/auxiliary/lazy.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_left_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_left_alignment.hpp
new file mode 100644 (file)
index 0000000..59c022d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_LEFT_ALIGNMENT
+#define BOOST_SPIRIT_INCLUDE_KARMA_LEFT_ALIGNMENT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/left_alignment.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_list.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_list.hpp
new file mode 100644 (file)
index 0000000..c5e235b
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_LIST
+#define BOOST_SPIRIT_INCLUDE_KARMA_LIST
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/list.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_maxwidth.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_maxwidth.hpp
new file mode 100644 (file)
index 0000000..f7a2741
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_MAXWIDTH
+#define BOOST_SPIRIT_INCLUDE_KARMA_MAXWIDTH
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/maxwidth.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_no_delimit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_no_delimit.hpp
new file mode 100644 (file)
index 0000000..4d31b22
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NO_DELIMIT
+#define BOOST_SPIRIT_INCLUDE_KARMA_NO_DELIMIT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/no_delimit.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_nonterminal.hpp
new file mode 100644 (file)
index 0000000..1b77e34
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL
+#define BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/nonterminal.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_not_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_not_predicate.hpp
new file mode 100644 (file)
index 0000000..924b911
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NOT_PREDICATE
+#define BOOST_SPIRIT_INCLUDE_KARMA_NOT_PREDICATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/not_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_numeric.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_numeric.hpp
new file mode 100644 (file)
index 0000000..c76dcd1
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NUMERIC
+#define BOOST_SPIRIT_INCLUDE_KARMA_NUMERIC
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_omit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_omit.hpp
new file mode 100644 (file)
index 0000000..8d54c62
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_OMIT
+#define BOOST_SPIRIT_INCLUDE_KARMA_OMIT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/omit.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_operator.hpp
new file mode 100644 (file)
index 0000000..5aece79
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_OPERATOR
+#define BOOST_SPIRIT_INCLUDE_KARMA_OPERATOR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_optional.hpp
new file mode 100644 (file)
index 0000000..8514371
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_OPTIONAL
+#define BOOST_SPIRIT_INCLUDE_KARMA_OPTIONAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/optional.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_phoenix_attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_phoenix_attributes.hpp
new file mode 100644 (file)
index 0000000..f7f88f9
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_PHOENIX_ATTRIBUTES
+#define BOOST_SPIRIT_INCLUDE_KARMA_PHOENIX_ATTRIBUTES
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/phoenix_attributes.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_plus.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_plus.hpp
new file mode 100644 (file)
index 0000000..925a25e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_PLUS
+#define BOOST_SPIRIT_INCLUDE_KARMA_PLUS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/plus.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_real.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_real.hpp
new file mode 100644 (file)
index 0000000..e6f5585
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_REAL
+#define BOOST_SPIRIT_INCLUDE_KARMA_REAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric/real.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_repeat.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_repeat.hpp
new file mode 100644 (file)
index 0000000..b172340
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_REPEAT
+#define BOOST_SPIRIT_INCLUDE_KARMA_REPEAT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/repeat.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_right_alignment.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_right_alignment.hpp
new file mode 100644 (file)
index 0000000..15bc145
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_RIGHT_ALIGNMENT
+#define BOOST_SPIRIT_INCLUDE_KARMA_RIGHT_ALIGNMENT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/right_alignment.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_rule.hpp
new file mode 100644 (file)
index 0000000..ca9ffb6
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL_RULE
+#define BOOST_SPIRIT_INCLUDE_KARMA_NONTERMINAL_RULE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/nonterminal/rule.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_sequence.hpp
new file mode 100644 (file)
index 0000000..8f49f91
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_SEQUENCE
+#define BOOST_SPIRIT_INCLUDE_KARMA_SEQUENCE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/operator/sequence.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_stream.hpp
new file mode 100644 (file)
index 0000000..3b3bd9d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_STREAM
+#define BOOST_SPIRIT_INCLUDE_KARMA_STREAM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_strict_relaxed.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_strict_relaxed.hpp
new file mode 100644 (file)
index 0000000..6b901d8
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_STRICT_RELAXED
+#define BOOST_SPIRIT_INCLUDE_KARMA_STRICT_RELAXED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/strict_relaxed.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_string.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_string.hpp
new file mode 100644 (file)
index 0000000..08ff085
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_STRING
+#define BOOST_SPIRIT_INCLUDE_KARMA_STRING
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/string.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_symbols.hpp
new file mode 100644 (file)
index 0000000..f51a5fc
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_SYMBOLS
+#define BOOST_SPIRIT_INCLUDE_KARMA_SYMBOLS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/string/symbols.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_uint.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_uint.hpp
new file mode 100644 (file)
index 0000000..ca66c26
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_UINT
+#define BOOST_SPIRIT_INCLUDE_KARMA_UINT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/numeric/uint.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_upper_lower_case.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_upper_lower_case.hpp
new file mode 100644 (file)
index 0000000..07e2617
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_UPPER_LOWER_CASE
+#define BOOST_SPIRIT_INCLUDE_KARMA_UPPER_LOWER_CASE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/upper_lower_case.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_verbatim.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_verbatim.hpp
new file mode 100644 (file)
index 0000000..87977a4
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_VERBATIM
+#define BOOST_SPIRIT_INCLUDE_KARMA_VERBATIM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/directive/verbatim.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/karma_what.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/karma_what.hpp
new file mode 100644 (file)
index 0000000..f81d180
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_WHAT
+#define BOOST_SPIRIT_INCLUDE_KARMA_WHAT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/what.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex.hpp
new file mode 100644 (file)
index 0000000..e0759c8
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX
+#define BOOST_SPIRIT_INCLUDE_LEX
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_char_token_def.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_char_token_def.hpp
new file mode 100644 (file)
index 0000000..0345e0d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_CHAR_TOKEN_DEF
+#define BOOST_SPIRIT_INCLUDE_LEX_CHAR_TOKEN_DEF
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/char_token_def.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_domain.hpp
new file mode 100644 (file)
index 0000000..f5f8a9a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_DOMAIN
+#define BOOST_SPIRIT_INCLUDE_LEX_DOMAIN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/domain.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_generate_static_lexertl.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_generate_static_lexertl.hpp
new file mode 100644 (file)
index 0000000..777ade2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXER_GENERATE_STATIC_LEXERTL
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXER_GENERATE_STATIC_LEXERTL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/lexertl/generate_static.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexer.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexer.hpp
new file mode 100644 (file)
index 0000000..051d08a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXER
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXER
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl.hpp
new file mode 100644 (file)
index 0000000..8c0e17d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXERTL
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXERTL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer_lexertl.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_position_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_position_token.hpp
new file mode 100644 (file)
index 0000000..79bb98c
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXERTL_POSITION_TOKEN
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXERTL_POSITION_TOKEN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/lexertl/position_token.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_lexertl_token.hpp
new file mode 100644 (file)
index 0000000..0d82098
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXERTL_TOKEN
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXERTL_TOKEN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer/lexertl/token.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_plain_token.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_plain_token.hpp
new file mode 100644 (file)
index 0000000..a94045a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_PLAIN_TOKEN
+#define BOOST_SPIRIT_INCLUDE_LEX_PLAIN_TOKEN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/qi.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_primitives.hpp
new file mode 100644 (file)
index 0000000..0304495
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_PRIMITIVES
+#define BOOST_SPIRIT_INCLUDE_LEX_PRIMITIVES
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/primitives.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_static_lexertl.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_static_lexertl.hpp
new file mode 100644 (file)
index 0000000..ce06d5d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_LEXER_STATIC_LEXERTL
+#define BOOST_SPIRIT_INCLUDE_LEX_LEXER_STATIC_LEXERTL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/lexer_static_lexertl.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse.hpp
new file mode 100644 (file)
index 0000000..9223594
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_TOKENIZE_AND_PARSE
+#define BOOST_SPIRIT_INCLUDE_LEX_TOKENIZE_AND_PARSE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/tokenize_and_parse.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/lex_tokenize_and_parse_attr.hpp
new file mode 100644 (file)
index 0000000..9f3a034
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_LEX_TOKENIZE_AND_PARSE_ATTR
+#define BOOST_SPIRIT_INCLUDE_LEX_TOKENIZE_AND_PARSE_ATTR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/lex/tokenize_and_parse_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix.hpp
new file mode 100644 (file)
index 0000000..7915d74
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX
+#define BOOST_SPIRIT_INCLUDE_PHOENIX
+#include <boost/phoenix.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1.hpp
new file mode 100644 (file)
index 0000000..fb75af1
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1
+#include <boost/spirit/home/classic/phoenix.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_actor.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_actor.hpp
new file mode 100644 (file)
index 0000000..746d529
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_ACTOR
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_ACTOR
+#include <boost/spirit/home/classic/phoenix/actor.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_binders.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_binders.hpp
new file mode 100644 (file)
index 0000000..f7b0220
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_BINDERS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_BINDERS
+#include <boost/spirit/home/classic/phoenix/binders.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_casts.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_casts.hpp
new file mode 100644 (file)
index 0000000..baee624
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_CASTS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_CASTS
+#include <boost/spirit/home/classic/phoenix/casts.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_closures.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_closures.hpp
new file mode 100644 (file)
index 0000000..532bfa2
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_CLOSURES
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_CLOSURES
+#include <boost/spirit/home/classic/phoenix/closures.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_composite.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_composite.hpp
new file mode 100644 (file)
index 0000000..14669dd
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_COMPOSITE
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_COMPOSITE
+#include <boost/spirit/home/classic/phoenix/composite.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_functions.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_functions.hpp
new file mode 100644 (file)
index 0000000..42caf55
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_FUNCTIONS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_FUNCTIONS
+#include <boost/spirit/home/classic/phoenix/functions.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_new.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_new.hpp
new file mode 100644 (file)
index 0000000..4dbfad2
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_NEW
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_NEW
+#include <boost/spirit/home/classic/phoenix/new.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_operators.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_operators.hpp
new file mode 100644 (file)
index 0000000..ce5faae
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_OPERATORS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_OPERATORS
+#include <boost/spirit/home/classic/phoenix/operators.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_primitives.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_primitives.hpp
new file mode 100644 (file)
index 0000000..6097b74
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_PRIMITIVES
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_PRIMITIVES
+#include <boost/spirit/home/classic/phoenix/primitives.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_special_ops.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_special_ops.hpp
new file mode 100644 (file)
index 0000000..be9437c
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_SPECIAL_OPS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_SPECIAL_OPS
+#include <boost/spirit/home/classic/phoenix/special_ops.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_statements.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_statements.hpp
new file mode 100644 (file)
index 0000000..9592f6d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_STATEMENTS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_STATEMENTS
+#include <boost/spirit/home/classic/phoenix/statements.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuple_helpers.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuple_helpers.hpp
new file mode 100644 (file)
index 0000000..d275302
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_TUPLE_HELPERS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_TUPLE_HELPERS
+#include <boost/spirit/home/classic/phoenix/tuple_helpers.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuples.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix1_tuples.hpp
new file mode 100644 (file)
index 0000000..7a0b5f4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+  Copyright (c) 2001-2008 Joel de Guzman
+  Copyright (c) 2001-2008 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX1_TUPLES
+#define BOOST_SPIRIT_INCLUDE_PHOENIX1_TUPLES
+#include <boost/spirit/home/classic/phoenix/tuples.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_algorithm.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_algorithm.hpp
new file mode 100644 (file)
index 0000000..9b434e4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_ALGORITHM
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_ALGORITHM
+#include <boost/phoenix/stl/algorithm.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_bind.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_bind.hpp
new file mode 100644 (file)
index 0000000..1c8cd4e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_BIND
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_BIND
+#include <boost/phoenix/bind.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_container.hpp
new file mode 100644 (file)
index 0000000..c78e28b
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_CONTAINER
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_CONTAINER
+#include <boost/phoenix/stl/container.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_core.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_core.hpp
new file mode 100644 (file)
index 0000000..d08ed06
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_CORE
+#include <boost/phoenix/core.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_function.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_function.hpp
new file mode 100644 (file)
index 0000000..6ab828f
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_FUNCTION
+#include <boost/phoenix/function.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_fusion.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_fusion.hpp
new file mode 100644 (file)
index 0000000..4820ba8
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_FUSION
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_FUSION
+#include <boost/phoenix/fusion.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_limits.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_limits.hpp
new file mode 100644 (file)
index 0000000..93a1e1e
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_LIMITS
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_LIMITS
+#include <boost/phoenix/core/limits.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_object.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_object.hpp
new file mode 100644 (file)
index 0000000..43be44d
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_OBJECT
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_OBJECT
+#include <boost/phoenix/object.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_operator.hpp
new file mode 100644 (file)
index 0000000..5ba6921
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_OPERATOR
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_OPERATOR
+#include <boost/phoenix/operator.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_scope.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_scope.hpp
new file mode 100644 (file)
index 0000000..6ab3d95
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_SCOPE
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_SCOPE
+#include <boost/phoenix/scope.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_statement.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_statement.hpp
new file mode 100644 (file)
index 0000000..498b70f
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_STATEMENT
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_STATEMENT
+#include <boost/phoenix/statement.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_stl.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_stl.hpp
new file mode 100644 (file)
index 0000000..c60bfb4
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_STL
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_STL
+#include <boost/phoenix/stl.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_version.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/phoenix_version.hpp
new file mode 100644 (file)
index 0000000..3d0327a
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_PHOENIX_VERSION
+#define BOOST_SPIRIT_INCLUDE_PHOENIX_VERSION
+#include <boost/phoenix/version.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi.hpp
new file mode 100644 (file)
index 0000000..58da629
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI
+#define BOOST_SPIRIT_INCLUDE_QI
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_action.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_action.hpp
new file mode 100644 (file)
index 0000000..27a7c30
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_ACTION
+#define BOOST_SPIRIT_INCLUDE_QI_ACTION
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/action.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_alternative.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_alternative.hpp
new file mode 100644 (file)
index 0000000..c7979c2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_ALTERNATIVE
+#define BOOST_SPIRIT_INCLUDE_QI_ALTERNATIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/alternative.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_and_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_and_predicate.hpp
new file mode 100644 (file)
index 0000000..3718353
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_AND_PREDICATE
+#define BOOST_SPIRIT_INCLUDE_QI_AND_PREDICATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/and_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_as.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_as.hpp
new file mode 100644 (file)
index 0000000..ef8ec31
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_AS
+#define BOOST_SPIRIT_INCLUDE_QI_AS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/as.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_as_string.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_as_string.hpp
new file mode 100644 (file)
index 0000000..06edff6
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_AS_STRING
+#define BOOST_SPIRIT_INCLUDE_QI_AS_STRING
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/as.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_attr.hpp
new file mode 100644 (file)
index 0000000..c7f8b8a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_ATTR
+#define BOOST_SPIRIT_INCLUDE_QI_ATTR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_attr_cast.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_attr_cast.hpp
new file mode 100644 (file)
index 0000000..bf89a21
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_ATTR_CAST
+#define BOOST_SPIRIT_INCLUDE_QI_ATTR_CAST
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/attr_cast.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_auto.hpp
new file mode 100644 (file)
index 0000000..c0a0a42
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_AUTO
+#define BOOST_SPIRIT_INCLUDE_QI_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_auxiliary.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_auxiliary.hpp
new file mode 100644 (file)
index 0000000..7f39728
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_AUXILIARY
+#define BOOST_SPIRIT_INCLUDE_QI_AUXILIARY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_binary.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_binary.hpp
new file mode 100644 (file)
index 0000000..4920a4a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_BINARY
+#define BOOST_SPIRIT_INCLUDE_QI_BINARY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/binary.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_bool.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_bool.hpp
new file mode 100644 (file)
index 0000000..a70ad4f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_BOOL
+#define BOOST_SPIRIT_INCLUDE_QI_BOOL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/bool.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_char.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_char.hpp
new file mode 100644 (file)
index 0000000..c5197f5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_CHAR
+#define BOOST_SPIRIT_INCLUDE_QI_CHAR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/char.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_char_.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_char_.hpp
new file mode 100644 (file)
index 0000000..ea4fc57
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_CHAR_
+#define BOOST_SPIRIT_INCLUDE_QI_CHAR_
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/char/char.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_char_class.hpp
new file mode 100644 (file)
index 0000000..f062d5d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_CHAR_CLASS
+#define BOOST_SPIRIT_INCLUDE_QI_CHAR_CLASS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/char/char_class.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_copy.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_copy.hpp
new file mode 100644 (file)
index 0000000..6ad8c3f
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2012 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_COPY
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_COPY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/copy.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_core.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_core.hpp
new file mode 100644 (file)
index 0000000..0cf6181
--- /dev/null
@@ -0,0 +1,27 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_CORE
+#define BOOST_SPIRIT_INCLUDE_QI_CORE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/what.hpp>
+#include <boost/spirit/home/qi/action.hpp>
+#include <boost/spirit/home/qi/char.hpp>
+#include <boost/spirit/home/qi/directive.hpp>
+#include <boost/spirit/home/qi/nonterminal.hpp>
+#include <boost/spirit/home/qi/numeric.hpp>
+#include <boost/spirit/home/qi/operator.hpp>
+#include <boost/spirit/home/qi/string.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_difference.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_difference.hpp
new file mode 100644 (file)
index 0000000..2ad5f25
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_DIFFERENCE
+#define BOOST_SPIRIT_INCLUDE_QI_DIFFERENCE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/difference.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_directive.hpp
new file mode 100644 (file)
index 0000000..7cb06af
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_DIRECTIVE
+#define BOOST_SPIRIT_INCLUDE_QI_DIRECTIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_domain.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_domain.hpp
new file mode 100644 (file)
index 0000000..ed1eaaa
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_DOMAIN
+#define BOOST_SPIRIT_INCLUDE_QI_DOMAIN
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_eoi.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_eoi.hpp
new file mode 100644 (file)
index 0000000..017c574
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_EOI
+#define BOOST_SPIRIT_INCLUDE_QI_EOI
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/eoi.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_eol.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_eol.hpp
new file mode 100644 (file)
index 0000000..94a262e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_EOL
+#define BOOST_SPIRIT_INCLUDE_QI_EOL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/eol.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_eps.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_eps.hpp
new file mode 100644 (file)
index 0000000..3bb2dcc
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_EPS
+#define BOOST_SPIRIT_INCLUDE_QI_EPS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/eps.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_expect.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_expect.hpp
new file mode 100644 (file)
index 0000000..bfcd739
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_EXPECT
+#define BOOST_SPIRIT_INCLUDE_QI_EXPECT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/expect.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_grammar.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_grammar.hpp
new file mode 100644 (file)
index 0000000..7289842
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_GRAMMAR
+#define BOOST_SPIRIT_INCLUDE_QI_GRAMMAR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/nonterminal/grammar.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_hold.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_hold.hpp
new file mode 100644 (file)
index 0000000..78a4bb5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_HOLD
+#define BOOST_SPIRIT_INCLUDE_QI_HOLD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/hold.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_int.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_int.hpp
new file mode 100644 (file)
index 0000000..a2bbd66
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_INT
+#define BOOST_SPIRIT_INCLUDE_QI_INT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/int.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_kleene.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_kleene.hpp
new file mode 100644 (file)
index 0000000..64360d6
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_KLEENE
+#define BOOST_SPIRIT_INCLUDE_QI_KLEENE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/kleene.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_lazy.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_lazy.hpp
new file mode 100644 (file)
index 0000000..bfb2bcb
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_LAZY
+#define BOOST_SPIRIT_INCLUDE_QI_LAZY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_lexeme.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_lexeme.hpp
new file mode 100644 (file)
index 0000000..bfda35d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_LEXEME
+#define BOOST_SPIRIT_INCLUDE_QI_LEXEME
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/lexeme.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_list.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_list.hpp
new file mode 100644 (file)
index 0000000..2e5977a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_LIST
+#define BOOST_SPIRIT_INCLUDE_QI_LIST
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/list.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_lit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_lit.hpp
new file mode 100644 (file)
index 0000000..89b2fbd
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_LIT
+#define BOOST_SPIRIT_INCLUDE_QI_LIT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string/lit.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_match.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_match.hpp
new file mode 100644 (file)
index 0000000..34d3de5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_MATCH
+#define BOOST_SPIRIT_INCLUDE_QI_MATCH
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/match.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_match_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_match_attr.hpp
new file mode 100644 (file)
index 0000000..ad34bd0
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_MATCH_ATTR
+#define BOOST_SPIRIT_INCLUDE_QI_MATCH_ATTR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream/match_manip_attr.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_match_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_match_auto.hpp
new file mode 100644 (file)
index 0000000..c21f217
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_MATCH_AUTO
+#define BOOST_SPIRIT_INCLUDE_QI_MATCH_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/match_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_matches.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_matches.hpp
new file mode 100644 (file)
index 0000000..57ee93e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_MATCHES
+#define BOOST_SPIRIT_INCLUDE_QI_MATCHES
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/matches.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_no_case.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_no_case.hpp
new file mode 100644 (file)
index 0000000..78a7a6e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_NO_CASE
+#define BOOST_SPIRIT_INCLUDE_QI_NO_CASE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/no_case.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_no_skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_no_skip.hpp
new file mode 100644 (file)
index 0000000..1a46285
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_NO_SKIP
+#define BOOST_SPIRIT_INCLUDE_QI_NO_SKIP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/no_skip.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_nonterminal.hpp
new file mode 100644 (file)
index 0000000..d8f4a02
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_NONTERMINAL
+#define BOOST_SPIRIT_INCLUDE_QI_NONTERMINAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/nonterminal.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_not_predicate.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_not_predicate.hpp
new file mode 100644 (file)
index 0000000..6ea2414
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_NOT_PREDICATE
+#define BOOST_SPIRIT_INCLUDE_QI_NOT_PREDICATE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/not_predicate.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_numeric.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_numeric.hpp
new file mode 100644 (file)
index 0000000..dfe2c8d
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_NUMERIC
+#define BOOST_SPIRIT_INCLUDE_QI_NUMERIC
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_omit.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_omit.hpp
new file mode 100644 (file)
index 0000000..0ff74d3
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_OMIT
+#define BOOST_SPIRIT_INCLUDE_QI_OMIT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/omit.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_operator.hpp
new file mode 100644 (file)
index 0000000..d58ca0a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_OPERATOR
+#define BOOST_SPIRIT_INCLUDE_QI_OPERATOR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_optional.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_optional.hpp
new file mode 100644 (file)
index 0000000..da76e70
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_OPTIONAL
+#define BOOST_SPIRIT_INCLUDE_QI_OPTIONAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/optional.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse.hpp
new file mode 100644 (file)
index 0000000..79e5e03
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_PARSE
+#define BOOST_SPIRIT_INCLUDE_QI_PARSE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parse.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_attr.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_attr.hpp
new file mode 100644 (file)
index 0000000..51058ce
--- /dev/null
@@ -0,0 +1,12 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_PARSE_ATTR
+#define BOOST_SPIRIT_INCLUDE_QI_PARSE_ATTR
+#include <boost/spirit/home/qi/parse_attr.hpp>
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_parse_auto.hpp
new file mode 100644 (file)
index 0000000..21f784d
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_PARSE_AUTO
+#define BOOST_SPIRIT_INCLUDE_QI_PARSE_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/parse.hpp>
+#include <boost/spirit/home/qi/detail/parse_auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_permutation.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_permutation.hpp
new file mode 100644 (file)
index 0000000..5991791
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_PERMUTATION
+#define BOOST_SPIRIT_INCLUDE_QI_PERMUTATION
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/permutation.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_plus.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_plus.hpp
new file mode 100644 (file)
index 0000000..7f7a144
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_PLUS
+#define BOOST_SPIRIT_INCLUDE_QI_PLUS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/plus.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_raw.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_raw.hpp
new file mode 100644 (file)
index 0000000..cf9a419
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_RAW
+#define BOOST_SPIRIT_INCLUDE_QI_RAW
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/raw.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_real.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_real.hpp
new file mode 100644 (file)
index 0000000..d8c6347
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REAL
+#define BOOST_SPIRIT_INCLUDE_QI_REAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/real.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_repeat.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_repeat.hpp
new file mode 100644 (file)
index 0000000..e42dff6
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPEAT
+#define BOOST_SPIRIT_INCLUDE_QI_REPEAT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/repeat.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_rule.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_rule.hpp
new file mode 100644 (file)
index 0000000..f407da5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_RULE
+#define BOOST_SPIRIT_INCLUDE_QI_RULE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/nonterminal/rule.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_sequence.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_sequence.hpp
new file mode 100644 (file)
index 0000000..515ebcb
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_SEQUENCE
+#define BOOST_SPIRIT_INCLUDE_QI_SEQUENCE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/sequence.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_sequential_or.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_sequential_or.hpp
new file mode 100644 (file)
index 0000000..e048716
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_SEQUENTIAL_OR
+#define BOOST_SPIRIT_INCLUDE_QI_SEQUENTIAL_OR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/operator/sequential_or.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_skip.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_skip.hpp
new file mode 100644 (file)
index 0000000..aa14070
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_SKIP
+#define BOOST_SPIRIT_INCLUDE_QI_SKIP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/directive/skip.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_stream.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_stream.hpp
new file mode 100644 (file)
index 0000000..3a5f6c5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_STREAM
+#define BOOST_SPIRIT_INCLUDE_QI_STREAM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/stream.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_string.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_string.hpp
new file mode 100644 (file)
index 0000000..74bcfe1
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_STRING
+#define BOOST_SPIRIT_INCLUDE_QI_STRING
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_symbols.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_symbols.hpp
new file mode 100644 (file)
index 0000000..34558ea
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_SYMBOLS
+#define BOOST_SPIRIT_INCLUDE_QI_SYMBOLS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/string/symbols.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_uint.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_uint.hpp
new file mode 100644 (file)
index 0000000..e70295e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_UINT
+#define BOOST_SPIRIT_INCLUDE_QI_UINT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/numeric/uint.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/qi_what.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/qi_what.hpp
new file mode 100644 (file)
index 0000000..2b08cdd
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_WHAT
+#define BOOST_SPIRIT_INCLUDE_QI_WHAT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/what.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support.hpp
new file mode 100644 (file)
index 0000000..8089bb8
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT
+#define BOOST_SPIRIT_INCLUDE_SUPPORT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_adapt_adt_attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_adapt_adt_attributes.hpp
new file mode 100644 (file)
index 0000000..b28419b
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ADAPT_ADT_ATTRIBUTES
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ADAPT_ADT_ATTRIBUTES
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/adapt_adt_attributes.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_any.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_any.hpp
new file mode 100644 (file)
index 0000000..a1979d9
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ANY
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ANY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/algorithm/any.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_any_if.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_any_if.hpp
new file mode 100644 (file)
index 0000000..5fa9a58
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_IF
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_IF
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/algorithm/any_if.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_any_if_ns.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_any_if_ns.hpp
new file mode 100644 (file)
index 0000000..26c6a7f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_IF_NS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_IF_NS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/algorithm/any_if_ns.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_any_ns.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_any_ns.hpp
new file mode 100644 (file)
index 0000000..3826aff
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_NS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ANY_NS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/algorithm/any_ns.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_argument.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_argument.hpp
new file mode 100644 (file)
index 0000000..f45b766
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ARGUMENT
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ARGUMENT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/argument.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_ascii.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_ascii.hpp
new file mode 100644 (file)
index 0000000..5c08036
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ASCII
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ASCII
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_encoding/ascii.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_attributes.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_attributes.hpp
new file mode 100644 (file)
index 0000000..ecb68ff
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ATTRIBUTE_OF
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ATTRIBUTE_OF
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/attributes.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_attributes_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_attributes_fwd.hpp
new file mode 100644 (file)
index 0000000..ad72ed5
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ATTRIBUTE_FWD
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ATTRIBUTE_FWD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_auto.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_auto.hpp
new file mode 100644 (file)
index 0000000..6021d84
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2012 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_AUTO
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_AUTO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/auto.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_char_class.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_char_class.hpp
new file mode 100644 (file)
index 0000000..b88346e
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_CHAR_CLASS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_CHAR_CLASS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_class.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_container.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_container.hpp
new file mode 100644 (file)
index 0000000..cfd6c9f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_CONTAINER
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_CONTAINER
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/container.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_extended_variant.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_extended_variant.hpp
new file mode 100644 (file)
index 0000000..f58e843
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_EXTENDED_VARIANT
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_EXTENDED_VARIANT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/extended_variant.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_info.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_info.hpp
new file mode 100644 (file)
index 0000000..73c03e2
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_INFO
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_INFO
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/info.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_iso8859_1.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_iso8859_1.hpp
new file mode 100644 (file)
index 0000000..d781cd3
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ISO8859_1
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ISO8859_1
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_istream_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_istream_iterator.hpp
new file mode 100644 (file)
index 0000000..d1bafed
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_ISTREAM_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_ISTREAM_ITERATOR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/istream_iterator.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_line_pos_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_line_pos_iterator.hpp
new file mode 100644 (file)
index 0000000..d5ed045
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    Copyright (c)      2010 Bryce Lelbach
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_LINE_POS_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_LINE_POS_ITERATOR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/line_pos_iterator.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_locals.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_locals.hpp
new file mode 100644 (file)
index 0000000..d5a88ab
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_LOCALS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_LOCALS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_look_ahead.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_look_ahead.hpp
new file mode 100644 (file)
index 0000000..71dabdf
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_LOOK_AHEAD
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_LOOK_AHEAD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/look_ahead.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_modify.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_modify.hpp
new file mode 100644 (file)
index 0000000..c51f4b6
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_MODIFY
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_MODIFY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/modify.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass.hpp
new file mode 100644 (file)
index 0000000..7888320
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_MULTI_PASS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_MULTI_PASS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/multi_pass.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass_fwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_multi_pass_fwd.hpp
new file mode 100644 (file)
index 0000000..9aebbeb
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_MULTI_PASS_FWD
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_MULTI_PASS_FWD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_ostream_iterator.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_ostream_iterator.hpp
new file mode 100644 (file)
index 0000000..19c0185
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_OSTREAM_ITERATOR
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_OSTREAM_ITERATOR
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/iterators/ostream_iterator.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_standard.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_standard.hpp
new file mode 100644 (file)
index 0000000..24ea6a7
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_STANDARD
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_STANDARD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_encoding/standard.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_standard_wide.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_standard_wide.hpp
new file mode 100644 (file)
index 0000000..74c85b0
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_STANDARD_WIDE
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_STANDARD_WIDE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_string_traits.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_string_traits.hpp
new file mode 100644 (file)
index 0000000..e2bf0d9
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_STRING_TRAITS
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_STRING_TRAITS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/string_traits.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_unused.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_unused.hpp
new file mode 100644 (file)
index 0000000..d5cedc2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_UNUSED
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_UNUSED
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/support_utree.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/support_utree.hpp
new file mode 100644 (file)
index 0000000..2c36ba8
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_SUPPORT_UTREE
+#define BOOST_SPIRIT_INCLUDE_SUPPORT_UTREE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/utree.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/include/version.hpp b/bundled/boost-1.56.0/include/boost/spirit/include/version.hpp
new file mode 100644 (file)
index 0000000..90f8b53
--- /dev/null
@@ -0,0 +1,20 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  Copyright (c) 2001-2011 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_VERSION_INCLUDED)
+#define SPIRIT_VERSION_INCLUDED
+
+///////////////////////////////////////////////////////////////////////////////
+//
+//  This is the version of the current Spirit distribution
+//
+///////////////////////////////////////////////////////////////////////////////
+#define SPIRIT_VERSION 0x2053
+#define SPIRIT_PIZZA_VERSION SUPER_HOT_SPANISH_SARDINES  // :-O
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma.hpp
new file mode 100644 (file)
index 0000000..11e1543
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_KARMA_APR_28_2009_1259PM)
+#define SPIRIT_REPOSITORY_KARMA_APR_28_2009_1259PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/directive.hpp>
+#include <boost/spirit/repository/home/karma/nonterminal.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive.hpp
new file mode 100644 (file)
index 0000000..716c3a2
--- /dev/null
@@ -0,0 +1,17 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_KARMA_DIRECTIVE_APR_28_2009_1258PM)
+#define SPIRIT_REPOSITORY_KARMA_DIRECTIVE_APR_28_2009_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/directive/confix.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive/confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/directive/confix.hpp
new file mode 100644 (file)
index 0000000..cc7bd99
--- /dev/null
@@ -0,0 +1,140 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_KARMA_CONFIX_AUG_19_2008_1041AM)
+#define BOOST_SPIRIT_REPOSITORY_KARMA_CONFIX_AUG_19_2008_1041AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+
+#include <boost/spirit/repository/home/support/confix.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/or.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables confix(..., ...)[]
+    template <typename Prefix, typename Suffix>
+    struct use_directive<karma::domain
+          , terminal_ex<repository::tag::confix, fusion::vector2<Prefix, Suffix> > >
+      : mpl::true_ {};
+
+    // enables *lazy* confix(..., ...)[g]
+    template <>
+    struct use_lazy_directive<karma::domain, repository::tag::confix, 2> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository { namespace karma
+{
+    using repository::confix_type;
+    using repository::confix;
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Prefix, typename Suffix>
+    struct confix_generator
+      : spirit::karma::primitive_generator<confix_generator<Subject, Prefix, Suffix> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        confix_generator(Subject const& subject, Prefix const& prefix
+              , Suffix const& suffix)
+          : subject(subject), prefix(prefix), suffix(suffix) {}
+
+        ///////////////////////////////////////////////////////////////////////
+        template <typename OutputIterator, typename Context, typename Delimiter
+          , typename Attribute>
+        bool generate(OutputIterator& sink, Context& ctx, Delimiter const& d
+          , Attribute const& attr) const
+        {
+            // generate the prefix, the embedded item and the suffix
+            return prefix.generate(sink, ctx, d, unused) &&
+                   subject.generate(sink, ctx, d, attr) &&
+                   suffix.generate(sink, ctx, d, unused);
+        }
+
+        template <typename Context>
+        info what(Context const& ctx) const
+        {
+            return info("confix", subject.what(ctx));
+        }
+
+        Subject subject;
+        Prefix prefix;
+        Suffix suffix;
+    };
+
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Generator generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates confix(..., ...)[] directive generator
+    template <typename Prefix, typename Suffix, typename Subject
+      , typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::confix, fusion::vector2<Prefix, Suffix> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<karma::domain, Prefix, Modifiers>::type
+        prefix_type;
+        typedef typename
+            result_of::compile<karma::domain, Suffix, Modifiers>::type
+        suffix_type;
+
+        typedef repository::karma::confix_generator<
+            Subject, prefix_type, suffix_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<karma::domain>(fusion::at_c<0>(term.args), modifiers)
+              , compile<karma::domain>(fusion::at_c<1>(term.args), modifiers));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Subject, typename Prefix, typename Suffix>
+    struct has_semantic_action<
+            repository::karma::confix_generator<Subject, Prefix, Suffix> >
+      : mpl::or_<
+            has_semantic_action<Subject>
+          , has_semantic_action<Prefix>
+          , has_semantic_action<Suffix> 
+        > {};
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal.hpp
new file mode 100644 (file)
index 0000000..85c836f
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2009 Francois Barel
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_KARMA_NONTERMINAL_AUG_12_2009_0807PM)
+#define SPIRIT_REPOSITORY_KARMA_NONTERMINAL_AUG_12_2009_0807PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/nonterminal/subrule.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal/subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/karma/nonterminal/subrule.hpp
new file mode 100644 (file)
index 0000000..0c6fc6b
--- /dev/null
@@ -0,0 +1,560 @@
+//  Copyright (c) 2009 Francois Barel
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2001-2012 Hartmut Kaiser
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_KARMA_SUBRULE_AUGUST_12_2009_0813PM)
+#define BOOST_SPIRIT_REPOSITORY_KARMA_SUBRULE_AUGUST_12_2009_0813PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/karma/domain.hpp>
+#include <boost/spirit/home/karma/meta_compiler.hpp>
+#include <boost/spirit/home/karma/generator.hpp>
+#include <boost/spirit/home/karma/reference.hpp>
+#include <boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp>
+#include <boost/spirit/home/karma/nonterminal/detail/parameterized.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/karma/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/nonterminal/extract_param.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/repository/home/support/subrule_context.hpp>
+
+#include <boost/fusion/include/as_map.hpp>
+#include <boost/fusion/include/at_key.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/has_key.hpp>
+#include <boost/fusion/include/join.hpp>
+#include <boost/fusion/include/make_map.hpp>
+#include <boost/fusion/include/make_vector.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository { namespace karma
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule_group:
+    // - generator representing a group of subrule definitions (one or more),
+    //   invokes first subrule on entry,
+    // - also a Proto terminal, so that a group behaves like any Spirit
+    //   expression.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Defs>
+    struct subrule_group
+      : proto::extends<
+            typename proto::terminal<
+                spirit::karma::reference<subrule_group<Defs> const>
+            >::type
+          , subrule_group<Defs>
+        >
+      , spirit::karma::generator<subrule_group<Defs> >
+    {
+        struct properties
+            // Forward to first subrule.
+          : remove_reference<
+                typename fusion::result_of::front<Defs>::type
+            >::type::second_type::subject_type::properties {};
+
+        // Fusion associative sequence, associating each subrule ID in this
+        // group (as an MPL integral constant) with its definition
+        typedef Defs defs_type;
+
+        typedef subrule_group<Defs> this_type;
+        typedef spirit::karma::reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+
+        static size_t const params_size =
+            // Forward to first subrule.
+            remove_reference<
+                typename fusion::result_of::front<Defs>::type
+            >::type::second_type::params_size;
+
+        subrule_group(subrule_group const& rhs)
+          : base_type(terminal::make(reference_(*this)))
+          , defs(rhs.defs)
+        {
+        }
+
+        explicit subrule_group(Defs const& defs)
+          : base_type(terminal::make(reference_(*this)))
+          , defs(defs)
+        {
+        }
+
+        // from a subrule ID, get the type of a reference to its definition
+        template <int ID>
+        struct def_type
+        {
+            typedef mpl::int_<ID> id_type;
+
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule which was not defined in this group.
+            BOOST_SPIRIT_ASSERT_MSG(
+                (fusion::result_of::has_key<
+                    defs_type const, id_type>::type::value)
+              , subrule_used_without_being_defined, (mpl::int_<ID>));
+
+            typedef typename
+                fusion::result_of::at_key<defs_type const, id_type>::type
+            type;
+        };
+
+        // from a subrule ID, get a reference to its definition
+        template <int ID>
+        typename def_type<ID>::type def() const
+        {
+            return fusion::at_key<mpl::int_<ID> >(defs);
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+            // Forward to first subrule.
+          : mpl::identity<
+                typename remove_reference<
+                    typename fusion::result_of::front<Defs>::type
+                >::type::second_type::attr_type> {};
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& delimiter, Attribute const& attr) const
+        {
+            // Forward to first subrule.
+            return generate_subrule(fusion::front(defs).second
+              , sink, context, delimiter, attr);
+        }
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute
+          , typename Params>
+        bool generate(OutputIterator& sink, Context& context
+          , Delimiter const& delimiter, Attribute const& attr
+          , Params const& params) const
+        {
+            // Forward to first subrule.
+            return generate_subrule(fusion::front(defs).second
+              , sink, context, delimiter, attr, params);
+        }
+
+        template <int ID, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate_subrule_id(OutputIterator& sink
+          , Context& context, Delimiter const& delimiter
+          , Attribute const& attr) const
+        {
+            return generate_subrule(def<ID>()
+              , sink, context, delimiter, attr);
+        }
+
+        template <int ID, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute, typename Params>
+        bool generate_subrule_id(OutputIterator& sink
+          , Context& context, Delimiter const& delimiter
+          , Attribute const& attr, Params const& params) const
+        {
+            return generate_subrule(def<ID>()
+              , sink, context, delimiter, attr, params);
+        }
+
+        template <typename Def, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate_subrule(Def const& def, OutputIterator& sink
+          , Context& /*caller_context*/, Delimiter const& delimiter
+          , Attribute const& attr) const
+        {
+            // compute context type for this subrule
+            typedef typename Def::locals_type subrule_locals_type;
+            typedef typename Def::attr_type subrule_attr_type;
+            typedef typename Def::attr_reference_type subrule_attr_reference_type;
+            typedef typename Def::parameter_types subrule_parameter_types;
+
+            typedef
+                subrule_context<
+                    this_type
+                  , fusion::cons<
+                        subrule_attr_reference_type, subrule_parameter_types>
+                  , subrule_locals_type
+                >
+            context_type;
+
+            // Create an attribute if none is supplied.
+            typedef traits::make_attribute<subrule_attr_type, Attribute> 
+                make_attribute;
+
+            // If you are seeing a compilation error here, you are probably
+            // trying to use a subrule which has inherited attributes,
+            // without passing values for them.
+            context_type context(*this
+              , traits::pre_transform<spirit::karma::domain, subrule_attr_type>(
+                      make_attribute::call(attr)));
+
+            return def.binder(sink, context, delimiter);
+        }
+
+        template <typename Def, typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute, typename Params>
+        bool generate_subrule(Def const& def, OutputIterator& sink
+          , Context& caller_context, Delimiter const& delimiter
+          , Attribute const& attr, Params const& params) const
+        {
+            // compute context type for this subrule
+            typedef typename Def::locals_type subrule_locals_type;
+            typedef typename Def::attr_type subrule_attr_type;
+            typedef typename Def::attr_reference_type subrule_attr_reference_type;
+            typedef typename Def::parameter_types subrule_parameter_types;
+
+            typedef
+                subrule_context<
+                    this_type
+                  , fusion::cons<
+                        subrule_attr_reference_type, subrule_parameter_types>
+                  , subrule_locals_type
+                >
+            context_type;
+
+            // Create an attribute if none is supplied.
+            typedef traits::make_attribute<subrule_attr_type, Attribute> 
+                make_attribute;
+
+            // If you are seeing a compilation error here, you are probably
+            // trying to use a subrule which has inherited attributes,
+            // passing values of incompatible types for them.
+            context_type context(*this
+              , traits::pre_transform<spirit::karma::domain, subrule_attr_type>(
+                        make_attribute::call(attr)), params, caller_context);
+
+            return def.binder(sink, context, delimiter);
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // Forward to first subrule.
+            return fusion::front(defs).second.binder.g.what(context);
+        }
+
+        template <typename Defs2>
+        subrule_group<
+            typename fusion::result_of::as_map<
+                typename fusion::result_of::join<
+                    Defs const, Defs2 const>::type>::type>
+        operator,(subrule_group<Defs2> const& other) const
+        {
+            typedef subrule_group<
+                typename fusion::result_of::as_map<
+                    typename fusion::result_of::join<
+                        Defs const, Defs2 const>::type>::type> result_type;
+            return result_type(fusion::as_map(fusion::join(defs, other.defs)));
+        }
+
+        // bring in the operator() overloads
+        this_type const& get_parameterized_subject() const { return *this; }
+        typedef this_type parameterized_subject_type;
+        #include <boost/spirit/home/karma/nonterminal/detail/fcall.hpp>
+
+        Defs defs;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule_definition: holds one particular definition of a subrule
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        int ID_
+      , typename Locals
+      , typename Attr
+      , typename AttrRef
+      , typename Parameters
+      , size_t ParamsSize
+      , typename Subject
+      , bool Auto_
+    >
+    struct subrule_definition
+    {
+        typedef mpl::int_<ID_> id_type;
+        BOOST_STATIC_CONSTANT(int, ID = ID_);
+
+        typedef Locals locals_type;
+        typedef Attr attr_type;
+        typedef AttrRef attr_reference_type;
+        typedef Parameters parameter_types;
+        static size_t const params_size = ParamsSize;
+
+        typedef Subject subject_type;
+        typedef mpl::bool_<Auto_> auto_type;
+        BOOST_STATIC_CONSTANT(bool, Auto = Auto_);
+
+        typedef spirit::karma::detail::generator_binder<
+            Subject, auto_type> binder_type;
+
+        subrule_definition(Subject const& subject, std::string const& name)
+          : binder(subject), name(name)
+        {
+        }
+
+        binder_type const binder;
+        std::string const name;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule placeholder:
+    // - on subrule definition: helper for creation of subrule_group,
+    // - on subrule invocation: Proto terminal and generator.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        int ID_
+      , typename T1 = unused_type
+      , typename T2 = unused_type
+    >
+    struct subrule
+      : proto::extends<
+            typename proto::terminal<
+                spirit::karma::reference<subrule<ID_, T1, T2> const>
+            >::type
+          , subrule<ID_, T1, T2>
+        >
+      , spirit::karma::generator<subrule<ID_, T1, T2> >
+    {
+        //FIXME should go fetch the real properties of this subrule's definition in the current context, but we don't
+        // have the context here (properties would need to be 'template<typename Context> struct properties' instead)
+        typedef mpl::int_<
+            spirit::karma::generator_properties::all_properties> properties;
+
+        typedef mpl::int_<ID_> id_type;
+        BOOST_STATIC_CONSTANT(int, ID = ID_);
+
+        typedef subrule<ID_, T1, T2> this_type;
+        typedef spirit::karma::reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+
+        typedef mpl::vector<T1, T2> template_params;
+
+        // locals_type is a sequence of types to be used as local variables
+        typedef typename
+            spirit::detail::extract_locals<template_params>::type
+        locals_type;
+
+        typedef typename
+            spirit::detail::extract_sig<template_params>::type
+        sig_type;
+
+        // This is the subrule's attribute type
+        typedef typename
+            spirit::detail::attr_from_sig<sig_type>::type
+        attr_type;
+        typedef typename add_reference<
+            typename add_const<attr_type>::type>::type attr_reference_type;
+
+        // parameter_types is a sequence of types passed as parameters to the subrule
+        typedef typename
+            spirit::detail::params_from_sig<sig_type>::type
+        parameter_types;
+
+        static size_t const params_size =
+            fusion::result_of::size<parameter_types>::type::value;
+
+        explicit subrule(std::string const& name_ = "unnamed-subrule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+        }
+
+        // compute type of this subrule's definition for expr type Expr
+        template <typename Expr, bool Auto>
+        struct def_type_helper
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (Expr) is not a valid spirit karma expression.
+            BOOST_SPIRIT_ASSERT_MATCH(spirit::karma::domain, Expr);
+
+            typedef typename result_of::compile<
+                spirit::karma::domain, Expr>::type subject_type;
+
+            typedef subrule_definition<
+                ID_
+              , locals_type
+              , attr_type
+              , attr_reference_type
+              , parameter_types
+              , params_size
+              , subject_type
+              , Auto
+            > const type;
+        };
+
+        // compute type of subrule group containing only this
+        // subrule's definition for expr type Expr
+        template <typename Expr, bool Auto>
+        struct group_type_helper
+        {
+            typedef typename def_type_helper<Expr, Auto>::type def_type;
+
+            // create Defs map with only one entry: (ID -> def)
+            typedef typename
+                fusion::result_of::make_map<id_type, def_type>::type
+            defs_type;
+
+            typedef subrule_group<defs_type> type;
+        };
+
+        template <typename Expr>
+        typename group_type_helper<Expr, false>::type
+        operator=(Expr const& expr) const
+        {
+            typedef group_type_helper<Expr, false> helper;
+            typedef typename helper::def_type def_type;
+            typedef typename helper::type result_type;
+            return result_type(fusion::make_map<id_type>(
+                def_type(compile<spirit::karma::domain>(expr), name_)));
+        }
+
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule const& sr, Expr const& expr)
+        {
+            typedef group_type_helper<Expr, true> helper;
+            typedef typename helper::def_type def_type;
+            typedef typename helper::type result_type;
+            return result_type(fusion::make_map<id_type>(
+                def_type(compile<spirit::karma::domain>(expr), sr.name_)));
+        }
+
+        // non-const versions needed to suppress proto's %= kicking in
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule const& sr, Expr& expr)
+        {
+            return operator%=(
+                sr
+              , static_cast<Expr const&>(expr));
+        }
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule& sr, Expr const& expr)
+        {
+            return operator%=(
+                static_cast<subrule const&>(sr)
+              , expr);
+        }
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule& sr, Expr& expr)
+        {
+            return operator%=(
+                static_cast<subrule const&>(sr)
+              , static_cast<Expr const&>(expr));
+        }
+
+        std::string const& name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef attr_type type;
+        };
+
+        template <typename OutputIterator, typename Group
+          , typename Attributes, typename Locals
+          , typename Delimiter, typename Attribute>
+        bool generate(OutputIterator& sink
+          , subrule_context<Group, Attributes, Locals>& context
+          , Delimiter const& delimiter, Attribute const& attr) const
+        {
+            return context.group.template generate_subrule_id<ID_>(
+                sink, context, delimiter, attr);
+        }
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute>
+        bool generate(OutputIterator& /*sink*/
+          , Context& /*context*/
+          , Delimiter const& /*delimiter*/, Attribute const& /*attr*/) const
+        {
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule as a generator outside of a subrule group.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator
+              , subrule_used_outside_subrule_group, (id_type));
+
+            return false;
+        }
+
+        template <typename OutputIterator, typename Group
+          , typename Attributes, typename Locals
+          , typename Delimiter, typename Attribute
+          , typename Params>
+        bool generate(OutputIterator& sink
+          , subrule_context<Group, Attributes, Locals>& context
+          , Delimiter const& delimiter, Attribute const& attr
+          , Params const& params) const
+        {
+            return context.group.template generate_subrule_id<ID_>(
+                sink, context, delimiter, attr, params);
+        }
+
+        template <typename OutputIterator, typename Context
+          , typename Delimiter, typename Attribute
+          , typename Params>
+        bool generate(OutputIterator& /*sink*/
+          , Context& /*context*/
+          , Delimiter const& /*delimiter*/, Attribute const& /*attr*/
+          , Params const& /*params*/) const
+        {
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule as a generator outside of a subrule group.
+            BOOST_SPIRIT_ASSERT_FAIL(OutputIterator
+              , subrule_used_outside_subrule_group, (id_type));
+
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        // bring in the operator() overloads
+        this_type const& get_parameterized_subject() const { return *this; }
+        typedef this_type parameterized_subject_type;
+        #include <boost/spirit/home/karma/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+    };
+}}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi.hpp
new file mode 100644 (file)
index 0000000..8d52cf3
--- /dev/null
@@ -0,0 +1,20 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_APR_28_2009_1258PM)
+#define SPIRIT_REPOSITORY_QI_APR_28_2009_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive.hpp>
+#include <boost/spirit/repository/home/qi/directive.hpp>
+#include <boost/spirit/repository/home/qi/nonterminal.hpp>
+#include <boost/spirit/repository/home/qi/operator.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive.hpp
new file mode 100644 (file)
index 0000000..4e21b11
--- /dev/null
@@ -0,0 +1,20 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_DIRECTIVE_APR_28_2009_1258PM)
+#define SPIRIT_REPOSITORY_QI_DIRECTIVE_APR_28_2009_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/distinct.hpp>
+#include <boost/spirit/repository/home/qi/directive/confix.hpp>
+#include <boost/spirit/repository/home/qi/directive/kwd.hpp>
+#include <boost/spirit/repository/home/qi/directive/seek.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/confix.hpp
new file mode 100644 (file)
index 0000000..d51b001
--- /dev/null
@@ -0,0 +1,150 @@
+//  Copyright (c) 2009 Chris Hoeppler
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_QI_CONFIX_JUN_22_2009_1041AM)
+#define BOOST_SPIRIT_REPOSITORY_QI_CONFIX_JUN_22_2009_1041AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+
+#include <boost/spirit/repository/home/support/confix.hpp>
+
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/or.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables confix(..., ...)[]
+    template <typename Prefix, typename Suffix>
+    struct use_directive<qi::domain
+          , terminal_ex<repository::tag::confix, fusion::vector2<Prefix, Suffix> > >
+      : mpl::true_ {};
+
+    // enables *lazy* confix(..., ...)[]
+    template <>
+    struct use_lazy_directive<qi::domain, repository::tag::confix, 2> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    using repository::confix_type;
+    using repository::confix;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // the confix() generated parser
+    template <typename Subject, typename Prefix, typename Suffix>
+    struct confix_parser
+      : spirit::qi::unary_parser<confix_parser<Subject, Prefix, Suffix> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+          : traits::attribute_of<subject_type, Context, Iterator>
+        {};
+
+        confix_parser(Subject const& subject, Prefix const& prefix
+              , Suffix const& suffix)
+          : subject(subject), prefix(prefix), suffix(suffix) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            Iterator iter = first;
+
+            if (!(prefix.parse(iter, last, context, skipper, unused) &&
+                subject.parse(iter, last, context, skipper, attr) &&
+                suffix.parse(iter, last, context, skipper, unused)))
+            {
+                return false;
+            }
+
+            first = iter;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context const& ctx) const
+        {
+            return info("confix", subject.what(ctx));
+        }
+
+        Subject subject;
+        Prefix prefix;
+        Suffix suffix;
+    };
+
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    // creates confix(..., ...)[] directive
+    template <typename Prefix, typename Suffix, typename Subject
+      , typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::confix, fusion::vector2<Prefix, Suffix> >
+      , Subject, Modifiers>
+    {
+        typedef typename
+            result_of::compile<qi::domain, Prefix, Modifiers>::type
+        prefix_type;
+        typedef typename
+            result_of::compile<qi::domain, Suffix, Modifiers>::type
+        suffix_type;
+
+        typedef repository::qi::confix_parser<
+            Subject, prefix_type, suffix_type> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<qi::domain>(fusion::at_c<0>(term.args), modifiers)
+              , compile<qi::domain>(fusion::at_c<1>(term.args), modifiers));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Subject, typename Prefix, typename Suffix>
+    struct has_semantic_action<
+            repository::qi::confix_parser<Subject, Prefix, Suffix> >
+      : mpl::or_<
+            has_semantic_action<Subject>
+          , has_semantic_action<Prefix>
+          , has_semantic_action<Suffix> 
+        > {};
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/distinct.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/distinct.hpp
new file mode 100644 (file)
index 0000000..7406945
--- /dev/null
@@ -0,0 +1,143 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2003 Vaclav Vesely
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_DISTINCT_MAY_20_2009_0825M)
+#define SPIRIT_REPOSITORY_QI_DISTINCT_MAY_20_2009_0825M
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/skip_over.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/detail/unused_skipper.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/make_component.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/qi/auxiliary/eps.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/directive/lexeme.hpp>
+#include <boost/spirit/home/qi/operator/not_predicate.hpp>
+
+#include <boost/spirit/repository/home/support/distinct.hpp>
+
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/vector.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables distinct(...)[...]
+    template <typename Tail>
+    struct use_directive<qi::domain
+          , terminal_ex<repository::tag::distinct, fusion::vector1<Tail> > >
+      : mpl::true_ {};
+
+    // enables *lazy* distinct(...)[...]
+    template <>
+    struct use_lazy_directive<qi::domain, repository::tag::distinct, 1> 
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository {namespace qi
+{
+    using repository::distinct_type;
+    using repository::distinct;
+
+    template <typename Subject, typename Tail, typename Modifier>
+    struct distinct_parser
+      : spirit::qi::unary_parser<distinct_parser<Subject, Tail, Modifier> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute 
+          : traits::attribute_of<Subject, Context, Iterator>
+        {};
+
+        distinct_parser(Subject const& subject, Tail const& tail)
+          : subject(subject), tail(tail) {}
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper, Attribute& attr) const
+        {
+            Iterator iter = first;
+
+            spirit::qi::skip_over(iter, last, skipper);
+            if (!subject.parse(iter, last, context
+              , spirit::qi::detail::unused_skipper<Skipper>(skipper), attr))
+                return false;
+
+            Iterator i = iter;
+            if (tail.parse(i, last, context, unused, unused))
+                return false;
+
+            first = iter;
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context& /*ctx*/) const
+        {
+            return info("distinct");
+        }
+
+        Subject subject;
+        Tail tail;
+    };
+
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Tail, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::distinct, fusion::vector1<Tail> >
+      , Subject, Modifiers>
+    {
+        typedef typename result_of::compile<qi::domain, Tail, Modifiers>::type
+            tail_type;
+
+        typedef repository::qi::distinct_parser<
+            Subject, tail_type, Modifiers> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, Subject const& subject
+          , Modifiers const& modifiers) const
+        {
+            return result_type(subject
+              , compile<qi::domain>(fusion::at_c<0>(term.args), modifiers));
+        }
+    };
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Subject, typename Tail, typename Modifier>
+    struct has_semantic_action<
+            repository::qi::distinct_parser<Subject, Tail, Modifier> >
+      : unary_has_semantic_action<Subject> {};
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/kwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/kwd.hpp
new file mode 100644 (file)
index 0000000..1802080
--- /dev/null
@@ -0,0 +1,1199 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2011 Thomas Bernard
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_KWD_NOVEMBER_14_2008_1148AM)
+#define SPIRIT_KWD_NOVEMBER_14_2008_1148AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/auxiliary/lazy.hpp>
+#include <boost/spirit/home/qi/operator/kleene.hpp>
+#include <boost/spirit/home/support/container.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/qi/detail/fail_function.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/repository/home/support/kwd.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/foreach.hpp>
+#include <vector>
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    template < typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::kwd                     // enables kwd(key)[p]
+        , fusion::vector1<T > >
+    > : mpl::true_ {};
+
+    template < typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::ikwd                     // enables ikwd(key)[p]
+        , fusion::vector1<T > >
+    > : mpl::true_ {};
+
+    template < typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::dkwd                     // enables dkwd(key)[p]
+        , fusion::vector1<T > >
+    > : mpl::true_ {};
+
+    template < typename T>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::idkwd                     // enables idkwd(key)[p]
+        , fusion::vector1<T > >
+    > : mpl::true_ {};
+
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::kwd                     // enables kwd(key,exact)[p]
+        , fusion::vector2< T1, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::ikwd                     // enables ikwd(key,exact)[p]
+        , fusion::vector2< T1, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::dkwd                     // enables dkwd(key,exact)[p]
+        , fusion::vector2< T1, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::idkwd                     // enables idkwd(key,exact)[p]
+        , fusion::vector2< T1, T2 > >
+    > : mpl::true_ {};
+
+   template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::kwd                     // enables kwd(min, max)[p]
+        , fusion::vector3< T1, T2, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::ikwd                     // enables ikwd(min, max)[p]
+        , fusion::vector3< T1, T2, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::dkwd                     // enables dkwd(min, max)[p]
+        , fusion::vector3< T1, T2, T2 > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::idkwd                     // enables idkwd(min, max)[p]
+        , fusion::vector3< T1, T2, T2 > >
+    > : mpl::true_ {};
+
+   template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::kwd                     // enables kwd(min, inf)[p]
+        , fusion::vector3<T1, T2, inf_type > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::ikwd                     // enables ikwd(min, inf)[p]
+        , fusion::vector3<T1, T2, inf_type > >
+    > : mpl::true_ {};
+
+   template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::dkwd                     // enables dkwd(min, inf)[p]
+        , fusion::vector3<T1, T2, inf_type > >
+    > : mpl::true_ {};
+
+    template < typename T1, typename T2>
+    struct use_directive<qi::domain
+      , terminal_ex<repository::tag::idkwd                     // enables idkwd(min, inf)[p]
+        , fusion::vector3<T1, T2, inf_type > >
+    > : mpl::true_ {};
+
+
+  /*  template <>                                     // enables *lazy* kwd(exact)[p]
+    struct use_lazy_directive<
+        qi::domain
+      , tag::kwd
+      , 1 // arity
+    > : mpl::true_ {};
+
+    template <>                                     // enables *lazy* kwd(min, max)[p]
+    struct use_lazy_directive<                      // and kwd(min, inf)[p]
+        qi::domain
+      , tag::kwd
+      , 2 // arity
+    > : mpl::true_ {};
+*/
+
+}}
+
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    using repository::kwd;
+    using repository::ikwd;
+    using repository::dkwd;
+    using repository::idkwd;
+    using spirit::inf;
+    using spirit::inf_type;
+
+template <typename T>
+    struct kwd_pass_iterator // handles kwd(exact)[p]
+    {
+        kwd_pass_iterator() {}
+        bool flag_init() const { return true; }
+        bool register_successful_parse(bool &flag,T &i) const {
+            flag=true;
+            return true;
+        }
+
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        kwd_pass_iterator& operator= (kwd_pass_iterator const&);
+    };
+
+    template <typename T>
+    struct kwd_exact_iterator // handles kwd(exact)[p]
+    {
+        kwd_exact_iterator(T const exact)
+          : exact(exact){}
+
+        typedef T type;
+        bool flag_init() const { return false; }
+        bool register_successful_parse(bool &flag,T &i) const {
+            i++;
+            if(i<exact)
+            {
+                flag=false;
+                return true;
+            }
+            else if(i==exact)
+            {
+                flag=true;
+                return true;
+            }
+            else
+                return flag=false;
+
+        }
+        T const exact;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        kwd_exact_iterator& operator= (kwd_exact_iterator const&);
+    };
+
+    template <typename T>
+    struct kwd_finite_iterator // handles kwd(min, max)[p]
+    {
+        kwd_finite_iterator(T const min, T const max)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min)
+          , max BOOST_PREVENT_MACRO_SUBSTITUTION (max)
+            {}
+
+        typedef T type;
+        bool flag_init() const { return min==0; }
+        bool register_successful_parse(bool &flag,T &i) const {
+            i++;
+            if(i<min)
+            {
+                flag=false;
+                return true;
+            }
+            else if(i>=min && i<=max)
+            {
+                return flag=true;
+            }
+            else
+                return flag=false;
+        }
+        T const min;
+        T const max;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        kwd_finite_iterator& operator= (kwd_finite_iterator const&);
+    };
+
+    template <typename T>
+    struct kwd_infinite_iterator // handles kwd(min, inf)[p]
+    {
+        kwd_infinite_iterator(T const min)
+          : min BOOST_PREVENT_MACRO_SUBSTITUTION (min) {}
+
+        typedef T type;
+        bool flag_init() const { return min==0; }
+        bool register_successful_parse(bool &flag,T &i) const {
+            i++;
+            flag = i>=min;
+            return true;
+        }
+        T const min;
+
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        kwd_infinite_iterator& operator= (kwd_infinite_iterator const&);
+    };
+
+    // This class enables the transportation of parameters needed to call
+    // the occurence constraint checker from higher level calls
+    // It also serves to select the correct parse function call
+    // of the keyword parser. The implementation changes depending if it is
+    // called form a keyword parsing loop or not.
+    template <typename Skipper, typename NoCasePass>
+    struct skipper_keyword_marker
+    {
+        typedef NoCasePass no_case_pass;
+
+        skipper_keyword_marker(Skipper const &skipper,bool &flag,int &counter) :
+              skipper(skipper)
+            , flag(flag)
+            , counter(counter)
+            {}
+
+        const Skipper &skipper;
+        bool &flag;
+        int &counter;
+    };
+
+    template <typename Subject, typename KeywordType, typename LoopIter , typename NoCase, typename Distinct >
+    struct kwd_parser : spirit::qi::unary_parser<kwd_parser<Subject, KeywordType, LoopIter , NoCase, Distinct > >
+    {
+        struct kwd_parser_id;
+
+        typedef Subject subject_type;
+        typedef NoCase no_case_keyword;
+        typedef Distinct distinct;
+
+        typedef typename
+            remove_const<typename traits::char_type_of<KeywordType>::type>::type
+        char_type;
+
+        typedef std::basic_string<char_type> keyword_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+            traits::build_std_vector<
+                typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                        >::type
+                type;
+        };
+
+
+        kwd_parser(Subject const& subject
+           , typename add_reference<KeywordType>::type keyword
+           , LoopIter const& iter)
+          : subject(subject), iter(iter), keyword(keyword) {}
+
+        template<typename CharEncoding>
+        kwd_parser(Subject const& subject
+           , typename add_reference<KeywordType>::type keyword
+           , LoopIter const& iter, CharEncoding encoding)
+          : subject(subject), iter(iter), keyword(keyword,encoding) {}
+
+
+        // Call the subject parser on a non container attribute
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr,mpl::false_) const
+        {
+            return subject.parse(first,last,context,skipper,attr);
+        }
+
+        // Call the subject parser on a container attribute
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr,mpl::true_) const
+        {
+
+            // synthesized attribute needs to be default constructed
+            typename traits::container_value<Attribute>::type val =
+                typename traits::container_value<Attribute>::type();
+
+            Iterator save = first;
+            bool r = subject.parse(first,last,context,skipper, val);
+            if (r)
+            {
+                // push the parsed value into our attribute
+                r = traits::push_back(attr, val);
+                if (!r)
+                    first = save;
+            }
+            return r;
+        }
+
+       template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute,typename NoCasePass>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, skipper_keyword_marker<Skipper,NoCasePass> const& skipper
+          , Attribute &attr) const
+        {
+
+            typedef typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                subject_attribute;
+
+            typedef typename mpl::and_<
+             traits::is_container<Attribute>
+            , mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
+            >::type predicate;
+
+            if((no_case_keyword::value && NoCasePass::value) || !NoCasePass::value)
+            {
+                if(parse_impl(first,last,context,skipper.skipper,attr, predicate()))
+                    return iter.register_successful_parse(skipper.flag,skipper.counter);
+            }
+            return false;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+          {
+              typedef typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                subject_attribute;
+
+            typedef typename mpl::and_<
+            traits::is_container<Attribute>
+            , mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
+            >::type predicate;
+
+
+            // Parse the keyword
+            bool flag = iter.flag_init();
+            int counter = 0;
+            Iterator save = first;
+            spirit::qi::skip_over(first, last, skipper);
+            if(keyword.parse(first,last,context,skipper,unused)){
+                if((!distinct::value) || skipper.parse(first,last,unused,unused,unused)){
+                  // Followed by the subject parser
+                  spirit::qi::skip_over(first, last, skipper);
+                  if(parse_impl(first,last,context,skipper,attr, predicate()))
+                  {
+                      return iter.register_successful_parse(flag,counter);
+                  }
+                }
+            }
+            first = save;
+            return flag;
+          }
+
+
+        template <typename Context>
+          info what(Context& context) const
+          {
+            if(distinct::value){
+              if(no_case_keyword::value)
+                return info("idkwd", subject.what(context));
+              else
+                return info("dkwd", subject.what(context));
+            }
+            else
+            {
+              if(no_case_keyword::value)
+                return info("ikwd", subject.what(context));
+              else
+                return info("kwd", subject.what(context));
+            }
+        }
+
+        Subject subject;
+        LoopIter iter;
+
+        typedef typename mpl::if_<
+                no_case_keyword,
+                spirit::qi::no_case_literal_string< KeywordType, true>,
+                spirit::qi::literal_string<KeywordType, true> >::type keyword_string_type;
+       keyword_string_type keyword;
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        kwd_parser& operator= (kwd_parser const&);
+
+        template <typename Iterator, typename Context, typename Skipper>
+        static spirit::qi::detail::fail_function<Iterator, Context, Skipper>
+        fail_function(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper)
+        {
+            return spirit::qi::detail::fail_function<Iterator, Context, Skipper>
+                (first, last, context, skipper);
+        }
+
+
+    };
+
+template <typename Subject, typename KeywordType, typename LoopIter, typename Distinct>
+    struct complex_kwd_parser : spirit::qi::unary_parser<complex_kwd_parser<Subject, KeywordType, LoopIter, Distinct > >
+    {
+        struct complex_kwd_parser_id;
+        typedef Subject subject_type;
+        typedef Distinct distinct;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+            traits::build_std_vector<
+                typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                        >::type
+                type;
+        };
+
+
+        complex_kwd_parser(Subject const& subject
+           , typename add_reference<KeywordType>::type keyword
+           , LoopIter const& iter)
+          : subject(subject), iter(iter), keyword(keyword) {}
+
+        // Call the subject parser on a non container attribute
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr,mpl::false_) const
+        {
+            return subject.parse(first,last,context,skipper,attr);
+        }
+
+        // Call the subject parser on a container attribute
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr,mpl::true_) const
+        {
+
+            // synthesized attribute needs to be default constructed
+            typename traits::container_value<Attribute>::type val =
+                typename traits::container_value<Attribute>::type();
+
+            Iterator save = first;
+            bool r = subject.parse(first,last,context,skipper, val);
+            if (r)
+            {
+                // push the parsed value into our attribute
+                r = traits::push_back(attr, val);
+                if (!r)
+                    first = save;
+            }
+            return r;
+        }
+
+       template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute,typename NoCasePass>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, skipper_keyword_marker<Skipper,NoCasePass> const& skipper
+          , Attribute &attr) const
+        {
+
+            typedef typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                subject_attribute;
+
+            typedef typename mpl::and_<
+             traits::is_container<Attribute>
+            , mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
+            >::type predicate;
+
+            if(parse_impl(first,last,context,skipper.skipper,attr, predicate()))
+                return iter.register_successful_parse(skipper.flag,skipper.counter);
+            return false;
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+          {
+              typedef typename traits::attribute_of<
+                Subject, Context, Iterator>::type
+                subject_attribute;
+
+            typedef typename mpl::and_<
+            traits::is_container<Attribute>
+            , mpl::not_< traits::is_weak_substitute< subject_attribute,Attribute > >
+            >::type predicate;
+
+
+            // Parse the keyword
+            bool flag = iter.flag_init();
+            int counter = 0;
+            Iterator save = first;
+            spirit::qi::skip_over(first, last, skipper);
+            if(keyword.parse(first,last,context,skipper,unused)){
+              if( !distinct::value || skipper.parse(first,last,unused,unused,unused)){
+                // Followed by the subject parser
+                spirit::qi::skip_over(first, last, skipper);
+                if(parse_impl(first,last,context,skipper,attr, predicate()))
+                {
+                  return iter.register_successful_parse(flag,counter);
+                }
+              }
+            }
+            first = save;
+            return flag;
+          }
+
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+           if(distinct::value)
+            return info("dkwd", subject.what(context));
+           else
+            return info("kwd", subject.what(context));
+        }
+
+        Subject subject;
+        LoopIter iter;
+
+        KeywordType keyword;
+    private:
+        // silence MSVC warning C4512: assignment operator could not be generated
+        complex_kwd_parser& operator= (complex_kwd_parser const&);
+
+        template <typename Iterator, typename Context, typename Skipper>
+        static spirit::qi::detail::fail_function<Iterator, Context, Skipper>
+        fail_function(
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper)
+        {
+            return spirit::qi::detail::fail_function<Iterator, Context, Skipper>
+                (first, last, context, skipper);
+        }
+
+    };
+
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+
+    template <typename T1, typename T2,  typename Subject, typename Modifiers, typename Distinct, typename MakeDirectiveHelper>
+    struct make_directive_internal_2_args
+    {
+
+        // is the keyword a string keyword ?
+        typedef typename traits::is_string<T1> is_string_kwd_type;
+        // make the keyword type
+        typedef typename mpl::if_< is_string_kwd_type ,
+                                   T1 ,
+                                   typename result_of::compile<qi::domain, T1>::type
+                                 >::type keyword_type;
+
+        typedef typename add_const<keyword_type>::type const_keyword;
+        // select the pass iterator type
+        typedef typename MakeDirectiveHelper::iterator_type iterator_type;
+        // determine if a no case modifier applies to the context
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+        // Determine the full type of the kwd / complex_kwd directive
+        typedef typename
+             mpl::if_<
+                is_string_kwd_type,
+                repository::qi::kwd_parser<Subject, const_keyword, iterator_type, no_case, Distinct >,
+                repository::qi::complex_kwd_parser<Subject, const_keyword, iterator_type, Distinct >
+                     >::type result_type;
+
+        // Return a kwd parser object
+        template <typename Terminal>
+        result_type create_kwd_string(Terminal const &term, Subject const & subject, boost::mpl::true_ ) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+           return result_type(subject
+                        ,MakeDirectiveHelper::make_iterator(term.args)
+                        ,encoding
+                        );
+        }
+        template <typename Terminal>
+        result_type create_kwd_string(Terminal const &term, Subject const & subject, boost::mpl::false_ ) const
+        {
+           return result_type(subject
+                        ,fusion::at_c<0>(term.args)
+                        ,MakeDirectiveHelper::make_iterator(term.args)
+                        );
+        }
+        template <typename Terminal>
+        result_type create_kwd(Terminal const &term, Subject const & subject, Modifiers const& modifiers, boost::mpl::true_ ) const
+        {
+           return create_kwd_string(term,subject,no_case());
+        }
+        // Return a complex_kwd parser object
+        template <typename Terminal>
+        result_type create_kwd(Terminal const &term , Subject const & subject, Modifiers const& modifiers, boost::mpl::false_ ) const
+        {
+           return result_type(subject
+                        ,compile<qi::domain>(fusion::at_c<0>(term.args),modifiers)
+                        ,MakeDirectiveHelper::make_iterator(term.args)                        
+                        );
+        }
+        // Select which object type to return
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+            return create_kwd(term, subject, modifiers, is_string_kwd_type());
+        }
+
+    };
+
+     // Directive kwd(key)[p]
+    template <typename T1,  typename Subject, typename Modifiers, typename Distinct>
+    struct make_directive_internal
+    {
+        // is the keyword a string keyword ?
+        typedef typename traits::is_string<T1> is_string_kwd_type;
+        // make the keyword type
+        typedef typename mpl::if_< is_string_kwd_type ,
+                                   T1 ,
+                                   typename result_of::compile<qi::domain, T1, Modifiers>::type
+                                 >::type keyword_type;
+
+        typedef typename add_const<keyword_type>::type const_keyword;
+        // select the pass iterator type
+        typedef repository::qi::kwd_pass_iterator<int> iterator_type;
+        // determine if a no case modifier applies to the context
+        typedef has_modifier<Modifiers, tag::char_code_base<tag::no_case> > no_case;
+        // Determine the full type of the kwd / complex_kwd directive
+        typedef typename
+             mpl::if_<
+                is_string_kwd_type,
+                repository::qi::kwd_parser<Subject, const_keyword, iterator_type, no_case, Distinct >,
+                repository::qi::complex_kwd_parser<Subject, const_keyword, iterator_type, Distinct>
+                     >::type result_type;
+
+        // Return a kwd parser object
+        template <typename Terminal>
+        result_type create_kwd_string(Terminal const &term, Subject const & subject, boost::mpl::true_) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+
+            return result_type(subject
+                        ,fusion::at_c<0>(term.args)
+                        ,iterator_type()
+                        ,encoding
+                        );
+
+        }
+        template <typename Terminal>
+        result_type create_kwd_string(Terminal const &term, Subject const & subject, boost::mpl::false_) const
+        {
+            return result_type(subject
+                        ,fusion::at_c<0>(term.args)
+                        ,iterator_type()
+                        );
+        }
+        template <typename Terminal>
+        result_type create_kwd(Terminal const &term, Subject const & subject, Modifiers const& modifiers, boost::mpl::true_ ) const
+        {
+           return create_kwd_string(term,subject,no_case());
+        }
+        // Return a complex_kwd parser object
+        template <typename Terminal>
+        result_type create_kwd(Terminal const &term , Subject const & subject, Modifiers const& modifiers, boost::mpl::false_ ) const
+        {
+           return result_type(subject
+                        ,compile<qi::domain>(fusion::at_c<0>(term.args),modifiers)
+                        ,iterator_type()
+                        );
+        }
+        // Select which object type to return
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers ) const
+        {
+            return create_kwd(term, subject, modifiers, is_string_kwd_type());
+        }
+    };
+
+    template <typename T1,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::kwd, fusion::vector1<T1> >, Subject, Modifiers>
+    {
+        typedef make_directive_internal<T1, Subject, Modifiers, mpl::false_> make_directive_type;
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term, subject, modifiers);
+        }
+
+    };
+   template <typename T1,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::dkwd, fusion::vector1<T1> >, Subject, Modifiers>
+    {
+        typedef make_directive_internal<T1, Subject, Modifiers, mpl::true_> make_directive_type;
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term, subject, modifiers);
+        }
+
+    };
+
+
+    // Directive ikwd(key)[p]
+    template <typename T1,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::ikwd, fusion::vector1<T1> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_pass_iterator<int> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject,  unused_type) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+
+            return result_type(subject
+                        ,fusion::at_c<0>(term.args)
+                        ,iterator_type()
+                        ,encoding
+                        );
+        }
+    };
+
+    template <typename T1,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::idkwd, fusion::vector1<T1> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_pass_iterator<int> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+
+            return result_type(subject
+                        ,fusion::at_c<0>(term.args)
+                        ,iterator_type()
+                        ,encoding
+                        );
+        }
+    };
+
+    // Directive kwd(key,exact)[p]
+        template <typename T>
+    struct make_exact_helper
+    { 
+        typedef repository::qi::kwd_exact_iterator<T> iterator_type;
+        template<typename Args>
+        static iterator_type make_iterator(Args const& args)
+        {
+          return iterator_type(fusion::at_c<1>(args));
+        }
+    };
+
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::kwd, fusion::vector2<T1,T2> >, Subject, Modifiers>
+    {
+        typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::false_
+                                              , make_exact_helper<T2>
+                                              > make_directive_type;
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term,subject, modifiers);
+        }
+
+    };
+  
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::dkwd, fusion::vector2<T1,T2> >, Subject, Modifiers>
+    {
+         typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::true_
+                                              , make_exact_helper<T2>
+                                              > make_directive_type;
+        
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term, subject, modifiers);
+        }
+
+    };
+  
+
+    // Directive ikwd(key,exact)[p]
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::ikwd, fusion::vector2<T1,T2> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_exact_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+            return result_type(subject
+                        , fusion::at_c<0>(term.args)
+                        , fusion::at_c<1>(term.args)
+                        , encoding
+                        );
+        }
+    };
+
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::idkwd, fusion::vector2<T1,T2> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_exact_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+            return result_type(subject
+                        , fusion::at_c<0>(term.args)
+                        , fusion::at_c<1>(term.args)
+                        , encoding
+                        );
+        }
+    };
+
+
+    // Directive kwd(min, max)[p]
+
+    template <typename T>
+    struct make_finite_helper
+    { 
+        typedef repository::qi::kwd_finite_iterator<T> iterator_type;
+        template<typename Args>
+        static iterator_type make_iterator(Args const& args)
+        {
+          return iterator_type(fusion::at_c<1>(args),fusion::at_c<2>(args));
+        }
+
+    };
+
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::kwd, fusion::vector3<T1,T2,T2> >, Subject, Modifiers>
+    {
+        typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::false_
+                                              , make_finite_helper<T2>
+                                              > make_directive_type;
+        
+        
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term,subject, modifiers);
+        }
+
+    };
+  
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::dkwd, fusion::vector3<T1,T2,T2> >, Subject, Modifiers>
+    {
+       
+        typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::true_
+                                              , make_finite_helper<T2>
+                                              > make_directive_type;
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, Modifiers const& modifiers) const
+        {
+
+            return make_directive_type()(term,subject, modifiers);
+        }
+
+    };
+
+    // Directive ikwd(min, max)[p]
+    template <typename T1, typename T2, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::ikwd, fusion::vector3< T1, T2, T2> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_finite_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+            return result_type(subject, fusion::at_c<0>(term.args),
+                iterator_type(
+                    fusion::at_c<1>(term.args)
+                  , fusion::at_c<2>(term.args)
+                  , encoding
+                )
+            );
+        }
+    };
+
+    template <typename T1, typename T2, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::idkwd, fusion::vector3< T1, T2, T2> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_finite_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+            return result_type(subject, fusion::at_c<0>(term.args),
+                iterator_type(
+                    fusion::at_c<1>(term.args)
+                  , fusion::at_c<2>(term.args)
+                  , encoding
+                )
+            );
+        }
+    };
+
+
+    // Directive kwd(min, inf)[p]
+
+    template <typename T>
+    struct make_infinite_helper
+    { 
+        typedef repository::qi::kwd_infinite_iterator<T> iterator_type;
+        template<typename Args>
+        static iterator_type make_iterator(Args const& args)
+        {
+          return iterator_type(fusion::at_c<1>(args));
+        }
+
+    };
+
+
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::kwd, fusion::vector3<T1,T2,inf_type> >, Subject, Modifiers>
+    {
+         typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::false_
+                                              , make_infinite_helper<T2>
+                                              > make_directive_type;
+        
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+
+            return make_directive_type()(term,subject, unused_type());
+        }
+
+    };
+  
+    template <typename T1, typename T2,  typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::dkwd, fusion::vector3<T1,T2,inf_type> >, Subject, Modifiers>
+    {
+      typedef make_directive_internal_2_args< T1
+                                              , T2
+                                              , Subject
+                                              , Modifiers
+                                              , mpl::false_
+                                              , make_infinite_helper<T2>
+                                              > make_directive_type;
+    
+        typedef typename make_directive_type::result_type result_type;
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+
+            return make_directive_type()(term,subject, unused_type());
+        }
+
+    };
+
+
+    // Directive ikwd(min, inf)[p]
+    template <typename T1, typename T2, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::ikwd
+        , fusion::vector3<T1, T2, inf_type> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_infinite_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::false_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+
+            return result_type(subject
+                , fusion::at_c<0>(term.args)
+                , fusion::at_c<1>(term.args)
+                , encoding
+                );
+        }
+    };
+
+  template <typename T1, typename T2, typename Subject, typename Modifiers>
+    struct make_directive<
+        terminal_ex<repository::tag::idkwd
+        , fusion::vector3<T1, T2, inf_type> >, Subject, Modifiers>
+    {
+        typedef typename add_const<T1>::type const_keyword;
+        typedef repository::qi::kwd_infinite_iterator<T2> iterator_type;
+
+        typedef repository::qi::kwd_parser<Subject, const_keyword, iterator_type, mpl::true_, mpl::true_ > result_type;
+
+        template <typename Terminal>
+        result_type operator()(
+            Terminal const& term, Subject const& subject, unused_type) const
+        {
+            typename spirit::detail::get_encoding<Modifiers,
+                spirit::char_encoding::standard>::type encoding;
+
+            return result_type(subject
+                , fusion::at_c<0>(term.args)
+                , fusion::at_c<1>(term.args)
+                , encoding
+                );
+        }
+    };
+
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    template <typename Subject, typename KeywordType
+            , typename LoopIter, typename NoCase , typename Distinct>
+    struct has_semantic_action<
+            repository::qi::kwd_parser< Subject, KeywordType, LoopIter, NoCase, Distinct > >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename KeywordType
+            , typename LoopIter, typename Distinct >
+    struct has_semantic_action<
+            repository::qi::complex_kwd_parser< Subject, KeywordType, LoopIter, Distinct > >
+      : unary_has_semantic_action<Subject> {};
+
+    template <typename Subject, typename KeywordType
+              , typename LoopIter, typename NoCase, typename Attribute, typename Context
+                , typename Iterator, typename Distinct>
+    struct handles_container<repository::qi::kwd_parser<Subject, KeywordType, LoopIter, NoCase, Distinct>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+    template <typename Subject, typename KeywordType
+                , typename LoopIter
+                , typename Attribute, typename Context
+                , typename Iterator, typename Distinct>
+    struct handles_container<repository::qi::complex_kwd_parser<Subject, KeywordType, LoopIter, Distinct>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/seek.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/directive/seek.hpp
new file mode 100644 (file)
index 0000000..951a337
--- /dev/null
@@ -0,0 +1,134 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2011 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_REPOSITORY_QI_SEEK
+#define BOOST_SPIRIT_REPOSITORY_QI_SEEK
+
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
+#include <boost/spirit/repository/home/support/seek.hpp>
+
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables seek[...]
+    template <>
+    struct use_directive<qi::domain, repository::tag::seek>
+      : mpl::true_ {};
+}} // namespace boost::spirit
+
+
+namespace boost { namespace spirit { namespace repository {namespace qi
+{
+#ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
+    using repository::seek;
+#endif
+    using repository::seek_type;
+
+    template <typename Subject>
+    struct seek_directive
+      : spirit::qi::unary_parser<seek_directive<Subject> >
+    {
+        typedef Subject subject_type;
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef typename
+                traits::attribute_of<subject_type, Context, Iterator>::type
+            type;
+        };
+
+        seek_directive(Subject const& subject)
+          : subject(subject)
+        {}
+
+        template
+        <
+            typename Iterator, typename Context
+          , typename Skipper, typename Attribute
+        >
+        bool parse
+        (
+            Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr
+        ) const
+        {
+            for (Iterator it(first); ; ++it)
+            {
+                if (subject.parse(it, last, context, skipper, attr))
+                {
+                    first = it;
+                    return true;
+                }
+                // fail only after subject fails & no input
+                if (it == last)
+                    return false;
+            }
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            return info("seek", subject.what(context));
+        }
+
+        Subject subject;
+    };
+}}}} // namespace boost::spirit::repository::qi
+
+
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Modifiers>
+    struct make_directive<repository::tag::seek, Subject, Modifiers>
+    {
+        typedef repository::qi::seek_directive<Subject> result_type;
+
+        result_type operator()(unused_type, Subject const& subject, unused_type) const
+        {
+            return result_type(subject);
+        }
+    };
+}}} // namespace boost::spirit::qi
+
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject>
+    struct has_semantic_action<repository::qi::seek_directive<Subject> >
+      : unary_has_semantic_action<Subject> {};
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename Attribute, typename Context
+        , typename Iterator>
+    struct handles_container<repository::qi::seek_directive<Subject>, Attribute
+        , Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {};
+}}} // namespace boost::spirit::traits
+
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal.hpp
new file mode 100644 (file)
index 0000000..6b2dbb8
--- /dev/null
@@ -0,0 +1,18 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2009 Francois Barel
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_NONTERMINAL_AUG_12_2009_1140AM)
+#define SPIRIT_REPOSITORY_QI_NONTERMINAL_AUG_12_2009_1140AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/nonterminal/subrule.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal/subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/nonterminal/subrule.hpp
new file mode 100644 (file)
index 0000000..170367b
--- /dev/null
@@ -0,0 +1,586 @@
+/*=============================================================================
+    Copyright (c) 2009 Francois Barel
+    Copyright (c) 2001-2011 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_REPOSITORY_QI_SUBRULE_AUGUST_06_2009_0239AM)
+#define BOOST_SPIRIT_REPOSITORY_QI_SUBRULE_AUGUST_06_2009_0239AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/parser.hpp>
+#include <boost/spirit/home/qi/reference.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parameterized.hpp>
+#include <boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp>
+#include <boost/spirit/home/support/argument.hpp>
+#include <boost/spirit/home/support/assert_msg.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/nonterminal/extract_param.hpp>
+#include <boost/spirit/home/support/nonterminal/locals.hpp>
+#include <boost/spirit/repository/home/support/subrule_context.hpp>
+
+#include <boost/fusion/include/as_map.hpp>
+#include <boost/fusion/include/at_key.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/front.hpp>
+#include <boost/fusion/include/has_key.hpp>
+#include <boost/fusion/include/join.hpp>
+#include <boost/fusion/include/make_map.hpp>
+#include <boost/fusion/include/make_vector.hpp>
+#include <boost/fusion/include/size.hpp>
+#include <boost/fusion/include/vector.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list warning
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule_group:
+    // - parser representing a group of subrule definitions (one or more),
+    //   invokes first subrule on entry,
+    // - also a Proto terminal, so that a group behaves like any Spirit
+    //   expression.
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Defs>
+    struct subrule_group
+      : proto::extends<
+            typename proto::terminal<
+                spirit::qi::reference<subrule_group<Defs> const>
+            >::type
+          , subrule_group<Defs>
+        >
+      , spirit::qi::parser<subrule_group<Defs> >
+    {
+        // Fusion associative sequence, associating each subrule ID in this
+        // group (as an MPL integral constant) with its definition
+        typedef Defs defs_type;
+
+        typedef subrule_group<Defs> this_type;
+        typedef spirit::qi::reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+
+        static size_t const params_size =
+            // Forward to first subrule.
+            remove_reference<
+                typename fusion::result_of::front<Defs>::type
+            >::type::second_type::params_size;
+
+        subrule_group(subrule_group const& rhs)
+          : base_type(terminal::make(reference_(*this)))
+          , defs(rhs.defs)
+        {
+        }
+
+        explicit subrule_group(Defs const& defs)
+          : base_type(terminal::make(reference_(*this)))
+          , defs(defs)
+        {
+        }
+
+        // from a subrule ID, get the type of a reference to its definition
+        template <int ID>
+        struct def_type
+        {
+            typedef mpl::int_<ID> id_type;
+
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule which was not defined in this group.
+            BOOST_SPIRIT_ASSERT_MSG(
+                (fusion::result_of::has_key<
+                    defs_type const, id_type>::type::value)
+              , subrule_used_without_being_defined, (mpl::int_<ID>));
+
+            typedef typename
+                fusion::result_of::at_key<defs_type const, id_type>::type
+            type;
+        };
+
+        // from a subrule ID, get a reference to its definition
+        template <int ID>
+        typename def_type<ID>::type def() const
+        {
+            return fusion::at_key<mpl::int_<ID> >(defs);
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+            // Forward to first subrule.
+          : mpl::identity<
+                typename remove_reference<
+                    typename fusion::result_of::front<Defs>::type
+                >::type::second_type::attr_type> {};
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            // Forward to first subrule.
+            return parse_subrule(fusion::front(defs).second
+              , first, last, context, skipper, attr);
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute, typename Params>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr, Params const& params) const
+        {
+            // Forward to first subrule.
+            return parse_subrule(fusion::front(defs).second
+              , first, last, context, skipper, attr, params);
+        }
+
+        template <int ID, typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_subrule_id(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            return parse_subrule(def<ID>()
+              , first, last, context, skipper, attr);
+        }
+
+        template <int ID, typename Iterator, typename Context
+          , typename Skipper, typename Attribute, typename Params>
+        bool parse_subrule_id(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr, Params const& params) const
+        {
+            return parse_subrule(def<ID>()
+              , first, last, context, skipper, attr, params);
+        }
+
+        template <typename Def
+          , typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_subrule(Def const& def
+          , Iterator& first, Iterator const& last
+          , Context& /*caller_context*/, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            // compute context type for this subrule
+            typedef typename Def::locals_type subrule_locals_type;
+            typedef typename Def::attr_type subrule_attr_type;
+            typedef typename Def::attr_reference_type subrule_attr_reference_type;
+            typedef typename Def::parameter_types subrule_parameter_types;
+
+            typedef
+                subrule_context<
+                    this_type
+                  , fusion::cons<
+                        subrule_attr_reference_type, subrule_parameter_types>
+                  , subrule_locals_type
+                >
+            context_type;
+
+            // prepare attribute
+            typedef traits::make_attribute<
+                subrule_attr_type, Attribute> make_attribute;
+
+            // do down-stream transformation, provides attribute for 
+            // rhs parser
+            typedef traits::transform_attribute<
+                typename make_attribute::type, subrule_attr_type, spirit::qi::domain> 
+            transform;
+
+            typename make_attribute::type made_attr = make_attribute::call(attr);
+            typename transform::type attr_ = transform::pre(made_attr);
+
+            // If you are seeing a compilation error here, you are probably
+            // trying to use a subrule which has inherited attributes,
+            // without passing values for them.
+            context_type context(*this, attr_);
+
+            if (def.binder(first, last, context, skipper))
+            {
+                // do up-stream transformation, this integrates the results 
+                // back into the original attribute value, if appropriate
+                traits::post_transform(attr, attr_);
+                return true;
+            }
+
+            // inform attribute transformation of failed rhs
+            traits::fail_transform(attr, attr_);
+            return false;
+        }
+
+        template <typename Def
+          , typename Iterator, typename Context
+          , typename Skipper, typename Attribute, typename Params>
+        bool parse_subrule(Def const& def
+          , Iterator& first, Iterator const& last
+          , Context& caller_context, Skipper const& skipper
+          , Attribute& attr, Params const& params) const
+        {
+            // compute context type for this subrule
+            typedef typename Def::locals_type subrule_locals_type;
+            typedef typename Def::attr_type subrule_attr_type;
+            typedef typename Def::attr_reference_type subrule_attr_reference_type;
+            typedef typename Def::parameter_types subrule_parameter_types;
+
+            typedef
+                subrule_context<
+                    this_type
+                  , fusion::cons<
+                        subrule_attr_reference_type, subrule_parameter_types>
+                  , subrule_locals_type
+                >
+            context_type;
+
+            // prepare attribute
+            typedef traits::make_attribute<
+                subrule_attr_type, Attribute> make_attribute;
+
+            // do down-stream transformation, provides attribute for 
+            // rhs parser
+            typedef traits::transform_attribute<
+                typename make_attribute::type, subrule_attr_type, spirit::qi::domain> 
+            transform;
+
+            typename make_attribute::type made_attr = make_attribute::call(attr);
+            typename transform::type attr_ = transform::pre(made_attr);
+
+            // If you are seeing a compilation error here, you are probably
+            // trying to use a subrule which has inherited attributes,
+            // passing values of incompatible types for them.
+            context_type context(*this, attr_, params, caller_context);
+
+            if (def.binder(first, last, context, skipper))
+            {
+                // do up-stream transformation, this integrates the results 
+                // back into the original attribute value, if appropriate
+                traits::post_transform(attr, attr_);
+                return true;
+            }
+
+            // inform attribute transformation of failed rhs
+            traits::fail_transform(attr, attr_);
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            // Forward to first subrule.
+            return fusion::front(defs).second.binder.p.what(context);
+        }
+
+        template <typename Defs2>
+        subrule_group<
+            typename fusion::result_of::as_map<
+                typename fusion::result_of::join<
+                    Defs const, Defs2 const>::type>::type>
+        operator,(subrule_group<Defs2> const& other) const
+        {
+            typedef subrule_group<
+                typename fusion::result_of::as_map<
+                    typename fusion::result_of::join<
+                        Defs const, Defs2 const>::type>::type> result_type;
+            return result_type(fusion::as_map(fusion::join(defs, other.defs)));
+        }
+
+        // bring in the operator() overloads
+        this_type const& get_parameterized_subject() const { return *this; }
+        typedef this_type parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        Defs defs;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule_definition: holds one particular definition of a subrule
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        int ID_
+      , typename Locals
+      , typename Attr
+      , typename AttrRef
+      , typename Parameters
+      , size_t ParamsSize
+      , typename Subject
+      , bool Auto_
+    >
+    struct subrule_definition
+    {
+        typedef mpl::int_<ID_> id_type;
+        BOOST_STATIC_CONSTANT(int, ID = ID_);
+
+        typedef Locals locals_type;
+        typedef Attr attr_type;
+        typedef AttrRef attr_reference_type;
+        typedef Parameters parameter_types;
+        static size_t const params_size = ParamsSize;
+
+        typedef Subject subject_type;
+        typedef mpl::bool_<Auto_> auto_type;
+        BOOST_STATIC_CONSTANT(bool, Auto = Auto_);
+
+        typedef spirit::qi::detail::parser_binder<
+            Subject, auto_type> binder_type;
+
+        subrule_definition(Subject const& subject, std::string const& name)
+          : binder(subject), name(name)
+        {
+        }
+
+        binder_type const binder;
+        std::string const name;
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule placeholder:
+    // - on subrule definition: helper for creation of subrule_group,
+    // - on subrule invocation: Proto terminal and parser.
+    ///////////////////////////////////////////////////////////////////////////
+    template <
+        int ID_
+      , typename T1 = unused_type
+      , typename T2 = unused_type
+    >
+    struct subrule
+      : proto::extends<
+            typename proto::terminal<
+                spirit::qi::reference<subrule<ID_, T1, T2> const>
+            >::type
+          , subrule<ID_, T1, T2>
+        >
+      , spirit::qi::parser<subrule<ID_, T1, T2> >
+    {
+        typedef mpl::int_<ID_> id_type;
+        BOOST_STATIC_CONSTANT(int, ID = ID_);
+
+        typedef subrule<ID_, T1, T2> this_type;
+        typedef spirit::qi::reference<this_type const> reference_;
+        typedef typename proto::terminal<reference_>::type terminal;
+        typedef proto::extends<terminal, this_type> base_type;
+
+        typedef mpl::vector<T1, T2> template_params;
+
+        // locals_type is a sequence of types to be used as local variables
+        typedef typename
+            spirit::detail::extract_locals<template_params>::type
+        locals_type;
+
+        typedef typename
+            spirit::detail::extract_sig<template_params>::type
+        sig_type;
+
+        // This is the subrule's attribute type
+        typedef typename
+            spirit::detail::attr_from_sig<sig_type>::type
+        attr_type;
+        typedef typename add_reference<attr_type>::type attr_reference_type;
+
+        // parameter_types is a sequence of types passed as parameters to the subrule
+        typedef typename
+            spirit::detail::params_from_sig<sig_type>::type
+        parameter_types;
+
+        static size_t const params_size =
+            fusion::result_of::size<parameter_types>::type::value;
+
+        explicit subrule(std::string const& name_ = "unnamed-subrule")
+          : base_type(terminal::make(reference_(*this)))
+          , name_(name_)
+        {
+        }
+
+        // compute type of this subrule's definition for expr type Expr
+        template <typename Expr, bool Auto>
+        struct def_type_helper
+        {
+            // Report invalid expression error as early as possible.
+            // If you got an error_invalid_expression error message here,
+            // then the expression (Expr) is not a valid spirit qi expression.
+            BOOST_SPIRIT_ASSERT_MATCH(spirit::qi::domain, Expr);
+
+            typedef typename result_of::compile<
+                spirit::qi::domain, Expr>::type subject_type;
+
+            typedef subrule_definition<
+                ID_
+              , locals_type
+              , attr_type
+              , attr_reference_type
+              , parameter_types
+              , params_size
+              , subject_type
+              , Auto
+            > const type;
+        };
+
+        // compute type of subrule group containing only this
+        // subrule's definition for expr type Expr
+        template <typename Expr, bool Auto>
+        struct group_type_helper
+        {
+            typedef typename def_type_helper<Expr, Auto>::type def_type;
+
+            // create Defs map with only one entry: (ID -> def)
+            typedef typename
+                fusion::result_of::make_map<id_type, def_type>::type
+            defs_type;
+
+            typedef subrule_group<defs_type> type;
+        };
+
+        template <typename Expr>
+        typename group_type_helper<Expr, false>::type
+        operator=(Expr const& expr) const
+        {
+            typedef group_type_helper<Expr, false> helper;
+            typedef typename helper::def_type def_type;
+            typedef typename helper::type result_type;
+            return result_type(fusion::make_map<id_type>(
+                def_type(compile<spirit::qi::domain>(expr), name_)));
+        }
+
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule const& sr, Expr const& expr)
+        {
+            typedef group_type_helper<Expr, true> helper;
+            typedef typename helper::def_type def_type;
+            typedef typename helper::type result_type;
+            return result_type(fusion::make_map<id_type>(
+                def_type(compile<spirit::qi::domain>(expr), sr.name_)));
+        }
+
+        // non-const versions needed to suppress proto's %= kicking in
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule const& sr, Expr& expr)
+        {
+            return operator%=(
+                sr
+              , static_cast<Expr const&>(expr));
+        }
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule& sr, Expr const& expr)
+        {
+            return operator%=(
+                static_cast<subrule const&>(sr)
+              , expr);
+        }
+        template <typename Expr>
+        friend typename group_type_helper<Expr, true>::type
+        operator%=(subrule& sr, Expr& expr)
+        {
+            return operator%=(
+                static_cast<subrule const&>(sr)
+              , static_cast<Expr const&>(expr));
+        }
+
+        std::string const& name() const
+        {
+            return name_;
+        }
+
+        void name(std::string const& str)
+        {
+            name_ = str;
+        }
+
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef attr_type type;
+        };
+
+        template <typename Iterator, typename Group
+          , typename Attributes, typename Locals
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , subrule_context<Group, Attributes, Locals>& context
+          , Skipper const& skipper, Attribute& attr) const
+        {
+            return context.group.template parse_subrule_id<ID_>(
+                first, last, context, skipper, attr);
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& /*first*/, Iterator const& /*last*/
+          , Context& /*context*/
+          , Skipper const& /*skipper*/, Attribute& /*attr*/) const
+        {
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule as a parser outside of a subrule group.
+            BOOST_SPIRIT_ASSERT_FAIL(Iterator
+              , subrule_used_outside_subrule_group, (id_type));
+
+            return false;
+        }
+
+        template <typename Iterator, typename Group
+          , typename Attributes, typename Locals
+          , typename Skipper, typename Attribute
+          , typename Params>
+        bool parse(Iterator& first, Iterator const& last
+          , subrule_context<Group, Attributes, Locals>& context
+          , Skipper const& skipper, Attribute& attr
+          , Params const& params) const
+        {
+            return context.group.template parse_subrule_id<ID_>(
+                first, last, context, skipper, attr, params);
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute
+          , typename Params>
+        bool parse(Iterator& /*first*/, Iterator const& /*last*/
+          , Context& /*context*/
+          , Skipper const& /*skipper*/, Attribute& /*attr*/
+          , Params const& /*params*/) const
+        {
+            // If you are seeing a compilation error here, you are trying
+            // to use a subrule as a parser outside of a subrule group.
+            BOOST_SPIRIT_ASSERT_FAIL(Iterator
+              , subrule_used_outside_subrule_group, (id_type));
+
+            return false;
+        }
+
+        template <typename Context>
+        info what(Context& /*context*/) const
+        {
+            return info(name_);
+        }
+
+        // bring in the operator() overloads
+        this_type const& get_parameterized_subject() const { return *this; }
+        typedef this_type parameterized_subject_type;
+        #include <boost/spirit/home/qi/nonterminal/detail/fcall.hpp>
+
+        std::string name_;
+    };
+}}}}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator.hpp
new file mode 100644 (file)
index 0000000..2c3606d
--- /dev/null
@@ -0,0 +1,17 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//  Copyright (c) 2011 Thomas Bernard
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_OPERATOR_OCT_20_2010_1258PM)
+#define SPIRIT_REPOSITORY_QI_OPERATOR_OCT_20_2010_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/operator/keywords.hpp>
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/detail/keywords.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/detail/keywords.hpp
new file mode 100644 (file)
index 0000000..43aa133
--- /dev/null
@@ -0,0 +1,696 @@
+/*=============================================================================
+  Copyright (c) 2011-2012 Thomas Bernard
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+  =============================================================================*/
+#if !defined(SPIRIT_KEYWORDS_DETAIL_MARCH_13_2007_1145PM)
+#define SPIRIT_KEYWORDS_DETAIL_MARCH_13_2007_1145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+#include <boost/fusion/include/nview.hpp>
+#include <boost/spirit/home/qi/string/lit.hpp>
+#include <boost/fusion/include/at.hpp>
+namespace boost { namespace spirit { namespace repository { namespace qi { namespace detail {
+    // Variant visitor class which handles dispatching the parsing to the selected parser
+    // This also handles passing the correct attributes and flags/counters to the subject parsers
+    template<typename T>
+    struct is_distinct : T::distinct { };
+    
+    template<typename T, typename Action>
+    struct is_distinct< spirit::qi::action<T,Action> > : T::distinct { };
+
+    template<typename T>
+    struct is_distinct< spirit::qi::hold_directive<T> > : T::distinct { };
+
+
+
+    template < typename Elements, typename Iterator ,typename Context ,typename Skipper
+        ,typename Flags ,typename Counters ,typename Attribute, typename NoCasePass>
+        struct parse_dispatcher
+        : public boost::static_visitor<bool>
+        {
+
+            typedef Iterator iterator_type;
+            typedef Context context_type;
+            typedef Skipper skipper_type;
+            typedef Elements elements_type;
+
+            typedef typename add_reference<Attribute>::type attr_reference;
+            public:
+            parse_dispatcher(const Elements &elements,Iterator& first, Iterator const& last
+                    , Context& context, Skipper const& skipper
+                    , Flags &flags, Counters &counters, attr_reference attr) :
+                elements(elements), first(first), last(last)
+                , context(context), skipper(skipper)
+                , flags(flags),counters(counters), attr(attr)
+            {}
+
+            template<typename T> bool operator()(T& idx) const
+            {
+                return call(idx,typename traits::not_is_unused<Attribute>::type());
+            }
+
+            template <typename Subject,typename Index>
+                bool call_subject_unused(
+                        Subject const &subject, Iterator &first, Iterator const &last
+                        , Context& context, Skipper const& skipper
+                        , Index& idx ) const
+                {
+                    Iterator save = first;
+                    skipper_keyword_marker<Skipper,NoCasePass>
+                        marked_skipper(skipper,flags[Index::value],counters[Index::value]);
+
+                    if(subject.parse(first,last,context,marked_skipper,unused))
+                    {
+                        return true;
+                    }
+                    save = save;
+                    return false;
+                }
+
+
+            template <typename Subject,typename Index>
+                bool call_subject(
+                        Subject const &subject, Iterator &first, Iterator const &last
+                        , Context& context, Skipper const& skipper
+                        , Index& idx ) const
+                {
+
+                    Iterator save = first;
+                    skipper_keyword_marker<Skipper,NoCasePass> 
+                        marked_skipper(skipper,flags[Index::value],counters[Index::value]);
+                    if(subject.parse(first,last,context,marked_skipper,fusion::at_c<Index::value>(attr)))
+                    {
+                        return true;
+                    }
+                    save = save;
+                    return false;
+                }
+
+            // Handle unused attributes
+            template <typename T> bool call(T &idx, mpl::false_) const{
+                typedef typename mpl::at<Elements,T>::type ElementType;
+                if(
+                       (!is_distinct<ElementType>::value)
+                    || skipper.parse(first,last,unused,unused,unused)
+                  ){
+                      spirit::qi::skip_over(first, last, skipper);
+                      return call_subject_unused(fusion::at_c<T::value>(elements), first, last, context, skipper, idx );
+                    }
+                return false;
+            }
+            // Handle normal attributes
+            template <typename T> bool call(T &idx, mpl::true_) const{
+                 typedef typename mpl::at<Elements,T>::type ElementType;
+                 if(
+                       (!is_distinct<ElementType>::value)
+                    || skipper.parse(first,last,unused,unused,unused)
+                  ){
+                      return call_subject(fusion::at_c<T::value>(elements), first, last, context, skipper, idx);
+                  }
+                return false;
+            }
+
+            const Elements &elements;
+            Iterator &first;
+            const Iterator &last;
+            Context & context;
+            const Skipper &skipper;
+            Flags &flags;
+            Counters &counters;
+            attr_reference attr;
+        };
+    // string keyword loop handler
+    template <typename Elements, typename StringKeywords, typename IndexList, typename FlagsType, typename Modifiers>
+        struct string_keywords
+        {
+            // Create a variant type to be able to store parser indexes in the embedded symbols parser
+            typedef typename
+                spirit::detail::as_variant<
+                IndexList >::type        parser_index_type;
+
+            ///////////////////////////////////////////////////////////////////////////
+            // build_char_type_sequence
+            //
+            // Build a fusion sequence from the kwd directive specified character type.
+            ///////////////////////////////////////////////////////////////////////////
+            template <typename Sequence >
+                struct build_char_type_sequence
+                {
+                    struct element_char_type
+                    {
+                        template <typename T>
+                            struct result;
+
+                        template <typename F, typename Element>
+                            struct result<F(Element)>
+                            {
+                                typedef typename Element::char_type type;
+
+                            };
+                        template <typename F, typename Element,typename Action>
+                            struct result<F(spirit::qi::action<Element,Action>) >
+                            {
+                                typedef typename Element::char_type type;
+                            };
+                        template <typename F, typename Element>
+                            struct result<F(spirit::qi::hold_directive<Element>)>
+                            {
+                                typedef typename Element::char_type type;
+                            };
+
+                        // never called, but needed for decltype-based result_of (C++0x)
+                        template <typename Element>
+                            typename result<element_char_type(Element)>::type
+                            operator()(Element&) const;
+                    };
+
+                    // Compute the list of character types of the child kwd directives
+                    typedef typename
+                        fusion::result_of::transform<Sequence, element_char_type>::type
+                        type;
+                };
+
+
+            ///////////////////////////////////////////////////////////////////////////
+            // get_keyword_char_type
+            //
+            // Collapses the character type comming from the subject kwd parsers and
+            // and checks that they are all identical (necessary in order to be able
+            // to build a tst parser to parse the keywords.
+            ///////////////////////////////////////////////////////////////////////////
+            template <typename Sequence>
+                struct get_keyword_char_type
+                {
+                    // Make sure each of the types occur only once in the type list
+                    typedef typename
+                        mpl::fold<
+                        Sequence, mpl::vector<>,
+                        mpl::if_<
+                            mpl::contains<mpl::_1, mpl::_2>,
+                        mpl::_1, mpl::push_back<mpl::_1, mpl::_2>
+                            >
+                            >::type
+                            no_duplicate_char_types;
+
+                    // If the compiler traps here this means you mixed
+                    // character type for the keywords specified in the
+                    // kwd directive sequence.
+                    BOOST_MPL_ASSERT_RELATION( mpl::size<no_duplicate_char_types>::value, ==, 1 );
+
+                    typedef typename mpl::front<no_duplicate_char_types>::type type;
+
+                };
+
+            // Get the character type for the tst parser
+            typedef typename build_char_type_sequence< StringKeywords >::type char_types;
+            typedef typename get_keyword_char_type<
+                typename mpl::if_<
+                  mpl::equal_to<
+                    typename mpl::size < char_types >::type
+                    , mpl::int_<0>
+                    >
+                  , mpl::vector< boost::spirit::standard::char_type >
+                  , char_types >::type
+                >::type  char_type;
+
+            // Our symbols container
+            typedef spirit::qi::tst< char_type, parser_index_type> keywords_type;
+
+            // Filter functor used for case insensitive parsing
+            template <typename CharEncoding>
+                struct no_case_filter
+                {
+                    char_type operator()(char_type ch) const
+                    {
+                        return static_cast<char_type>(CharEncoding::tolower(ch));
+                    }
+                };
+
+            ///////////////////////////////////////////////////////////////////////////
+            // build_case_type_sequence
+            //
+            // Build a fusion sequence from the kwd/ikwd directives
+            // in order to determine if case sensitive and case insensitive
+            // keywords have been mixed.
+            ///////////////////////////////////////////////////////////////////////////
+            template <typename Sequence >
+                struct build_case_type_sequence
+                {
+                    struct element_case_type
+                    {
+                        template <typename T>
+                            struct result;
+
+                        template <typename F, typename Element>
+                            struct result<F(Element)>
+                            {
+                                typedef typename Element::no_case_keyword type;
+
+                            };
+                        template <typename F, typename Element,typename Action>
+                            struct result<F(spirit::qi::action<Element,Action>) >
+                            {
+                                typedef typename Element::no_case_keyword type;
+                            };
+                        template <typename F, typename Element>
+                            struct result<F(spirit::qi::hold_directive<Element>)>
+                            {
+                                typedef typename Element::no_case_keyword type;
+                            };
+
+                        // never called, but needed for decltype-based result_of (C++0x)
+                        template <typename Element>
+                            typename result<element_case_type(Element)>::type
+                            operator()(Element&) const;
+                    };
+
+                    // Compute the list of character types of the child kwd directives
+                    typedef typename
+                        fusion::result_of::transform<Sequence, element_case_type>::type
+                        type;
+                };
+
+            ///////////////////////////////////////////////////////////////////////////
+            // get_nb_case_types
+            //
+            // Counts the number of entries in the case type sequence matching the
+            // CaseType parameter (mpl::true_  -> case insensitve
+            //                   , mpl::false_ -> case sensitive
+            ///////////////////////////////////////////////////////////////////////////
+            template <typename Sequence,typename CaseType>
+                struct get_nb_case_types
+                {
+                    // Make sure each of the types occur only once in the type list
+                    typedef typename
+                        mpl::count_if<
+                        Sequence, mpl::equal_to<mpl::_,CaseType>
+                        >::type type;
+
+
+                };
+            // Build the case type sequence
+            typedef typename build_case_type_sequence< StringKeywords >::type case_type_sequence;
+            // Count the number of case sensitive entries and case insensitve entries
+            typedef typename get_nb_case_types<case_type_sequence,mpl::true_>::type ikwd_count;
+            typedef typename get_nb_case_types<case_type_sequence,mpl::false_>::type kwd_count;
+            // Get the size of the original sequence
+            typedef typename mpl::size<IndexList>::type nb_elements;
+            // Determine if all the kwd directive are case sensitive/insensitive
+            typedef typename mpl::and_<
+                typename mpl::greater< nb_elements, mpl::int_<0> >::type
+                , typename mpl::equal_to< ikwd_count, nb_elements>::type
+                >::type all_ikwd;
+
+            typedef typename mpl::and_<
+                typename mpl::greater< nb_elements, mpl::int_<0> >::type
+                , typename mpl::equal_to< kwd_count, nb_elements>::type
+                >::type all_kwd;
+
+            typedef typename mpl::or_< all_kwd, all_ikwd >::type all_directives_of_same_type;
+
+            // Do we have a no case modifier
+            typedef has_modifier<Modifiers, spirit::tag::char_code_base<spirit::tag::no_case> > no_case_modifier;
+
+            // Should the no_case filter always be used ?
+            typedef typename mpl::or_<
+                no_case_modifier,
+                mpl::and_<
+                    all_directives_of_same_type
+                    ,all_ikwd
+                    >
+                    >::type
+                    no_case;
+
+            typedef no_case_filter<
+                typename spirit::detail::get_encoding_with_case<
+                Modifiers
+                , char_encoding::standard
+                , no_case::value>::type>
+                nc_filter;
+            // Determine the standard case filter type
+            typedef typename mpl::if_<
+                no_case
+                , nc_filter
+                , spirit::qi::tst_pass_through >::type
+                first_pass_filter_type;
+
+            typedef typename mpl::or_<
+                    all_directives_of_same_type
+                  , no_case_modifier
+                >::type requires_one_pass;
+
+
+            // Functor which adds all the keywords/subject parser indexes
+            // collected from the subject kwd directives to the keyword tst parser
+            struct keyword_entry_adder
+            {
+                typedef int result_type;
+
+                keyword_entry_adder(shared_ptr<keywords_type> lookup,FlagsType &flags, Elements &elements) :
+                    lookup(lookup)
+                    ,flags(flags)
+                    ,elements(elements)
+                {}
+
+                template <typename T>
+                    int operator()(const T &index) const
+                    {
+                        return call(fusion::at_c<T::value>(elements),index);
+                    }
+
+                template <typename T, typename Position, typename Action>
+                    int call(const spirit::qi::action<T,Action> &parser, const Position position ) const
+                    {
+
+                        // Make the keyword/parse index entry in the tst parser
+                        lookup->add(
+                                traits::get_begin<char_type>(get_string(parser.subject.keyword)),
+                                traits::get_end<char_type>(get_string(parser.subject.keyword)),
+                                position
+                                );
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.subject.iter.flag_init();
+                        return 0;
+                    }
+
+                template <typename T, typename Position>
+                    int call( const T & parser, const Position position) const
+                    {
+                        // Make the keyword/parse index entry in the tst parser
+                        lookup->add(
+                                traits::get_begin<char_type>(get_string(parser.keyword)),
+                                traits::get_end<char_type>(get_string(parser.keyword)),
+                                position
+                                );
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.iter.flag_init();
+                        return 0;
+                    }
+
+                template <typename T, typename Position>
+                    int call( const spirit::qi::hold_directive<T> & parser, const Position position) const
+                    {
+                        // Make the keyword/parse index entry in the tst parser
+                        lookup->add(
+                                traits::get_begin<char_type>(get_string(parser.subject.keyword)),
+                                traits::get_end<char_type>(get_string(parser.subject.keyword)),
+                                position
+                                );
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.subject.iter.flag_init();
+                        return 0;
+                    }
+
+
+                template <typename String, bool no_attribute>
+                const String get_string(const boost::spirit::qi::literal_string<String,no_attribute> &parser) const
+                {
+                        return parser.str;
+                }
+
+        template <typename String, bool no_attribute>
+                const typename boost::spirit::qi::no_case_literal_string<String,no_attribute>::string_type &
+                        get_string(const boost::spirit::qi::no_case_literal_string<String,no_attribute> &parser) const
+                {
+                        return parser.str_lo;
+                }
+   
+
+
+                shared_ptr<keywords_type> lookup;
+                FlagsType & flags;
+                Elements &elements;
+            };
+
+            string_keywords(Elements &elements,FlagsType &flags_init) : lookup(new keywords_type())
+            {
+                // Loop through all the subject parsers to build the keyword parser symbol parser
+                IndexList indexes;
+                keyword_entry_adder f1(lookup,flags_init,elements);
+                fusion::for_each(indexes,f1);
+
+            }
+            template <typename Iterator,typename ParseVisitor, typename Skipper>
+                bool parse(
+                        Iterator &first,
+                        const Iterator &last,
+                        const ParseVisitor &parse_visitor,
+                        const Skipper &skipper) const
+                {
+                    if(parser_index_type* val_ptr =
+                            lookup->find(first,last,first_pass_filter_type()))
+                    {                        
+                        if(!apply_visitor(parse_visitor,*val_ptr)){
+                            return false;
+                        }
+            return true;
+                    }
+                    return false;
+                }
+
+            template <typename Iterator,typename ParseVisitor, typename NoCaseParseVisitor,typename Skipper>
+                bool parse(
+                        Iterator &first,
+                        const Iterator &last,
+                        const ParseVisitor &parse_visitor,
+                        const NoCaseParseVisitor &no_case_parse_visitor,
+                        const Skipper &skipper) const
+                {
+                    Iterator saved_first = first;
+                    if(parser_index_type* val_ptr =
+                            lookup->find(first,last,first_pass_filter_type()))
+                    {
+                        if(!apply_visitor(parse_visitor,*val_ptr)){
+                            return false;
+                        }
+            return true;
+                    }
+                    // Second pass case insensitive
+                    else if(parser_index_type* val_ptr
+                            = lookup->find(saved_first,last,nc_filter()))
+                    {
+                        first = saved_first;
+                        if(!apply_visitor(no_case_parse_visitor,*val_ptr)){
+                            return false;
+                        }
+            return true;
+                    }
+                    return false;
+                }
+            shared_ptr<keywords_type> lookup;
+
+
+        };
+
+    struct empty_keywords_list
+    {
+        typedef mpl::true_ requires_one_pass;
+
+        empty_keywords_list()
+        {}
+        template<typename Elements>
+        empty_keywords_list(const Elements &)
+        {}
+
+       template<typename Elements, typename FlagsInit>
+        empty_keywords_list(const Elements &, const FlagsInit &)
+        {}
+
+        template <typename Iterator,typename ParseVisitor, typename NoCaseParseVisitor,typename Skipper>
+        bool parse(
+                        Iterator &first,
+                        const Iterator &last,
+                        const ParseVisitor &parse_visitor,
+                        const NoCaseParseVisitor &no_case_parse_visitor,
+                        const Skipper &skipper) const
+                {
+                        return false;
+                }
+
+        template <typename Iterator,typename ParseVisitor, typename Skipper>
+                bool parse(
+                        Iterator &first,
+                        const Iterator &last,
+                        const ParseVisitor &parse_visitor,
+                        const Skipper &skipper) const
+                {
+                    return false;
+                }
+
+        template <typename ParseFunction>
+        bool parse( ParseFunction &function ) const
+                {
+                   return false;
+                }
+    };
+
+    template<typename ComplexKeywords>
+    struct complex_keywords
+    {
+      // Functor which performs the flag initialization for the complex keyword parsers
+      template <typename FlagsType, typename Elements>
+            struct flag_init_value_setter
+            {
+                typedef int result_type;
+
+                flag_init_value_setter(Elements &elements,FlagsType &flags)
+          :flags(flags)
+                    ,elements(elements)
+                {}
+
+                template <typename T>
+                    int operator()(const T &index) const
+                    {
+                        return call(fusion::at_c<T::value>(elements),index);
+                    }
+
+                template <typename T, typename Position, typename Action>
+                    int call(const spirit::qi::action<T,Action> &parser, const Position position ) const
+                    {
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.subject.iter.flag_init();
+                        return 0;
+                    }
+
+                template <typename T, typename Position>
+                    int call( const T & parser, const Position position) const
+                    {
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.iter.flag_init();
+                        return 0;
+                    }
+
+                template <typename T, typename Position>
+                    int call( const spirit::qi::hold_directive<T> & parser, const Position position) const
+                    {
+                        // Get the initial state of the flags array and store it in the flags initializer
+                        flags[Position::value]=parser.subject.iter.flag_init();
+                        return 0;
+                    }
+
+                FlagsType & flags;
+                Elements &elements;
+            };
+
+    template <typename Elements, typename Flags>
+        complex_keywords(Elements &elements, Flags &flags)
+        {
+      flag_init_value_setter<Flags,Elements> flag_initializer(elements,flags);
+      fusion::for_each(complex_keywords_inst,flag_initializer);
+    }
+
+        template <typename ParseFunction>
+        bool parse( ParseFunction &function ) const
+                {
+                   return fusion::any(complex_keywords_inst,function);
+                }
+
+        ComplexKeywords complex_keywords_inst;
+    };
+    // This helper class enables jumping over intermediate directives
+    // down the kwd parser iteration count checking policy
+    struct register_successful_parse
+    {
+        template <typename Subject>
+            static bool call(Subject const &subject,bool &flag, int &counter)
+            {
+                return subject.iter.register_successful_parse(flag,counter);
+            }
+        template <typename Subject, typename Action>
+            static bool call(spirit::qi::action<Subject, Action> const &subject,bool &flag, int &counter)
+            {
+                return subject.subject.iter.register_successful_parse(flag,counter);
+            }
+        template <typename Subject>
+            static bool call(spirit::qi::hold_directive<Subject> const &subject,bool &flag, int &counter)
+            {
+                return subject.subject.iter.register_successful_parse(flag,counter);
+            }
+    };
+
+    // This helper class enables jumping over intermediate directives
+    // down the kwd parser
+    struct extract_keyword
+    {
+        template <typename Subject>
+            static Subject const& call(Subject const &subject)
+            {
+                return subject;
+            }
+        template <typename Subject, typename Action>
+            static Subject const& call(spirit::qi::action<Subject, Action> const &subject)
+            {
+                return subject.subject;
+            }
+        template <typename Subject>
+            static Subject const& call(spirit::qi::hold_directive<Subject> const &subject)
+            {
+                return subject.subject;
+            }
+    };
+
+    template <typename ParseDispatcher>
+        struct complex_kwd_function
+        {
+            typedef typename ParseDispatcher::iterator_type Iterator;
+            typedef typename ParseDispatcher::context_type Context;
+            typedef typename ParseDispatcher::skipper_type Skipper;
+            complex_kwd_function(
+                    Iterator& first, Iterator const& last
+                    , Context& context, Skipper const& skipper, ParseDispatcher &dispatcher)
+                : first(first)
+                  , last(last)
+                  , context(context)
+                  , skipper(skipper)
+                  , dispatcher(dispatcher)
+            {
+            }
+
+            template <typename Component>
+                bool operator()(Component const& component)
+                {
+                    Iterator save = first;
+                    if(
+                        extract_keyword::call(
+                                fusion::at_c<
+                                        Component::value
+                                        ,typename ParseDispatcher::elements_type
+                                >(dispatcher.elements)
+                                )
+                                .keyword.parse(
+                                        first
+                                        ,last
+                                        ,context
+                                        ,skipper
+                                        ,unused)
+                    )
+                    {
+                        if(!dispatcher(component)){
+                            first = save;
+                            return false;
+                        }
+                        return true;
+                    }
+                    return false;
+                }
+
+            Iterator& first;
+            Iterator const& last;
+            Context& context;
+            Skipper const& skipper;
+            ParseDispatcher const& dispatcher;
+
+            private:
+            // silence MSVC warning C4512: assignment operator could not be generated
+            complex_kwd_function& operator= (complex_kwd_function const&);
+        };
+
+
+}}}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/keywords.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/operator/keywords.hpp
new file mode 100644 (file)
index 0000000..4933f91
--- /dev/null
@@ -0,0 +1,436 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2011-2012 Thomas Bernard
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_KEYWORDS_OR_MARCH_13_2007_1145PM)
+#define SPIRIT_KEYWORDS_OR_MARCH_13_2007_1145PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/detail/permute_function.hpp>
+#include <boost/spirit/home/qi/detail/attributes.hpp>
+#include <boost/spirit/home/support/detail/what_function.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/fusion/include/iter_fold.hpp>
+#include <boost/fusion/include/at.hpp>
+#include <boost/fusion/include/value_at.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/optional.hpp>
+#include <boost/foreach.hpp>
+#include <boost/array.hpp>
+#include <boost/spirit/home/qi/string/symbols.hpp>
+#include <boost/spirit/home/qi/string/lit.hpp>
+#include <boost/spirit/home/qi/action/action.hpp>
+#include <boost/spirit/home/qi/directive/hold.hpp>
+#include <boost/mpl/count_if.hpp>
+#include <boost/mpl/range_c.hpp>
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/filter_view.hpp>
+#include <boost/fusion/include/zip_view.hpp>
+#include <boost/fusion/include/as_vector.hpp>
+#include <boost/variant/static_visitor.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/repository/home/qi/operator/detail/keywords.hpp>
+#include <boost/fusion/include/any.hpp>
+
+
+namespace boost { namespace spirit
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+    template <>
+    struct use_operator<qi::domain, proto::tag::divides > // enables /
+      : mpl::true_ {};
+
+    template <>
+    struct flatten_tree<qi::domain, proto::tag::divides> // flattens /
+      : mpl::true_ {};
+}}
+
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+
+    // kwd directive parser type identification
+    namespace detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(kwd_parser_id)
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(complex_kwd_parser_id)
+
+
+    }
+
+    // kwd directive type query
+    template <typename T>
+    struct is_kwd_parser : detail::has_kwd_parser_id<T> {};
+
+    template <typename Subject, typename Action>
+    struct is_kwd_parser<spirit::qi::action<Subject,Action> > : detail::has_kwd_parser_id<Subject> {};
+
+    template <typename Subject>
+    struct is_kwd_parser<spirit::qi::hold_directive<Subject> > : detail::has_kwd_parser_id<Subject> {};
+
+    template <typename T>
+    struct is_complex_kwd_parser : detail::has_complex_kwd_parser_id<T> {};
+
+    template <typename Subject, typename Action>
+    struct is_complex_kwd_parser<spirit::qi::action<Subject,Action> > : detail::has_complex_kwd_parser_id<Subject> {};
+
+    template <typename Subject>
+    struct is_complex_kwd_parser<spirit::qi::hold_directive<Subject> > : detail::has_complex_kwd_parser_id<Subject> {};
+
+
+    // Keywords operator
+    template <typename Elements, typename Modifiers>
+    struct keywords : spirit::qi::nary_parser<keywords<Elements,Modifiers> >
+    {
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            // Put all the element attributes in a tuple
+            typedef typename traits::build_attribute_sequence<
+                Elements, Context, traits::sequence_attribute_transform, Iterator, spirit::qi::domain >::type
+            all_attributes;
+
+            // Now, build a fusion vector over the attributes. Note
+            // that build_fusion_vector 1) removes all unused attributes
+            // and 2) may return unused_type if all elements have
+            // unused_type(s).
+            typedef typename
+                traits::build_fusion_vector<all_attributes>::type
+            type;
+        };
+
+        /// Make sure that all subjects are of the kwd type
+        typedef typename mpl::count_if<
+                Elements,
+                        mpl::not_<
+                           mpl::or_<
+                              is_kwd_parser<
+                                mpl::_1
+                              > ,
+                              is_complex_kwd_parser<
+                                mpl::_1
+                              >
+                          >
+                        >
+                > non_kwd_subject_count;
+
+        /// If the assertion fails here then you probably forgot to wrap a
+        /// subject of the / operator in a kwd directive
+        BOOST_MPL_ASSERT_RELATION( non_kwd_subject_count::value, ==, 0 );
+
+        ///////////////////////////////////////////////////////////////////////////
+        // build_parser_tags
+        //
+        // Builds a boost::variant from an mpl::range_c in order to "mark" every
+        // parser of the fusion sequence. The integer constant is used in the parser
+        // dispatcher functor in order to use the parser corresponding to the recognised
+        // keyword.
+        ///////////////////////////////////////////////////////////////////////////
+
+        template <typename Sequence>
+        struct build_parser_tags
+        {
+            // Get the sequence size
+            typedef typename mpl::size< Sequence >::type sequence_size;
+
+            // Create an integer_c constant for every parser in the sequence
+            typedef typename mpl::range_c<int, 0, sequence_size::value>::type int_range;
+
+            // Transform the range_c to an mpl vector in order to be able to transform it into a variant
+            typedef typename mpl::copy<int_range, mpl::back_inserter<mpl::vector<> > >::type type;
+
+        };
+        // Build an index mpl vector
+        typedef typename build_parser_tags< Elements >::type parser_index_vector;
+
+        template <typename idx>
+        struct is_complex_kwd_parser_filter : is_complex_kwd_parser< typename mpl::at<Elements, idx>::type >
+        {};
+
+        template <typename idx>
+        struct is_kwd_parser_filter : is_kwd_parser< typename mpl::at<Elements, idx>::type >
+        {};
+
+        // filter out the string kwd directives
+        typedef typename mpl::filter_view< Elements, is_kwd_parser<mpl::_> >::type string_keywords;
+
+        typedef typename mpl::filter_view< parser_index_vector ,
+                                         is_kwd_parser_filter< mpl::_ >
+                                             >::type string_keyword_indexes;
+        // filter out the complex keywords
+        typedef typename mpl::filter_view< parser_index_vector ,
+                                         is_complex_kwd_parser_filter< mpl::_ >
+                                            >::type complex_keywords_indexes;
+
+        //typedef typename fusion::filter_view< Elements, is_complex_kwd_parser< mpl::_ > > complex_keywords_view;
+
+        typedef typename mpl::if_<
+                typename mpl::empty<complex_keywords_indexes>::type,
+                detail::empty_keywords_list,
+                detail::complex_keywords< complex_keywords_indexes >
+                >::type complex_keywords_type;
+
+        // build a bool array and an integer array which will be used to
+        // check that the repetition constraints of the kwd parsers are
+        // met and bail out a soon as possible
+        typedef boost::array<bool, fusion::result_of::size<Elements>::value> flags_type;
+        typedef boost::array<int, fusion::result_of::size<Elements>::value> counters_type;
+
+        typedef typename mpl::if_<
+                        typename mpl::empty<string_keyword_indexes>::type,
+                        detail::empty_keywords_list,
+                        detail::string_keywords<
+                                Elements,
+                                string_keywords,
+                                string_keyword_indexes,
+                                flags_type,
+                                Modifiers>
+                >::type string_keywords_type;
+
+        keywords(Elements const& elements_) :
+              elements(elements_)
+            , string_keywords_inst(elements,flags_init)
+      , complex_keywords_inst(elements,flags_init)
+        {
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_) const
+        {
+            // Select which parse function to call
+            // We need to handle the case where kwd / ikwd directives have been mixed
+            // This is where we decide which function should be called.
+            return parse_impl(first, last, context, skipper, attr_,
+                                typename string_keywords_type::requires_one_pass()
+                             );
+        }
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_,mpl::true_ /* one pass */) const
+          {
+
+            // wrap the attribute in a tuple if it is not a tuple
+            typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
+
+            flags_type flags(flags_init);
+            //flags.assign(false);
+
+            counters_type counters;
+            counters.assign(0);
+
+            typedef repository::qi::detail::parse_dispatcher<Elements,Iterator, Context, Skipper
+                                    , flags_type, counters_type
+                                    , typename traits::wrap_if_not_tuple<Attribute>::type
+                                    , mpl::false_ > parser_visitor_type;
+
+            parser_visitor_type parse_visitor(elements, first, last
+                                             , context, skipper, flags
+                                             , counters, attr);
+
+            typedef repository::qi::detail::complex_kwd_function< parser_visitor_type > complex_kwd_function_type;
+
+            complex_kwd_function_type
+                     complex_function(first,last,context,skipper,parse_visitor);
+
+            // We have a bool array 'flags' with one flag for each parser as well as a 'counter'
+            // array.
+            // The kwd directive sets and increments the counter when a successeful parse occured
+            // as well as the slot of the corresponding parser to true in the flags array as soon
+            // the minimum repetition requirement is met and keeps that value to true as long as
+            // the maximum repetition requirement is met.
+            // The parsing takes place here in two steps:
+            // 1) parse a keyword and fetch the parser index associated with that keyword
+            // 2) call the associated parser and store the parsed value in the matching attribute.
+
+            while(true)
+            {
+
+                spirit::qi::skip_over(first, last, skipper);
+                Iterator save = first;
+                if (string_keywords_inst.parse(first, last,parse_visitor,skipper))
+                {
+                    save = first;
+                }
+                else {
+                  // restore the position to the last successful keyword parse
+                  first = save;
+                  if(!complex_keywords_inst.parse(complex_function))
+                  {
+                    first = save;
+                    // Check that we are leaving the keywords parser in a successfull state
+                    BOOST_FOREACH(bool &valid,flags)
+                    {
+                      if(!valid)
+                      {
+                        return false;
+                      }
+                    }
+                    return true;
+                  }
+                  else
+                    save = first;
+                }
+            }
+            return false;
+          }
+
+        // Handle the mixed kwd and ikwd case
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse_impl(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr_,mpl::false_ /* two passes */) const
+          {
+
+            // wrap the attribute in a tuple if it is not a tuple
+            typename traits::wrap_if_not_tuple<Attribute>::type attr(attr_);
+
+            flags_type flags(flags_init);
+            //flags.assign(false);
+
+            counters_type counters;
+            counters.assign(0);
+
+            typedef detail::parse_dispatcher<Elements, Iterator, Context, Skipper
+                                    , flags_type, counters_type
+                                    , typename traits::wrap_if_not_tuple<Attribute>::type
+                                    , mpl::false_> parser_visitor_type;
+
+           typedef detail::parse_dispatcher<Elements, Iterator, Context, Skipper
+                                    , flags_type, counters_type
+                                    , typename traits::wrap_if_not_tuple<Attribute>::type
+                                    , mpl::true_> no_case_parser_visitor_type;
+
+
+            parser_visitor_type parse_visitor(elements,first,last
+                                             ,context,skipper,flags,counters,attr);
+            no_case_parser_visitor_type no_case_parse_visitor(elements,first,last
+                                             ,context,skipper,flags,counters,attr);
+
+            typedef repository::qi::detail::complex_kwd_function< parser_visitor_type > complex_kwd_function_type;
+
+            complex_kwd_function_type
+                     complex_function(first,last,context,skipper,parse_visitor);
+
+
+            // We have a bool array 'flags' with one flag for each parser as well as a 'counter'
+            // array.
+            // The kwd directive sets and increments the counter when a successeful parse occured
+            // as well as the slot of the corresponding parser to true in the flags array as soon
+            // the minimum repetition requirement is met and keeps that value to true as long as
+            // the maximum repetition requirement is met.
+            // The parsing takes place here in two steps:
+            // 1) parse a keyword and fetch the parser index associated with that keyword
+            // 2) call the associated parser and store the parsed value in the matching attribute.
+
+            while(true)
+            {
+                spirit::qi::skip_over(first, last, skipper);
+                Iterator save = first;
+                // String keywords pass
+                if (string_keywords_inst.parse(first,last,parse_visitor,no_case_parse_visitor,skipper))
+                {
+                    save = first;
+                }
+                else {
+                  first = save;
+
+                  if(!complex_keywords_inst.parse(complex_function))
+                  {
+                    first = save;
+                    // Check that we are leaving the keywords parser in a successfull state
+                    BOOST_FOREACH(bool &valid,flags)
+                    {
+                      if(!valid)
+                      {
+                        return false;
+                      }
+                    }
+                    return true;
+                  }
+                  else
+                  {
+                    save = first;
+                  }
+                }
+            }
+            return false;
+          }
+
+        template <typename Context>
+        info what(Context& context) const
+        {
+            info result("keywords");
+            fusion::for_each(elements,
+                spirit::detail::what_function<Context>(result, context));
+            return result;
+        }
+        flags_type flags_init;
+        Elements elements;
+        string_keywords_type string_keywords_inst;
+        complex_keywords_type complex_keywords_inst;
+
+    };
+}}}}
+
+namespace boost { namespace spirit { namespace qi {
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Elements, typename Modifiers >
+    struct make_composite<proto::tag::divides, Elements, Modifiers >
+    {
+        typedef repository::qi::keywords<Elements,Modifiers> result_type;
+        result_type operator()(Elements ref, unused_type) const
+        {
+            return result_type(ref);
+        }
+    };
+
+
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    // We specialize this for keywords (see support/attributes.hpp).
+    // For keywords, we only wrap the attribute in a tuple IFF
+    // it is not already a fusion tuple.
+    template <typename Elements, typename Modifiers,typename Attribute>
+    struct pass_attribute<repository::qi::keywords<Elements,Modifiers>, Attribute>
+      : wrap_if_not_tuple<Attribute> {};
+
+    template <typename Elements, typename Modifiers>
+    struct has_semantic_action<repository::qi::keywords<Elements, Modifiers> >
+      : nary_has_semantic_action<Elements> {};
+
+    template <typename Elements, typename Attribute, typename Context
+        , typename Iterator, typename Modifiers>
+    struct handles_container<repository::qi::keywords<Elements,Modifiers>, Attribute
+        , Context, Iterator>
+      : nary_handles_container<Elements, Attribute, Context, Iterator> {};
+
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive.hpp
new file mode 100644 (file)
index 0000000..400e6d9
--- /dev/null
@@ -0,0 +1,19 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+//  Copyright (c) 2001-2011 Joel de Guzman
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(SPIRIT_REPOSITORY_QI_PRIMITIVE_APR_28_2009_1258PM)
+#define SPIRIT_REPOSITORY_QI_PRIMITIVE_APR_28_2009_1258PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive/advance.hpp>
+#include <boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp>
+#include <boost/spirit/repository/home/qi/primitive/iter_pos.hpp>
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/advance.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/advance.hpp
new file mode 100644 (file)
index 0000000..11a74bb
--- /dev/null
@@ -0,0 +1,130 @@
+//  Copyright (c) 2011 Aaron Graham
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_QI_ADVANCE_JAN_23_2011_1203PM)
+#define BOOST_SPIRIT_REPOSITORY_QI_ADVANCE_JAN_23_2011_1203PM
+
+#include <boost/spirit/include/qi_parse.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// definition the place holder
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    BOOST_SPIRIT_TERMINAL_EX(advance);
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// implementation the enabler
+namespace boost { namespace spirit
+{
+    template <typename A0>
+    struct use_terminal<qi::domain
+      , terminal_ex<repository::qi::tag::advance, fusion::vector1<A0> > >
+      : mpl::or_<is_integral<A0>, is_enum<A0> >
+    {};
+
+    template <>
+    struct use_lazy_terminal<qi::domain, repository::qi::tag::advance, 1>
+      : mpl::true_
+    {};
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// implementation of the parser
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    template <typename Int>
+    struct advance_parser
+      : boost::spirit::qi::primitive_parser< advance_parser<Int> >
+    {
+        // Define the attribute type exposed by this parser component
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef boost::spirit::unused_type type;
+        };
+
+        advance_parser(Int dist)
+          : dist(dist)
+        {}
+
+        // This function is called during the actual parsing process
+        template <typename Iterator, typename Context
+            , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+            , Context&, Skipper&, Attribute&) const
+        {
+            // This series of checks is designed to fail parsing on negative
+            // values, without generating a "expression always evaluates true"
+            // warning on unsigned types.
+            if (dist == Int(0)) return true;
+            if (dist < Int(1)) return false;
+
+            typedef typename std::iterator_traits<Iterator>::iterator_category
+                iterator_category;
+            return advance(first, last, iterator_category());
+        }
+
+        // This function is called during error handling to create
+        // a human readable string for the error context.
+        template <typename Context>
+        boost::spirit::info what(Context&) const
+        {
+            return boost::spirit::info("advance");
+        }
+
+    private:
+        // this is the general implementation used by most iterator categories
+        template <typename Iterator, typename IteratorCategory>
+        bool advance(Iterator& first, Iterator const& last
+            , IteratorCategory) const
+        {
+            Int n = dist;
+            Iterator i = first;
+            while (n)
+            {
+                if (i == last) return false;
+                ++i;
+                --n;
+            }
+            first = i;
+            return true;
+        }
+
+        // this is a specialization for random access iterators
+        template <typename Iterator>
+        bool advance(Iterator& first, Iterator const& last
+            , std::random_access_iterator_tag) const
+        {
+            Iterator const it = first + dist;
+            if (it > last) return false;
+            first = it;
+            return true;
+        }
+
+        Int const dist;
+    };
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// instantiation of the parser
+namespace boost { namespace spirit { namespace qi
+{
+    template <typename Modifiers, typename A0>
+    struct make_primitive<
+          terminal_ex<repository::qi::tag::advance, fusion::vector1<A0> >
+        , Modifiers>
+    {
+        typedef repository::qi::advance_parser<A0> result_type;
+
+        template <typename Terminal>
+        result_type operator()(Terminal const& term, unused_type) const
+        {
+            return result_type(fusion::at_c<0>(term.args));
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp
new file mode 100644 (file)
index 0000000..cd4ab0c
--- /dev/null
@@ -0,0 +1,92 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_QI_FLUSH_MULTI_PASS_JUL_10_2009_0535PM)
+#define BOOST_SPIRIT_REPOSITORY_QI_FLUSH_MULTI_PASS_JUL_10_2009_0535PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/qi/domain.hpp>
+#include <boost/spirit/home/qi/meta_compiler.hpp>
+#include <boost/spirit/home/support/common_terminals.hpp>
+#include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes.hpp>
+#include <boost/spirit/home/support/multi_pass.hpp>
+
+#include <boost/spirit/repository/home/support/flush_multi_pass.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit 
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Enablers
+    ///////////////////////////////////////////////////////////////////////////
+
+    // enables flush_multi_pass
+    template <>
+    struct use_terminal<qi::domain, repository::tag::flush_multi_pass>
+      : mpl::true_ {};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    using repository::flush_multi_pass_type;
+    using repository::flush_multi_pass;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // for a flush_multi_pass_parser generated parser
+    struct flush_multi_pass_parser
+      : spirit::qi::primitive_parser<flush_multi_pass_parser>
+    {
+        template <typename Context, typename Unused>
+        struct attribute
+        {
+            typedef unused_type type;
+        };
+
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context& context, Skipper const& skipper
+          , Attribute& attr) const
+        {
+            spirit::traits::clear_queue(first, traits::clear_mode::clear_always);
+            return true;
+        }
+
+        template <typename Context>
+        info what(Context const& ctx) const
+        {
+            return info("flush_multi_pass");
+        }
+    };
+
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace qi
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // Parser generators: make_xxx function (objects)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Modifiers>
+    struct make_primitive<repository::tag::flush_multi_pass, Modifiers>
+    {
+        typedef repository::qi::flush_multi_pass_parser result_type;
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+
+}}}
+
+#endif
+
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/iter_pos.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/qi/primitive/iter_pos.hpp
new file mode 100644 (file)
index 0000000..6925ac2
--- /dev/null
@@ -0,0 +1,83 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_QI_ITER_POS_NOV_20_2009_1245PM)
+#define BOOST_SPIRIT_REPOSITORY_QI_ITER_POS_NOV_20_2009_1245PM
+
+#include <boost/spirit/include/qi_parse.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// definition the place holder 
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    BOOST_SPIRIT_TERMINAL(iter_pos);
+}}}} 
+
+///////////////////////////////////////////////////////////////////////////////
+// implementation the enabler
+namespace boost { namespace spirit 
+{ 
+    // We want custom_parser::iter_pos to be usable as a terminal only, 
+    // and only for parser expressions (qi::domain).
+    template <>
+    struct use_terminal<qi::domain, repository::qi::tag::iter_pos> 
+      : mpl::true_ 
+    {}; 
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// implementation of the parser
+namespace boost { namespace spirit { namespace repository { namespace qi
+{
+    struct iter_pos_parser 
+      : boost::spirit::qi::primitive_parser<iter_pos_parser>
+    {
+        // Define the attribute type exposed by this parser component
+        template <typename Context, typename Iterator>
+        struct attribute
+        {
+            typedef Iterator type;
+        };
+
+        // This function is called during the actual parsing process
+        template <typename Iterator, typename Context
+          , typename Skipper, typename Attribute>
+        bool parse(Iterator& first, Iterator const& last
+          , Context&, Skipper const& skipper, Attribute& attr) const
+        {
+            boost::spirit::qi::skip_over(first, last, skipper);
+            boost::spirit::traits::assign_to(first, attr);
+            return true;
+        }
+
+        // This function is called during error handling to create
+        // a human readable string for the error context.
+        template <typename Context>
+        boost::spirit::info what(Context&) const
+        {
+            return boost::spirit::info("iter_pos");
+        }
+    };
+}}}}
+
+///////////////////////////////////////////////////////////////////////////////
+// instantiation of the parser
+namespace boost { namespace spirit { namespace qi
+{
+    // This is the factory function object invoked in order to create 
+    // an instance of our iter_pos_parser.
+    template <typename Modifiers>
+    struct make_primitive<repository::qi::tag::iter_pos, Modifiers>
+    {
+        typedef repository::qi::iter_pos_parser result_type;
+
+        result_type operator()(unused_type, unused_type) const
+        {
+            return result_type();
+        }
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/confix.hpp
new file mode 100644 (file)
index 0000000..ac95127
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_CONFIX_APR_28_2009_0110PM)
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_CONFIX_APR_28_2009_0110PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+
+namespace boost { namespace spirit { namespace repository
+{
+    // The confix extended terminal
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX(( confix, confix_type ))
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/distinct.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/distinct.hpp
new file mode 100644 (file)
index 0000000..eb1df5a
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_DISTINCT_APR_28_2009_0110PM)
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_DISTINCT_APR_28_2009_0110PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+
+namespace boost { namespace spirit { namespace repository
+{
+    // The distinct extended terminal
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX(( distinct, distinct_type ))
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/flush_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/flush_multi_pass.hpp
new file mode 100644 (file)
index 0000000..94ef356
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Hartmut Kaiser
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_FLUSH_MULTI_PASS_JUL_11_2009_0823PM)
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_FLUSH_MULTI_PASS_JUL_11_2009_0823PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+
+namespace boost { namespace spirit { namespace repository
+{
+    // The flush_multi_pass extended terminal
+    BOOST_SPIRIT_TERMINAL( flush_multi_pass )
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/kwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/kwd.hpp
new file mode 100644 (file)
index 0000000..e723cec
--- /dev/null
@@ -0,0 +1,22 @@
+//  Copyright (c) 2001-2011 Thomas Bernard
+// 
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying 
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_KWD_OCT_20_2010_0110PM)
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_KWD_OCT_20_2010_0110PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/terminal.hpp>
+
+namespace boost { namespace spirit { namespace repository
+{
+    // The distinct extended terminal
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME_EX(( kwd, kwd_type )( ikwd, ikwd_type )(dkwd, dkwd_type)(idkwd, idkwd_type) )
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/seek.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/seek.hpp
new file mode 100644 (file)
index 0000000..bb9e04e
--- /dev/null
@@ -0,0 +1,25 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2011 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_REPOSITORY_SUPPORT_SEEK
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_SEEK
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+
+#include <boost/spirit/home/support/terminal.hpp>
+
+
+namespace boost { namespace spirit { namespace repository
+{
+    // The seek terminal
+    BOOST_SPIRIT_DEFINE_TERMINALS_NAME(( seek, seek_type ))
+
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/subrule_context.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/home/support/subrule_context.hpp
new file mode 100644 (file)
index 0000000..e83d8b6
--- /dev/null
@@ -0,0 +1,57 @@
+/*=============================================================================
+    Copyright (c) 2009 Francois Barel
+    Copyright (c) 2001-2010 Joel de Guzman
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_SUBRULE_CONTEXT_AUGUST_12_2009_0539PM)
+#define BOOST_SPIRIT_REPOSITORY_SUPPORT_SUBRULE_CONTEXT_AUGUST_12_2009_0539PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/context.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace repository
+{
+    ///////////////////////////////////////////////////////////////////////////
+    // subrule_context: special context used with subrules, to pass around
+    // the current set of subrule definitions (subrule_group)
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Group, typename Attributes, typename Locals>
+    struct subrule_context
+      : context<Attributes, Locals>
+    {
+        typedef context<Attributes, Locals> base_type;
+        typedef Group group_type;
+
+        subrule_context(
+            Group const& group
+          , typename Attributes::car_type attribute
+        ) : base_type(attribute), group(group)
+        {
+        }
+
+        template <typename Args, typename Context>
+        subrule_context(
+            Group const& group
+          , typename Attributes::car_type attribute
+          , Args const& args
+          , Context& caller_context
+        ) : base_type(attribute, args, caller_context), group(group)
+        {
+        }
+
+        subrule_context(Group const& group, Attributes const& attributes)
+          : base_type(attributes), group(group)
+        {
+        }
+
+        Group const& group;
+    };
+}}}
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma.hpp
new file mode 100644 (file)
index 0000000..29b626f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_REPOSITORY
+#define BOOST_SPIRIT_INCLUDE_KARMA_REPOSITORY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_confix.hpp
new file mode 100644 (file)
index 0000000..1f4b577
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_KARMA_REPOSITORY_CONFIX
+#define BOOST_SPIRIT_INCLUDE_KARMA_REPOSITORY_CONFIX
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/directive/confix.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_directive.hpp
new file mode 100644 (file)
index 0000000..f77f18a
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_REPOSITORY_KARMA_DIRECTIVE
+#define BOOST_SPIRIT_INCLUDE_REPOSITORY_KARMA_DIRECTIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/directive.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_nonterminal.hpp
new file mode 100644 (file)
index 0000000..778dd57
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REPOSITORY_INCLUDE_KARMA_NONTERMINAL
+#define BOOST_SPIRIT_REPOSITORY_INCLUDE_KARMA_NONTERMINAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/nonterminal.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/karma_subrule.hpp
new file mode 100644 (file)
index 0000000..54ef3aa
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REPOSITORY_INCLUDE_KARMA_SUBRULE
+#define BOOST_SPIRIT_REPOSITORY_INCLUDE_KARMA_SUBRULE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/karma/nonterminal/subrule.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi.hpp
new file mode 100644 (file)
index 0000000..be2fa32
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_advance.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_advance.hpp
new file mode 100644 (file)
index 0000000..fafd8c0
--- /dev/null
@@ -0,0 +1,17 @@
+/*=============================================================================
+    Copyright (c) 2011 Aaron Graham
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_ADVANCE
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_ADVANCE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive/advance.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_confix.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_confix.hpp
new file mode 100644 (file)
index 0000000..d71d4e2
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_CONFIX
+#define BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_CONFIX
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/confix.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_directive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_directive.hpp
new file mode 100644 (file)
index 0000000..fcc0816
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_REPOSITORY_QI_DIRECTIVE
+#define BOOST_SPIRIT_INCLUDE_REPOSITORY_QI_DIRECTIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_distinct.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_distinct.hpp
new file mode 100644 (file)
index 0000000..57add2f
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_DISTINCT
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_DISTINCT
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/distinct.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_flush_multi_pass.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_flush_multi_pass.hpp
new file mode 100644 (file)
index 0000000..c612dd0
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_FLUSH_MULTI_PASS
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_FLUSH_MULTI_PASS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_iter_pos.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_iter_pos.hpp
new file mode 100644 (file)
index 0000000..48fb8d3
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_ITER_POS
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_ITER_POS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive/iter_pos.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_keywords.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_keywords.hpp
new file mode 100644 (file)
index 0000000..a82cd1a
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011 Thomas Bernard
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_KEYWORDS
+#define BOOST_SPIRIT_INCLUDE_QI_KEYWORDS
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/operator/keywords.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_kwd.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_kwd.hpp
new file mode 100644 (file)
index 0000000..0efcecb
--- /dev/null
@@ -0,0 +1,38 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011 Thomas Bernard
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_KWD
+#define BOOST_SPIRIT_INCLUDE_QI_KWD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/kwd.hpp>
+
+#endif
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2011 Thomas Bernard
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_KWD
+#define BOOST_SPIRIT_INCLUDE_QI_KWD
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/kwd.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_nonterminal.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_nonterminal.hpp
new file mode 100644 (file)
index 0000000..a85ea9f
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2010 Joel de Guzman
+    Copyright (c) 2001-2010 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_NONTERMINAL
+#define BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_NONTERMINAL
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/nonterminal.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_primitive.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_primitive.hpp
new file mode 100644 (file)
index 0000000..88e3837
--- /dev/null
@@ -0,0 +1,18 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_INCLUDE_REPOSITORY_QI_PRIMITIVE
+#define BOOST_SPIRIT_INCLUDE_REPOSITORY_QI_PRIMITIVE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/primitive.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_seek.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_seek.hpp
new file mode 100644 (file)
index 0000000..638861a
--- /dev/null
@@ -0,0 +1,16 @@
+/*//////////////////////////////////////////////////////////////////////////////
+    Copyright (c) 2011 Jamboree
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////*/
+#ifndef BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_SEEK
+#define BOOST_SPIRIT_INCLUDE_QI_REPOSITORY_SEEK
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/directive/seek.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_subrule.hpp b/bundled/boost-1.56.0/include/boost/spirit/repository/include/qi_subrule.hpp
new file mode 100644 (file)
index 0000000..a146d69
--- /dev/null
@@ -0,0 +1,19 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Joel de Guzman
+    Copyright (c) 2001-2011 Hartmut Kaiser
+    Copyright (c) 2009 Francois Barel
+    http://spirit.sourceforge.net/
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_SUBRULE
+#define BOOST_SPIRIT_REPOSITORY_INCLUDE_QI_SUBRULE
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/repository/home/qi/nonterminal/subrule.hpp>
+
+#endif
diff --git a/bundled/boost-1.56.0/include/boost/spirit/version.hpp b/bundled/boost-1.56.0/include/boost/spirit/version.hpp
new file mode 100644 (file)
index 0000000..fdffdef
--- /dev/null
@@ -0,0 +1,14 @@
+/*=============================================================================
+  Copyright (c) 2001-2011 Joel de Guzman
+  Copyright (c) 2001-2011 Hartmut Kaiser
+  http://spirit.sourceforge.net/
+
+  Distributed under the Boost Software License, Version 1.0. (See accompanying
+  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(SPIRIT_VERSION_NOVEMBER_13_2008_0834AM)
+#define SPIRIT_VERSION_NOVEMBER_13_2008_0834AM
+
+#include <boost/spirit/include/version.hpp>
+
+#endif

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.