--- a/nashorn/make/project.properties Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/make/project.properties Tue Jun 18 13:25:24 2013 +0530
@@ -193,7 +193,8 @@
# list of test262 test dirs to be excluded
test262-test-sys-prop.test.js.exclude.dir=\
- ${test262.suite.dir}/intl402/
+ ${test262.suite.dir}/intl402/ \
+ ${test262.suite.dir}/bestPractice/
test262-test-sys-prop.test.failed.list.file=${build.dir}/test/failedTests
--- a/nashorn/samples/test.js Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/samples/test.js Tue Jun 18 13:25:24 2013 +0530
@@ -1,21 +1,21 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
+ *
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- *
+ *
* - Neither the name of Oracle nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@@ -30,3 +30,4 @@
*/
print("Hello World");
+
--- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Tue Jun 18 13:25:24 2013 +0530
@@ -72,7 +72,7 @@
private final ScriptObject global;
// default options passed to Nashorn Options object
- private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-af", "-doe" };
+ private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-doe" };
NashornScriptEngine(final NashornScriptEngineFactory factory, final ClassLoader appLoader) {
this(factory, DEFAULT_OPTIONS, appLoader);
--- a/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java Tue Jun 18 13:25:24 2013 +0530
@@ -342,6 +342,184 @@
});
}
+ // Support for ECMAScript Object API on mirrors
+
+ /**
+ * Return the __proto__ of this object.
+ * @return __proto__ object.
+ */
+ public Object getProto() {
+ return inGlobal(new Callable<Object>() {
+ @Override public Object call() {
+ return wrap(getScriptObject().getProto(), global);
+ }
+ });
+ }
+
+ /**
+ * ECMA 8.12.1 [[GetOwnProperty]] (P)
+ *
+ * @param key property key
+ *
+ * @return Returns the Property Descriptor of the named own property of this
+ * object, or undefined if absent.
+ */
+ public Object getOwnPropertyDescriptor(final String key) {
+ return inGlobal(new Callable<Object>() {
+ @Override public Object call() {
+ return wrap(getScriptObject().getOwnPropertyDescriptor(key), global);
+ }
+ });
+ }
+
+ /**
+ * return an array of own property keys associated with the object.
+ *
+ * @param all True if to include non-enumerable keys.
+ * @return Array of keys.
+ */
+ public String[] getOwnKeys(final boolean all) {
+ return inGlobal(new Callable<String[]>() {
+ @Override public String[] call() {
+ return getScriptObject().getOwnKeys(all);
+ }
+ });
+ }
+
+ /**
+ * Flag this script object as non extensible
+ *
+ * @return the object after being made non extensible
+ */
+ public ScriptObjectMirror preventExtensions() {
+ return inGlobal(new Callable<ScriptObjectMirror>() {
+ @Override public ScriptObjectMirror call() {
+ getScriptObject().preventExtensions();
+ return ScriptObjectMirror.this;
+ }
+ });
+ }
+
+ /**
+ * Check if this script object is extensible
+ * @return true if extensible
+ */
+ public boolean isExtensible() {
+ return inGlobal(new Callable<Boolean>() {
+ @Override public Boolean call() {
+ return getScriptObject().isExtensible();
+ }
+ });
+ }
+
+ /**
+ * ECMAScript 15.2.3.8 - seal implementation
+ * @return the sealed script object
+ */
+ public ScriptObjectMirror seal() {
+ return inGlobal(new Callable<ScriptObjectMirror>() {
+ @Override public ScriptObjectMirror call() {
+ getScriptObject().seal();
+ return ScriptObjectMirror.this;
+ }
+ });
+ }
+
+ /**
+ * Check whether this script object is sealed
+ * @return true if sealed
+ */
+ public boolean isSealed() {
+ return inGlobal(new Callable<Boolean>() {
+ @Override public Boolean call() {
+ return getScriptObject().isSealed();
+ }
+ });
+ }
+
+ /**
+ * ECMA 15.2.39 - freeze implementation. Freeze this script object
+ * @return the frozen script object
+ */
+ public ScriptObjectMirror freeze() {
+ return inGlobal(new Callable<ScriptObjectMirror>() {
+ @Override public ScriptObjectMirror call() {
+ getScriptObject().freeze();
+ return ScriptObjectMirror.this;
+ }
+ });
+ }
+
+ /**
+ * Check whether this script object is frozen
+ * @return true if frozen
+ */
+ public boolean isFrozen() {
+ return inGlobal(new Callable<Boolean>() {
+ @Override public Boolean call() {
+ return getScriptObject().isFrozen();
+ }
+ });
+ }
+
+ // ECMAScript instanceof check
+
+ /**
+ * Checking whether a script object is an instance of another by
+ * walking the proto chain
+ *
+ * @param instance instace to check
+ * @return true if 'instance' is an instance of this object
+ */
+ public boolean isInstance(final ScriptObjectMirror instance) {
+ // if not belongs to my global scope, return false
+ if (instance == null || global != instance.global) {
+ return false;
+ }
+
+ return inGlobal(new Callable<Boolean>() {
+ @Override public Boolean call() {
+ return getScriptObject().isInstance(instance.getScriptObject());
+ }
+ });
+ }
+
+ /**
+ * Utility to check if given object is ECMAScript undefined value
+ *
+ * @param obj object to check
+ * @return true if 'obj' is ECMAScript undefined value
+ */
+ public static boolean isUndefined(final Object obj) {
+ return obj == ScriptRuntime.UNDEFINED;
+ }
+
+ /**
+ * is this a function object?
+ *
+ * @return if this mirror wraps a ECMAScript function instance
+ */
+ public boolean isFunction() {
+ return getScriptObject() instanceof ScriptFunction;
+ }
+
+ /**
+ * is this a 'use strict' function object?
+ *
+ * @return true if this mirror represents a ECMAScript 'use strict' function
+ */
+ public boolean isStrictFunction() {
+ return isFunction() && ((ScriptFunction)getScriptObject()).isStrict();
+ }
+
+ /**
+ * is this an array object?
+ *
+ * @return if this mirror wraps a ECMAScript array object
+ */
+ public boolean isArray() {
+ return getScriptObject().isArray();
+ }
// These are public only so that Context can access these.
--- a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Tue Jun 18 13:25:24 2013 +0530
@@ -35,6 +35,7 @@
import static jdk.nashorn.internal.codegen.CompilerConstants.SWITCH_TAG_PREFIX;
import static jdk.nashorn.internal.codegen.CompilerConstants.THIS;
import static jdk.nashorn.internal.codegen.CompilerConstants.VARARGS;
+import static jdk.nashorn.internal.ir.Symbol.IS_ALWAYS_DEFINED;
import static jdk.nashorn.internal.ir.Symbol.IS_CONSTANT;
import static jdk.nashorn.internal.ir.Symbol.IS_FUNCTION_SELF;
import static jdk.nashorn.internal.ir.Symbol.IS_GLOBAL;
@@ -128,6 +129,8 @@
private final Deque<Type> returnTypes;
+ private int catchNestingLevel;
+
private static final DebugLogger LOG = new DebugLogger("attr");
private static final boolean DEBUG = LOG.isEnabled();
@@ -169,14 +172,14 @@
if (functionNode.isVarArg()) {
initCompileConstant(VARARGS, body, IS_PARAM | IS_INTERNAL, Type.OBJECT_ARRAY);
if (functionNode.needsArguments()) {
- initCompileConstant(ARGUMENTS, body, IS_VAR | IS_INTERNAL, Type.typeFor(ScriptObject.class));
+ initCompileConstant(ARGUMENTS, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.typeFor(ScriptObject.class));
addLocalDef(ARGUMENTS.symbolName());
}
}
initParameters(functionNode, body);
- initCompileConstant(SCOPE, body, IS_VAR | IS_INTERNAL, Type.typeFor(ScriptObject.class));
- initCompileConstant(RETURN, body, IS_VAR | IS_INTERNAL, Type.OBJECT);
+ initCompileConstant(SCOPE, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.typeFor(ScriptObject.class));
+ initCompileConstant(RETURN, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.OBJECT);
}
@@ -320,10 +323,12 @@
final Block block = lc.getCurrentBlock();
start(catchNode);
+ catchNestingLevel++;
// define block-local exception variable
- final Symbol def = defineSymbol(block, exception.getName(), IS_VAR | IS_LET);
- newType(def, Type.OBJECT);
+ final Symbol def = defineSymbol(block, exception.getName(), IS_VAR | IS_LET | IS_ALWAYS_DEFINED);
+ newType(def, Type.OBJECT); //we can catch anything, not just ecma exceptions
+
addLocalDef(exception.getName());
return true;
@@ -334,6 +339,9 @@
final IdentNode exception = catchNode.getException();
final Block block = lc.getCurrentBlock();
final Symbol symbol = findSymbol(block, exception.getName());
+
+ catchNestingLevel--;
+
assert symbol != null;
return end(catchNode.setException((IdentNode)exception.setSymbol(lc, symbol)));
}
@@ -543,9 +551,19 @@
assert lc.getFunctionBody(functionNode).getExistingSymbol(CALLEE.symbolName()) != null;
lc.setFlag(functionNode.getBody(), Block.NEEDS_SELF_SYMBOL);
newType(symbol, FunctionNode.FUNCTION_TYPE);
- } else if (!identNode.isInitializedHere()) { // NASHORN-448
- // here is a use outside the local def scope
- if (!isLocalDef(name)) {
+ } else if (!identNode.isInitializedHere()) {
+ /*
+ * See NASHORN-448, JDK-8016235
+ *
+ * Here is a use outside the local def scope
+ * the inCatch check is a conservative approach to handle things that might have only been
+ * defined in the try block, but with variable declarations, which due to JavaScript rules
+ * have to be lifted up into the function scope outside the try block anyway, but as the
+ * flow can fault at almost any place in the try block and get us to the catch block, all we
+ * know is that we have a declaration, not a definition. This can be made better and less
+ * conservative once we superimpose a CFG onto the AST.
+ */
+ if (!isLocalDef(name) || inCatch()) {
newType(symbol, Type.OBJECT);
symbol.setCanBeUndefined();
}
@@ -572,6 +590,10 @@
return end(identNode.setSymbol(lc, symbol));
}
+ private boolean inCatch() {
+ return catchNestingLevel > 0;
+ }
+
/**
* If the symbol isn't already a scope symbol, and it is either not local to the current function, or it is being
* referenced from within a with block, we force it to be a scope symbol.
@@ -584,26 +606,26 @@
}
private boolean symbolNeedsToBeScope(Symbol symbol) {
- if(symbol.isThis() || symbol.isInternal()) {
+ if (symbol.isThis() || symbol.isInternal()) {
return false;
}
boolean previousWasBlock = false;
- for(final Iterator<LexicalContextNode> it = lc.getAllNodes(); it.hasNext();) {
+ for (final Iterator<LexicalContextNode> it = lc.getAllNodes(); it.hasNext();) {
final LexicalContextNode node = it.next();
- if(node instanceof FunctionNode) {
+ if (node instanceof FunctionNode) {
// We reached the function boundary without seeing a definition for the symbol - it needs to be in
// scope.
return true;
- } else if(node instanceof WithNode) {
- if(previousWasBlock) {
+ } else if (node instanceof WithNode) {
+ if (previousWasBlock) {
// We reached a WithNode; the symbol must be scoped. Note that if the WithNode was not immediately
// preceded by a block, this means we're currently processing its expression, not its body,
// therefore it doesn't count.
return true;
}
previousWasBlock = false;
- } else if(node instanceof Block) {
- if(((Block)node).getExistingSymbol(symbol.getName()) == symbol) {
+ } else if (node instanceof Block) {
+ if (((Block)node).getExistingSymbol(symbol.getName()) == symbol) {
// We reached the block that defines the symbol without reaching either the function boundary, or a
// WithNode. The symbol need not be scoped.
return false;
@@ -1700,8 +1722,8 @@
}
private void pushLocalsBlock() {
- localDefs.push(localDefs.isEmpty() ? new HashSet<String>() : new HashSet<>(localDefs.peek()));
- localUses.push(localUses.isEmpty() ? new HashSet<String>() : new HashSet<>(localUses.peek()));
+ localDefs.push(new HashSet<>(localDefs.peek()));
+ localUses.push(new HashSet<>(localUses.peek()));
}
private void popLocals() {
--- a/nashorn/src/jdk/nashorn/internal/ir/BreakableNode.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/ir/BreakableNode.java Tue Jun 18 13:25:24 2013 +0530
@@ -86,7 +86,7 @@
/**
* Return the labels associated with this node. Breakable nodes that
- * aren't LoopNodes only have a break label -> the location immediately
+ * aren't LoopNodes only have a break label - the location immediately
* afterwards the node in code
* @return list of labels representing locations around this node
*/
--- a/nashorn/src/jdk/nashorn/internal/ir/Symbol.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/ir/Symbol.java Tue Jun 18 13:25:24 2013 +0530
@@ -55,23 +55,25 @@
public static final int KINDMASK = (1 << 3) - 1; // Kinds are represented by lower three bits
/** Is this scope */
- public static final int IS_SCOPE = 1 << 4;
+ public static final int IS_SCOPE = 1 << 4;
/** Is this a this symbol */
- public static final int IS_THIS = 1 << 5;
+ public static final int IS_THIS = 1 << 5;
/** Can this symbol ever be undefined */
- public static final int CAN_BE_UNDEFINED = 1 << 6;
+ public static final int CAN_BE_UNDEFINED = 1 << 6;
+ /** Is this symbol always defined? */
+ public static final int IS_ALWAYS_DEFINED = 1 << 8;
/** Can this symbol ever have primitive types */
- public static final int CAN_BE_PRIMITIVE = 1 << 7;
+ public static final int CAN_BE_PRIMITIVE = 1 << 9;
/** Is this a let */
- public static final int IS_LET = 1 << 8;
+ public static final int IS_LET = 1 << 10;
/** Is this an internal symbol, never represented explicitly in source code */
- public static final int IS_INTERNAL = 1 << 9;
+ public static final int IS_INTERNAL = 1 << 11;
/** Is this a function self-reference symbol */
- public static final int IS_FUNCTION_SELF = 1 << 10;
+ public static final int IS_FUNCTION_SELF = 1 << 12;
/** Is this a specialized param? */
- public static final int IS_SPECIALIZED_PARAM = 1 << 11;
+ public static final int IS_SPECIALIZED_PARAM = 1 << 13;
/** Is this symbol a shared temporary? */
- public static final int IS_SHARED = 1 << 12;
+ public static final int IS_SHARED = 1 << 14;
/** Null or name identifying symbol. */
private final String name;
@@ -384,7 +386,7 @@
* Mark this symbol as one being shared by multiple expressions. The symbol must be a temporary.
*/
public void setIsShared() {
- if(!isShared()) {
+ if (!isShared()) {
assert isTemp();
trace("SET IS SHARED");
flags |= IS_SHARED;
@@ -417,6 +419,14 @@
}
/**
+ * Check if this symbol is always defined, which overrides all canBeUndefined tags
+ * @return true if always defined
+ */
+ public boolean isAlwaysDefined() {
+ return isParam() || (flags & IS_ALWAYS_DEFINED) == IS_ALWAYS_DEFINED;
+ }
+
+ /**
* Get the range for this symbol
* @return range for symbol
*/
@@ -462,7 +472,9 @@
*/
public void setCanBeUndefined() {
assert type.isObject() : type;
- if (!isParam() && !canBeUndefined()) {//parameters are never undefined
+ if (isAlwaysDefined()) {
+ return;
+ } else if (!canBeUndefined()) {
assert !isShared();
flags |= CAN_BE_UNDEFINED;
}
--- a/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530
@@ -138,18 +138,16 @@
@Override
public PropertyDescriptor fillFrom(final ScriptObject sobj) {
- final boolean strict = isStrictContext();
-
if (sobj.has(CONFIGURABLE)) {
this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE));
} else {
- delete(CONFIGURABLE, strict);
+ delete(CONFIGURABLE, false);
}
if (sobj.has(ENUMERABLE)) {
this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE));
} else {
- delete(ENUMERABLE, strict);
+ delete(ENUMERABLE, false);
}
if (sobj.has(GET)) {
@@ -160,7 +158,7 @@
throw typeError("not.a.function", ScriptRuntime.safeToString(getter));
}
} else {
- delete(GET, strict);
+ delete(GET, false);
}
if (sobj.has(SET)) {
@@ -171,7 +169,7 @@
throw typeError("not.a.function", ScriptRuntime.safeToString(setter));
}
} else {
- delete(SET, strict);
+ delete(SET, false);
}
return this;
--- a/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530
@@ -136,29 +136,28 @@
@Override
public PropertyDescriptor fillFrom(final ScriptObject sobj) {
- final boolean strict = isStrictContext();
if (sobj.has(CONFIGURABLE)) {
this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE));
} else {
- delete(CONFIGURABLE, strict);
+ delete(CONFIGURABLE, false);
}
if (sobj.has(ENUMERABLE)) {
this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE));
} else {
- delete(ENUMERABLE, strict);
+ delete(ENUMERABLE, false);
}
if (sobj.has(WRITABLE)) {
this.writable = JSType.toBoolean(sobj.get(WRITABLE));
} else {
- delete(WRITABLE, strict);
+ delete(WRITABLE, false);
}
if (sobj.has(VALUE)) {
this.value = sobj.get(VALUE);
} else {
- delete(VALUE, strict);
+ delete(VALUE, false);
}
return this;
--- a/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530
@@ -124,17 +124,16 @@
@Override
public PropertyDescriptor fillFrom(final ScriptObject sobj) {
- final boolean strict = isStrictContext();
if (sobj.has(CONFIGURABLE)) {
this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE));
} else {
- delete(CONFIGURABLE, strict);
+ delete(CONFIGURABLE, false);
}
if (sobj.has(ENUMERABLE)) {
this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE));
} else {
- delete(ENUMERABLE, strict);
+ delete(ENUMERABLE, false);
}
return this;
--- a/nashorn/src/jdk/nashorn/internal/objects/Global.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java Tue Jun 18 13:25:24 2013 +0530
@@ -37,6 +37,7 @@
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -372,7 +373,7 @@
private static final MethodHandle PRINT = findOwnMH("print", Object.class, Object.class, Object[].class);
private static final MethodHandle PRINTLN = findOwnMH("println", Object.class, Object.class, Object[].class);
private static final MethodHandle LOAD = findOwnMH("load", Object.class, Object.class, Object.class);
- private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object.class, Object[].class);
+ private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object[].class);
private static final MethodHandle EXIT = findOwnMH("exit", Object.class, Object.class, Object.class);
private final Context context;
@@ -429,15 +430,6 @@
return instance().context;
}
- /**
- * Script access check for strict mode
- *
- * @return true if strict mode enabled in {@link Global#getThisContext()}
- */
- static boolean isStrict() {
- return getEnv()._strict;
- }
-
// GlobalObject interface implementation
@Override
@@ -615,14 +607,12 @@
public PropertyDescriptor newAccessorDescriptor(final Object get, final Object set, final boolean configurable, final boolean enumerable) {
final AccessorPropertyDescriptor desc = new AccessorPropertyDescriptor(configurable, enumerable, get == null ? UNDEFINED : get, set == null ? UNDEFINED : set);
- final boolean strict = context.getEnv()._strict;
-
if (get == null) {
- desc.delete(PropertyDescriptor.GET, strict);
+ desc.delete(PropertyDescriptor.GET, false);
}
if (set == null) {
- desc.delete(PropertyDescriptor.SET, strict);
+ desc.delete(PropertyDescriptor.SET, false);
}
return desc;
@@ -750,17 +740,21 @@
/**
* Global loadWithNewGlobal implementation - Nashorn extension
*
- * @param self scope
- * @param source source to load
- * @param args (optional) arguments to be passed to the loaded script
+ * @param self scope
+ * @param args from plus (optional) arguments to be passed to the loaded script
*
- * @return result of load (undefined)
+ * @return result of load (may be undefined)
*
* @throws IOException if source could not be read
*/
- public static Object loadWithNewGlobal(final Object self, final Object source, final Object...args) throws IOException {
+ public static Object loadWithNewGlobal(final Object self, final Object...args) throws IOException {
final Global global = Global.instance();
- return global.context.loadWithNewGlobal(source, args);
+ final int length = args.length;
+ final boolean hasArgs = 0 < length;
+ final Object from = hasArgs ? args[0] : UNDEFINED;
+ final Object[] arguments = hasArgs ? Arrays.copyOfRange(args, 1, length) : args;
+
+ return global.context.loadWithNewGlobal(from, arguments);
}
/**
@@ -1480,7 +1474,6 @@
// Error objects
this.builtinError = (ScriptFunction)initConstructor("Error");
final ScriptObject errorProto = getErrorPrototype();
- final boolean strict = Global.isStrict();
// Nashorn specific accessors on Error.prototype - stack, lineNumber, columnNumber and fileName
final ScriptFunction getStack = ScriptFunctionImpl.makeFunction("getStack", NativeError.GET_STACK);
@@ -1498,10 +1491,10 @@
// ECMA 15.11.4.2 Error.prototype.name
// Error.prototype.name = "Error";
- errorProto.set(NativeError.NAME, "Error", strict);
+ errorProto.set(NativeError.NAME, "Error", false);
// ECMA 15.11.4.3 Error.prototype.message
// Error.prototype.message = "";
- errorProto.set(NativeError.MESSAGE, "", strict);
+ errorProto.set(NativeError.MESSAGE, "", false);
this.builtinEvalError = initErrorSubtype("EvalError", errorProto);
this.builtinRangeError = initErrorSubtype("RangeError", errorProto);
@@ -1514,9 +1507,8 @@
private ScriptFunction initErrorSubtype(final String name, final ScriptObject errorProto) {
final ScriptObject cons = initConstructor(name);
final ScriptObject prototype = ScriptFunction.getPrototype(cons);
- final boolean strict = Global.isStrict();
- prototype.set(NativeError.NAME, name, strict);
- prototype.set(NativeError.MESSAGE, "", strict);
+ prototype.set(NativeError.NAME, name, false);
+ prototype.set(NativeError.MESSAGE, "", false);
prototype.setProto(errorProto);
return (ScriptFunction)cons;
}
@@ -1725,7 +1717,7 @@
// <anon-function>
builtinFunction.setProto(anon);
builtinFunction.setPrototype(anon);
- anon.set("constructor", builtinFunction, anon.isStrict());
+ anon.set("constructor", builtinFunction, false);
anon.deleteOwnProperty(anon.getMap().findProperty("prototype"));
// now initialize Object
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java Tue Jun 18 13:25:24 2013 +0530
@@ -39,6 +39,7 @@
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
import jdk.nashorn.internal.objects.annotations.Attribute;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Function;
@@ -118,7 +119,7 @@
if (value == ScriptRuntime.EMPTY) {
arrayData = arrayData.delete(index);
} else {
- arrayData = arrayData.set(index, value, isStrictContext());
+ arrayData = arrayData.set(index, value, false);
}
}
@@ -158,6 +159,11 @@
// Step 3
if ("length".equals(key)) {
+ // check for length being made non-writable
+ if (desc.has(WRITABLE) && !desc.isWritable()) {
+ setIsLengthNotWritable();
+ }
+
// Step 3a
if (!desc.has(VALUE)) {
return super.defineOwnProperty("length", desc, reject);
@@ -286,7 +292,8 @@
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object isArray(final Object self, final Object arg) {
return isArray(arg) || (arg == Global.instance().getArrayPrototype())
- || (arg instanceof NativeRegExpExecResult);
+ || (arg instanceof NativeRegExpExecResult)
+ || (arg instanceof ScriptObjectMirror && ((ScriptObjectMirror)arg).isArray());
}
/**
@@ -603,7 +610,6 @@
public static Object pop(final Object self) {
try {
final ScriptObject sobj = (ScriptObject)self;
- final boolean strict = sobj.isStrictContext();
if (bulkable(sobj)) {
return sobj.getArray().pop();
@@ -612,15 +618,15 @@
final long len = JSType.toUint32(sobj.getLength());
if (len == 0) {
- sobj.set("length", 0, strict);
+ sobj.set("length", 0, true);
return ScriptRuntime.UNDEFINED;
}
final long index = len - 1;
final Object element = sobj.get(index);
- sobj.delete(index, strict);
- sobj.set("length", index, strict);
+ sobj.delete(index, true);
+ sobj.set("length", index, true);
return element;
} catch (final ClassCastException | NullPointerException e) {
@@ -639,11 +645,10 @@
public static Object push(final Object self, final Object... args) {
try {
final ScriptObject sobj = (ScriptObject)self;
- final boolean strict = sobj.isStrictContext();
if (bulkable(sobj)) {
if (sobj.getArray().length() + args.length <= JSType.MAX_UINT) {
- final ArrayData newData = sobj.getArray().push(sobj.isStrictContext(), args);
+ final ArrayData newData = sobj.getArray().push(true, args);
sobj.setArray(newData);
return newData.length();
}
@@ -652,9 +657,9 @@
long len = JSType.toUint32(sobj.getLength());
for (final Object element : args) {
- sobj.set(len++, element, strict);
+ sobj.set(len++, element, true);
}
- sobj.set("length", len, strict);
+ sobj.set("length", len, true);
return len;
} catch (final ClassCastException | NullPointerException e) {
@@ -672,7 +677,6 @@
public static Object reverse(final Object self) {
try {
final ScriptObject sobj = (ScriptObject)self;
- final boolean strict = sobj.isStrictContext();
final long len = JSType.toUint32(sobj.getLength());
final long middle = len / 2;
@@ -684,14 +688,14 @@
final boolean upperExists = sobj.has(upper);
if (lowerExists && upperExists) {
- sobj.set(lower, upperValue, strict);
- sobj.set(upper, lowerValue, strict);
+ sobj.set(lower, upperValue, true);
+ sobj.set(upper, lowerValue, true);
} else if (!lowerExists && upperExists) {
- sobj.set(lower, upperValue, strict);
- sobj.delete(upper, strict);
+ sobj.set(lower, upperValue, true);
+ sobj.delete(upper, true);
} else if (lowerExists && !upperExists) {
- sobj.delete(lower, strict);
- sobj.set(upper, lowerValue, strict);
+ sobj.delete(lower, true);
+ sobj.set(upper, lowerValue, true);
}
}
return sobj;
@@ -717,7 +721,6 @@
}
final ScriptObject sobj = (ScriptObject) obj;
- final boolean strict = Global.isStrict();
long len = JSType.toUint32(sobj.getLength());
@@ -728,15 +731,15 @@
sobj.getArray().shiftLeft(1);
} else {
for (long k = 1; k < len; k++) {
- sobj.set(k - 1, sobj.get(k), strict);
+ sobj.set(k - 1, sobj.get(k), true);
}
}
- sobj.delete(--len, strict);
+ sobj.delete(--len, true);
} else {
len = 0;
}
- sobj.set("length", len, strict);
+ sobj.set("length", len, true);
return first;
}
@@ -833,7 +836,6 @@
public static Object sort(final Object self, final Object comparefn) {
try {
final ScriptObject sobj = (ScriptObject) self;
- final boolean strict = sobj.isStrictContext();
final long len = JSType.toUint32(sobj.getLength());
ArrayData array = sobj.getArray();
@@ -850,7 +852,7 @@
final Object[] sorted = sort(src.toArray(), comparefn);
for (int i = 0; i < sorted.length; i++) {
- array = array.set(i, sorted[i], strict);
+ array = array.set(i, sorted[i], true);
}
// delete missing elements - which are at the end of sorted array
@@ -891,7 +893,6 @@
}
final ScriptObject sobj = (ScriptObject)obj;
- final boolean strict = Global.isStrict();
final long len = JSType.toUint32(sobj.getLength());
final long relativeStart = JSType.toLong(start);
@@ -914,14 +915,14 @@
final long to = k + items.length;
if (sobj.has(from)) {
- sobj.set(to, sobj.get(from), strict);
+ sobj.set(to, sobj.get(from), true);
} else {
- sobj.delete(to, strict);
+ sobj.delete(to, true);
}
}
for (long k = len; k > (len - actualDeleteCount + items.length); k--) {
- sobj.delete(k - 1, strict);
+ sobj.delete(k - 1, true);
}
} else if (items.length > actualDeleteCount) {
for (long k = len - actualDeleteCount; k > actualStart; k--) {
@@ -930,20 +931,20 @@
if (sobj.has(from)) {
final Object fromValue = sobj.get(from);
- sobj.set(to, fromValue, strict);
+ sobj.set(to, fromValue, true);
} else {
- sobj.delete(to, strict);
+ sobj.delete(to, true);
}
}
}
long k = actualStart;
for (int i = 0; i < items.length; i++, k++) {
- sobj.set(k, items[i], strict);
+ sobj.set(k, items[i], true);
}
final long newLength = len - actualDeleteCount + items.length;
- sobj.set("length", newLength, strict);
+ sobj.set("length", newLength, true);
return array;
}
@@ -964,7 +965,6 @@
}
final ScriptObject sobj = (ScriptObject)obj;
- final boolean strict = Global.isStrict();
final long len = JSType.toUint32(sobj.getLength());
if (items == null) {
@@ -975,7 +975,7 @@
sobj.getArray().shiftRight(items.length);
for (int j = 0; j < items.length; j++) {
- sobj.setArray(sobj.getArray().set(j, items[j], sobj.isStrictContext()));
+ sobj.setArray(sobj.getArray().set(j, items[j], true));
}
} else {
for (long k = len; k > 0; k--) {
@@ -984,19 +984,19 @@
if (sobj.has(from)) {
final Object fromValue = sobj.get(from);
- sobj.set(to, fromValue, strict);
+ sobj.set(to, fromValue, true);
} else {
- sobj.delete(to, strict);
+ sobj.delete(to, true);
}
}
for (int j = 0; j < items.length; j++) {
- sobj.set(j, items[j], strict);
+ sobj.set(j, items[j], true);
}
}
final long newLength = len + items.length;
- sobj.set("length", newLength, strict);
+ sobj.set("length", newLength, true);
return newLength;
}
@@ -1239,7 +1239,7 @@
* @return true if optimizable
*/
private static boolean bulkable(final ScriptObject self) {
- return self.isArray() && !hasInheritedArrayEntries(self);
+ return self.isArray() && !hasInheritedArrayEntries(self) && !self.isLengthNotWritable();
}
private static boolean hasInheritedArrayEntries(final ScriptObject self) {
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeError.java Tue Jun 18 13:25:24 2013 +0530
@@ -90,7 +90,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
@@ -166,7 +166,7 @@
public static Object setLineNumber(final Object self, final Object value) {
Global.checkObject(self);
final ScriptObject sobj = (ScriptObject)self;
- sobj.set(LINENUMBER, value, Global.isStrict());
+ sobj.set(LINENUMBER, value, false);
return value;
}
@@ -194,7 +194,7 @@
public static Object setColumnNumber(final Object self, final Object value) {
Global.checkObject(self);
final ScriptObject sobj = (ScriptObject)self;
- sobj.set(COLUMNNUMBER, value, Global.isStrict());
+ sobj.set(COLUMNNUMBER, value, false);
return value;
}
@@ -222,7 +222,7 @@
public static Object setFileName(final Object self, final Object value) {
Global.checkObject(self);
final ScriptObject sobj = (ScriptObject)self;
- sobj.set(FILENAME, value, Global.isStrict());
+ sobj.set(FILENAME, value, false);
return value;
}
@@ -278,7 +278,7 @@
public static Object setStack(final Object self, final Object value) {
Global.checkObject(self);
final ScriptObject sobj = (ScriptObject)self;
- sobj.set(STACK, value, Global.isStrict());
+ sobj.set(STACK, value, false);
return value;
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeFunction.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeFunction.java Tue Jun 18 13:25:24 2013 +0530
@@ -29,6 +29,7 @@
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
import java.util.List;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
import jdk.nashorn.internal.objects.annotations.Attribute;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Function;
@@ -102,6 +103,16 @@
list.toArray(args = new Object[list.size()]);
} else if (array == null || array == UNDEFINED) {
args = ScriptRuntime.EMPTY_ARRAY;
+ } else if (array instanceof ScriptObjectMirror) {
+ // look for array-like ScriptObjectMirror object
+ final ScriptObjectMirror mirror = (ScriptObjectMirror)array;
+ final Object len = mirror.containsKey("length")? mirror.getMember("length") : Integer.valueOf(0);
+ final int n = (int)JSType.toUint32(len);
+
+ args = new Object[n];
+ for (int i = 0; i < args.length; i++) {
+ args[i] = mirror.containsKey(i)? mirror.getSlot(i) : UNDEFINED;
+ }
} else {
throw typeError("function.apply.expects.array");
}
@@ -216,7 +227,7 @@
final Global global = Global.instance();
- return Global.directEval(global, sb.toString(), global, "<function>", Global.isStrict());
+ return Global.directEval(global, sb.toString(), global, "<function>", global.isStrictContext());
}
private static void checkFunctionParameters(final String params) {
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Tue Jun 18 13:25:24 2013 +0530
@@ -158,7 +158,7 @@
state.gap = gap;
final ScriptObject wrapper = Global.newEmptyInstance();
- wrapper.set("", value, Global.isStrict());
+ wrapper.set("", value, false);
return str("", wrapper, state);
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java Tue Jun 18 13:25:24 2013 +0530
@@ -121,7 +121,7 @@
final String name = desc.getNameToken(CallSiteDescriptor.NAME_OPERAND);
final Object value = createProperty(name);
if(value != null) {
- set(name, value, isStrictContext());
+ set(name, value, false);
return true;
}
return false;
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java Tue Jun 18 13:25:24 2013 +0530
@@ -28,11 +28,13 @@
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
import jdk.nashorn.internal.objects.annotations.Attribute;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Function;
import jdk.nashorn.internal.objects.annotations.ScriptClass;
import jdk.nashorn.internal.objects.annotations.Where;
+import jdk.nashorn.internal.runtime.ECMAException;
import jdk.nashorn.internal.runtime.JSType;
import jdk.nashorn.internal.runtime.ScriptFunction;
import jdk.nashorn.internal.runtime.ScriptObject;
@@ -54,6 +56,10 @@
private NativeObject() {
}
+ private static ECMAException notAnObject(final Object obj) {
+ return typeError("not.an.object", ScriptRuntime.safeToString(obj));
+ }
+
/**
* ECMA 15.2.3.2 Object.getPrototypeOf ( O )
*
@@ -63,9 +69,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object getPrototypeOf(final Object self, final Object obj) {
- Global.checkObject(obj);
-
- return ((ScriptObject)obj).getProto();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).getProto();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).getProto();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -78,12 +88,19 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object getOwnPropertyDescriptor(final Object self, final Object obj, final Object prop) {
- Global.checkObject(obj);
+ if (obj instanceof ScriptObject) {
+ final String key = JSType.toString(prop);
+ final ScriptObject sobj = (ScriptObject)obj;
- final String key = JSType.toString(prop);
- final ScriptObject sobj = (ScriptObject)obj;
+ return sobj.getOwnPropertyDescriptor(key);
+ } else if (obj instanceof ScriptObjectMirror) {
+ final String key = JSType.toString(prop);
+ final ScriptObjectMirror sobjMirror = (ScriptObjectMirror)obj;
- return sobj.getOwnPropertyDescriptor(key);
+ return sobjMirror.getOwnPropertyDescriptor(key);
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -95,9 +112,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object getOwnPropertyNames(final Object self, final Object obj) {
- Global.checkObject(obj);
-
- return new NativeArray(((ScriptObject)obj).getOwnKeys(true));
+ if (obj instanceof ScriptObject) {
+ return new NativeArray(((ScriptObject)obj).getOwnKeys(true));
+ } else if (obj instanceof ScriptObjectMirror) {
+ return new NativeArray(((ScriptObjectMirror)obj).getOwnKeys(true));
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -175,8 +196,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object seal(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).seal();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).seal();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).seal();
+ } else {
+ throw notAnObject(obj);
+ }
}
@@ -189,8 +215,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object freeze(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).freeze();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).freeze();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).freeze();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -202,8 +233,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object preventExtensions(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).preventExtensions();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).preventExtensions();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).preventExtensions();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -215,8 +251,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object isSealed(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).isSealed();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).isSealed();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).isSealed();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -228,8 +269,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object isFrozen(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).isFrozen();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).isFrozen();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).isFrozen();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -241,8 +287,13 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object isExtensible(final Object self, final Object obj) {
- Global.checkObject(obj);
- return ((ScriptObject)obj).isExtensible();
+ if (obj instanceof ScriptObject) {
+ return ((ScriptObject)obj).isExtensible();
+ } else if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)obj).isExtensible();
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
@@ -254,9 +305,15 @@
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public static Object keys(final Object self, final Object obj) {
- Global.checkObject(obj);
- final ScriptObject sobj = (ScriptObject)obj;
- return new NativeArray(sobj.getOwnKeys(false));
+ if (obj instanceof ScriptObject) {
+ final ScriptObject sobj = (ScriptObject)obj;
+ return new NativeArray(sobj.getOwnKeys(false));
+ } else if (obj instanceof ScriptObjectMirror) {
+ final ScriptObjectMirror sobjMirror = (ScriptObjectMirror)obj;
+ return new NativeArray(sobjMirror.getOwnKeys(false));
+ } else {
+ throw notAnObject(obj);
+ }
}
/**
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Tue Jun 18 13:25:24 2013 +0530
@@ -641,26 +641,19 @@
return string;
}
- /*
- * $$ -> $
- * $& -> the matched substring
- * $` -> the portion of string that preceeds matched substring
- * $' -> the portion of string that follows the matched substring
- * $n -> the nth capture, where n is [1-9] and $n is NOT followed by a decimal digit
- * $nn -> the nnth capture, where nn is a two digit decimal number [01-99].
- */
- String replace = replacement;
-
if (!regexp.isGlobal()) {
if (!matcher.search(0)) {
return string;
}
final StringBuilder sb = new StringBuilder();
+ sb.append(string, 0, matcher.start());
+
if (function != null) {
- replace = callReplaceValue(function, matcher, string);
+ sb.append(callReplaceValue(function, matcher, string));
+ } else {
+ appendReplacement(matcher, string, replacement, sb);
}
- appendReplacement(matcher, string, replace, sb, 0);
sb.append(string, matcher.end(), string.length());
return sb.toString();
}
@@ -676,12 +669,13 @@
final StringBuilder sb = new StringBuilder();
do {
+ sb.append(string, thisIndex, matcher.start());
if (function != null) {
- replace = callReplaceValue(function, matcher, string);
+ sb.append(callReplaceValue(function, matcher, string));
+ } else {
+ appendReplacement(matcher, string, replacement, sb);
}
- appendReplacement(matcher, string, replace, sb, thisIndex);
-
// ECMA 15.5.4.10 String.prototype.match(regexp)
thisIndex = matcher.end();
if (thisIndex == previousLastIndex) {
@@ -697,10 +691,19 @@
return sb.toString();
}
- private void appendReplacement(final RegExpMatcher matcher, final String text, final String replacement, final StringBuilder sb, final int lastAppendPosition) {
- // Process substitution string to replace group references with groups
+ private void appendReplacement(final RegExpMatcher matcher, final String text, final String replacement, final StringBuilder sb) {
+ /*
+ * Process substitution patterns:
+ *
+ * $$ -> $
+ * $& -> the matched substring
+ * $` -> the portion of string that preceeds matched substring
+ * $' -> the portion of string that follows the matched substring
+ * $n -> the nth capture, where n is [1-9] and $n is NOT followed by a decimal digit
+ * $nn -> the nnth capture, where nn is a two digit decimal number [01-99].
+ */
+
int cursor = 0;
- final StringBuilder result = new StringBuilder();
Object[] groups = null;
while (cursor < replacement.length()) {
@@ -732,37 +735,33 @@
}
// Append group if matched.
if (groups[refNum] != UNDEFINED) {
- result.append((String) groups[refNum]);
+ sb.append((String) groups[refNum]);
}
} else { // $0. ignore.
assert refNum == 0;
- result.append("$0");
+ sb.append("$0");
}
} else if (nextChar == '$') {
- result.append('$');
+ sb.append('$');
cursor++;
} else if (nextChar == '&') {
- result.append(matcher.group());
+ sb.append(matcher.group());
cursor++;
} else if (nextChar == '`') {
- result.append(text.substring(0, matcher.start()));
+ sb.append(text, 0, matcher.start());
cursor++;
} else if (nextChar == '\'') {
- result.append(text.substring(matcher.end()));
+ sb.append(text, matcher.end(), text.length());
cursor++;
} else {
// unknown substitution or $n with n>m. skip.
- result.append('$');
+ sb.append('$');
}
} else {
- result.append(nextChar);
+ sb.append(nextChar);
cursor++;
}
}
- // Append the intervening text
- sb.append(text, lastAppendPosition, matcher.start());
- // Append the match substitution
- sb.append(result);
}
private String callReplaceValue(final ScriptFunction function, final RegExpMatcher matcher, final String string) {
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- delete(NativeError.MESSAGE, Global.isStrict());
+ delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java Tue Jun 18 13:25:24 2013 +0530
@@ -58,7 +58,7 @@
if (msg != UNDEFINED) {
this.instMessage = JSType.toString(msg);
} else {
- this.delete(NativeError.MESSAGE, Global.isStrict());
+ this.delete(NativeError.MESSAGE, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Tue Jun 18 13:25:24 2013 +0530
@@ -149,9 +149,9 @@
@Override
protected void scanNumber() {
// Record beginning of number.
- final int start = position;
+ final int startPosition = position;
// Assume value is a decimal.
- TokenType type = TokenType.DECIMAL;
+ TokenType valueType = TokenType.DECIMAL;
// floating point can't start with a "." with no leading digit before
if (ch0 == '.') {
@@ -211,11 +211,11 @@
}
}
- type = TokenType.FLOATING;
+ valueType = TokenType.FLOATING;
}
// Add number token.
- add(type, start);
+ add(valueType, startPosition);
}
// ECMA 15.12.1.1 The JSON Lexical Grammar - JSONEscapeCharacter
--- a/nashorn/src/jdk/nashorn/internal/parser/Lexer.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/parser/Lexer.java Tue Jun 18 13:25:24 2013 +0530
@@ -666,37 +666,24 @@
/**
- * Get the value of a numeric sequence.
+ * Get the value of a hexadecimal numeric sequence.
*
- * @param base Numeric base.
- * @param max Maximum number of digits.
- * @param skip Skip over escape first.
- * @param check Tells whether to throw error if a digit is invalid for the given base.
- * @param type Type of token to report against.
- *
+ * @param length Number of digits.
+ * @param type Type of token to report against.
* @return Value of sequence or < 0 if no digits.
*/
- private int valueOfSequence(final int base, final int max, final boolean skip, final boolean check, final TokenType type) {
- assert base == 16 || base == 8 : "base other than 16 or 8";
- final boolean isHex = base == 16;
- final int shift = isHex ? 4 : 3;
+ private int hexSequence(final int length, final TokenType type) {
int value = 0;
- if (skip) {
- skip(2);
- }
-
- for (int i = 0; i < max; i++) {
- final int digit = convertDigit(ch0, base);
+ for (int i = 0; i < length; i++) {
+ final int digit = convertDigit(ch0, 16);
if (digit == -1) {
- if (check) {
- error(Lexer.message("invalid." + (isHex ? "hex" : "octal")), type, position, limit);
- }
+ error(Lexer.message("invalid.hex"), type, position, limit);
return i == 0 ? -1 : value;
}
- value = value << shift | digit;
+ value = digit | value << 4;
skip(1);
}
@@ -704,6 +691,30 @@
}
/**
+ * Get the value of an octal numeric sequence. This parses up to 3 digits with a maximum value of 255.
+ *
+ * @return Value of sequence.
+ */
+ private int octalSequence() {
+ int value = 0;
+
+ for (int i = 0; i < 3; i++) {
+ final int digit = convertDigit(ch0, 8);
+
+ if (digit == -1) {
+ break;
+ }
+ value = digit | value << 3;
+ skip(1);
+
+ if (i == 1 && value >= 32) {
+ break;
+ }
+ }
+ return value;
+ }
+
+ /**
* Convert a string to a JavaScript identifier.
*
* @param start Position in source content.
@@ -724,7 +735,8 @@
while (!atEOF() && position < end && !isEOL(ch0)) {
// If escape character.
if (ch0 == '\\' && ch1 == 'u') {
- final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT);
+ skip(2);
+ final int ch = hexSequence(4, TokenType.IDENT);
if (isWhitespace((char)ch)) {
return null;
}
@@ -815,7 +827,7 @@
}
reset(afterSlash);
// Octal sequence.
- final int ch = valueOfSequence(8, 3, false, false, STRING);
+ final int ch = octalSequence();
if (ch < 0) {
sb.append('\\');
@@ -862,7 +874,7 @@
break;
case 'x': {
// Hex sequence.
- final int ch = valueOfSequence(16, 2, false, true, STRING);
+ final int ch = hexSequence(2, STRING);
if (ch < 0) {
sb.append('\\');
@@ -874,7 +886,7 @@
break;
case 'u': {
// Unicode sequence.
- final int ch = valueOfSequence(16, 4, false, true, STRING);
+ final int ch = hexSequence(4, STRING);
if (ch < 0) {
sb.append('\\');
@@ -907,6 +919,7 @@
/**
* Scan over a string literal.
+ * @param add true if we nare not just scanning but should actually modify the token stream
*/
protected void scanString(final boolean add) {
// Type of string.
@@ -1103,6 +1116,10 @@
}
}
+ if (Character.isJavaIdentifierStart(ch0)) {
+ error(Lexer.message("missing.space.after.number"), type, position, 1);
+ }
+
// Add number token.
add(type, start);
}
@@ -1191,7 +1208,8 @@
// Make sure first character is valid start character.
if (ch0 == '\\' && ch1 == 'u') {
- final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT);
+ skip(2);
+ final int ch = hexSequence(4, TokenType.IDENT);
if (!Character.isJavaIdentifierStart(ch)) {
error(Lexer.message("illegal.identifier.character"), TokenType.IDENT, start, position);
@@ -1204,7 +1222,8 @@
// Make sure remaining characters are valid part characters.
while (!atEOF()) {
if (ch0 == '\\' && ch1 == 'u') {
- final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT);
+ skip(2);
+ final int ch = hexSequence(4, TokenType.IDENT);
if (!Character.isJavaIdentifierPart(ch)) {
error(Lexer.message("illegal.identifier.character"), TokenType.IDENT, start, position);
@@ -1596,6 +1615,12 @@
return null;
}
+ /**
+ * Get the correctly localized error message for a given message id format arguments
+ * @param msgId message id
+ * @param args format arguments
+ * @return message
+ */
protected static String message(final String msgId, final String... args) {
return ECMAErrors.getMessage("lexer.error." + msgId, args);
}
--- a/nashorn/src/jdk/nashorn/internal/parser/Parser.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/parser/Parser.java Tue Jun 18 13:25:24 2013 +0530
@@ -2403,7 +2403,7 @@
verifyStrictIdent(name, "function name");
} else if (isStatement) {
// Nashorn extension: anonymous function statements
- if (env._no_syntax_extensions || !env._anon_functions) {
+ if (env._no_syntax_extensions) {
expect(IDENT);
}
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java Tue Jun 18 13:25:24 2013 +0530
@@ -46,6 +46,7 @@
import java.security.Permissions;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
+import java.util.Map;
import jdk.internal.org.objectweb.asm.ClassReader;
import jdk.internal.org.objectweb.asm.util.CheckClassAdapter;
import jdk.nashorn.api.scripting.ScriptObjectMirror;
@@ -188,7 +189,7 @@
private final ScriptEnvironment env;
/** is this context in strict mode? Cached from env. as this is used heavily. */
- public final boolean _strict;
+ final boolean _strict;
/** class loader to resolve classes from script. */
private final ClassLoader appLoader;
@@ -482,6 +483,13 @@
final String name = JSType.toString(sobj.get("name"));
source = new Source(name, script);
}
+ } else if (src instanceof Map) {
+ final Map map = (Map)src;
+ if (map.containsKey("script") && map.containsKey("name")) {
+ final String script = JSType.toString(map.get("script"));
+ final String name = JSType.toString(map.get("name"));
+ source = new Source(name, script);
+ }
}
if (source != null) {
--- a/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Tue Jun 18 13:25:24 2013 +0530
@@ -373,11 +373,16 @@
sb.append(ch);
} else if (ch < 256) {
sb.append('%');
- final byte b = (byte)ch;
- sb.append(Integer.toHexString(b & 0xFF).toUpperCase(Locale.ENGLISH));
+ if (ch < 16) {
+ sb.append('0');
+ }
+ sb.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
} else {
sb.append("%u");
- sb.append(Integer.toHexString(ch & 0xFFFF).toUpperCase(Locale.ENGLISH));
+ if (ch < 4096) {
+ sb.append('0');
+ }
+ sb.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH));
}
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java Tue Jun 18 13:25:24 2013 +0530
@@ -101,7 +101,6 @@
final Object val = holder.get(name);
if (val instanceof ScriptObject) {
final ScriptObject valueObj = (ScriptObject)val;
- final boolean strict = valueObj.isStrictContext();
final Iterator<String> iter = valueObj.propertyIterator();
while (iter.hasNext()) {
@@ -109,9 +108,9 @@
final Object newElement = walk(valueObj, key, reviver);
if (newElement == ScriptRuntime.UNDEFINED) {
- valueObj.delete(key, strict);
+ valueObj.delete(key, false);
} else {
- setPropertyValue(valueObj, key, newElement, strict);
+ setPropertyValue(valueObj, key, newElement, false);
}
}
}
@@ -164,14 +163,13 @@
} else if (node instanceof ObjectNode) {
final ObjectNode objNode = (ObjectNode) node;
final ScriptObject object = ((GlobalObject)global).newObject();
- final boolean strict = global.isStrictContext();
for (final PropertyNode pNode: objNode.getElements()) {
final Node valueNode = pNode.getValue();
final String name = pNode.getKeyName();
final Object value = convertNode(global, valueNode);
- setPropertyValue(object, name, value, strict);
+ setPropertyValue(object, name, value, false);
}
return object;
--- a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java Tue Jun 18 13:25:24 2013 +0530
@@ -199,7 +199,6 @@
final String fullName = name.isEmpty() ? propertyName : name + "." + propertyName;
final Context context = getContext();
- final boolean strict = context._strict;
Class<?> javaClass = null;
try {
@@ -209,9 +208,9 @@
}
if (javaClass == null) {
- set(propertyName, new NativeJavaPackage(fullName, getProto()), strict);
+ set(propertyName, new NativeJavaPackage(fullName, getProto()), false);
} else {
- set(propertyName, StaticClass.forClass(javaClass), strict);
+ set(propertyName, StaticClass.forClass(javaClass), false);
}
return super.lookup(desc, request);
--- a/nashorn/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java Tue Jun 18 13:25:24 2013 +0530
@@ -61,7 +61,7 @@
*
* @param listener The property listener that is added.
*/
- public final void addPropertyListener(final PropertyListener listener) {
+ public synchronized final void addPropertyListener(final PropertyListener listener) {
if (listeners == null) {
listeners = new WeakHashMap<>();
}
@@ -77,7 +77,7 @@
*
* @param listener The property listener that is removed.
*/
- public final void removePropertyListener(final PropertyListener listener) {
+ public synchronized final void removePropertyListener(final PropertyListener listener) {
if (listeners != null) {
if (Context.DEBUG) {
listenersRemoved++;
@@ -92,7 +92,7 @@
* @param object The ScriptObject to which property was added.
* @param prop The property being added.
*/
- protected final void notifyPropertyAdded(final ScriptObject object, final Property prop) {
+ protected synchronized final void notifyPropertyAdded(final ScriptObject object, final Property prop) {
if (listeners != null) {
for (PropertyListener listener : listeners.keySet()) {
listener.propertyAdded(object, prop);
@@ -106,7 +106,7 @@
* @param object The ScriptObject from which property was deleted.
* @param prop The property being deleted.
*/
- protected final void notifyPropertyDeleted(final ScriptObject object, final Property prop) {
+ protected synchronized final void notifyPropertyDeleted(final ScriptObject object, final Property prop) {
if (listeners != null) {
for (PropertyListener listener : listeners.keySet()) {
listener.propertyDeleted(object, prop);
@@ -121,7 +121,7 @@
* @param oldProp The old property being replaced.
* @param newProp The new property that replaces the old property.
*/
- protected final void notifyPropertyModified(final ScriptObject object, final Property oldProp, final Property newProp) {
+ protected synchronized final void notifyPropertyModified(final ScriptObject object, final Property oldProp, final Property newProp) {
if (listeners != null) {
for (PropertyListener listener : listeners.keySet()) {
listener.propertyModified(object, oldProp, newProp);
--- a/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Tue Jun 18 13:25:24 2013 +0530
@@ -95,7 +95,6 @@
*/
private PropertyMap(final PropertyHashMap properties, final int fieldCount, final int fieldMaximum) {
this.properties = properties;
- this.hashCode = computeHashCode();
this.fieldCount = fieldCount;
this.fieldMaximum = fieldMaximum;
@@ -125,7 +124,6 @@
this.spillLength = propertyMap.spillLength;
this.fieldCount = propertyMap.fieldCount;
this.fieldMaximum = propertyMap.fieldMaximum;
- this.hashCode = computeHashCode();
if (Context.DEBUG) {
count++;
@@ -610,6 +608,9 @@
@Override
public int hashCode() {
+ if (hashCode == 0 && !properties.isEmpty()) {
+ hashCode = computeHashCode();
+ }
return hashCode;
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptEnvironment.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptEnvironment.java Tue Jun 18 13:25:24 2013 +0530
@@ -56,9 +56,6 @@
/** Current Options object. */
private final Options options;
- /** Always allow functions as statements */
- public final boolean _anon_functions;
-
/** Size of the per-global Class cache size */
public final int _class_cache_size;
@@ -192,7 +189,6 @@
this.namespace = new Namespace();
this.options = options;
- _anon_functions = options.getBoolean("anon.functions");
_class_cache_size = options.getInteger("class.cache.size");
_compile_only = options.getBoolean("compile.only");
_debug_lines = options.getBoolean("debug.lines");
--- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Tue Jun 18 13:25:24 2013 +0530
@@ -105,6 +105,9 @@
/** Is this a prototype PropertyMap? */
public static final int IS_PROTOTYPE = 0b0000_1000;
+ /** Is length property not-writable? */
+ public static final int IS_LENGTH_NOT_WRITABLE = 0b0001_0000;
+
/** Spill growth rate - by how many elements does {@link ScriptObject#spill} when full */
public static final int SPILL_RATE = 8;
@@ -443,7 +446,7 @@
if (newValue && property != null) {
// Temporarily clear flags.
property = modifyOwnProperty(property, 0);
- set(key, value, getContext()._strict);
+ set(key, value, false);
}
if (property == null) {
@@ -998,7 +1001,7 @@
* @param value the value to write at the given index
*/
public void setArgument(final int key, final Object value) {
- set(key, value, getContext()._strict);
+ set(key, value, false);
}
/**
@@ -1105,7 +1108,8 @@
}
/**
- * return a List of own keys associated with the object.
+ * return an array of own property keys associated with the object.
+ *
* @param all True if to include non-enumerable keys.
* @return Array of keys.
*/
@@ -1206,7 +1210,7 @@
* the proto chain
*
* @param instance instace to check
- * @return true if instance of instance
+ * @return true if 'instance' is an instance of this object
*/
public boolean isInstance(final ScriptObject instance) {
return false;
@@ -1277,14 +1281,14 @@
*
* @return {@code true} if is prototype
*/
- public boolean isPrototype() {
+ public final boolean isPrototype() {
return (flags & IS_PROTOTYPE) != 0;
}
/**
* Flag this object as having a prototype.
*/
- public void setIsPrototype() {
+ public final void setIsPrototype() {
if (proto != null && !isPrototype()) {
proto.addPropertyListener(this);
}
@@ -1292,6 +1296,22 @@
}
/**
+ * Check if this object has non-writable length property
+ *
+ * @return {@code true} if 'length' property is non-writable
+ */
+ public final boolean isLengthNotWritable() {
+ return (flags & IS_LENGTH_NOT_WRITABLE) != 0;
+ }
+
+ /**
+ * Flag this object as having non-writable length property
+ */
+ public void setIsLengthNotWritable() {
+ flags |= IS_LENGTH_NOT_WRITABLE;
+ }
+
+ /**
* Get the {@link ArrayData} for this ScriptObject if it is an array
* @return array data
*/
@@ -1363,7 +1383,7 @@
/**
* Check whether this ScriptObject is frozen
- * @return true if frozed
+ * @return true if frozen
*/
public boolean isFrozen() {
return getMap().isFrozen();
@@ -1393,7 +1413,7 @@
* (java.util.Map-like method to help ScriptObjectMirror implementation)
*/
public void clear() {
- final boolean strict = getContext()._strict;
+ final boolean strict = isStrictContext();
final Iterator<String> iter = propertyIterator();
while (iter.hasNext()) {
delete(iter.next(), strict);
@@ -1481,7 +1501,7 @@
*/
public Object put(final Object key, final Object value) {
final Object oldValue = get(key);
- set(key, value, getContext()._strict);
+ set(key, value, isStrictContext());
return oldValue;
}
@@ -1493,7 +1513,7 @@
* @param otherMap a {@literal <key,value>} map of properties to add
*/
public void putAll(final Map<?, ?> otherMap) {
- final boolean strict = getContext()._strict;
+ final boolean strict = isStrictContext();
for (final Map.Entry<?, ?> entry : otherMap.entrySet()) {
set(entry.getKey(), entry.getValue(), strict);
}
@@ -1508,7 +1528,7 @@
*/
public Object remove(final Object key) {
final Object oldValue = get(key);
- delete(key, getContext()._strict);
+ delete(key, isStrictContext());
return oldValue;
}
@@ -1520,7 +1540,7 @@
* @return if the delete was successful or not
*/
public boolean delete(final Object key) {
- return delete(key, getContext()._strict);
+ return delete(key, isStrictContext());
}
/**
@@ -2222,7 +2242,7 @@
return;
}
- final boolean isStrict = getContext()._strict;
+ final boolean isStrict = isStrictContext();
if (newLength > arrayLength) {
setArray(getArray().ensure(newLength - 1));
--- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Tue Jun 18 13:25:24 2013 +0530
@@ -825,6 +825,13 @@
return ((StaticClass)clazz).getRepresentedClass().isInstance(obj);
}
+ if (clazz instanceof ScriptObjectMirror) {
+ if (obj instanceof ScriptObjectMirror) {
+ return ((ScriptObjectMirror)clazz).isInstance((ScriptObjectMirror)obj);
+ }
+ return false;
+ }
+
throw typeError("instanceof.on.non.object");
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java Tue Jun 18 13:25:24 2013 +0530
@@ -221,10 +221,9 @@
final String err = errBuffer.toString();
// Set globals for secondary results.
- final boolean isStrict = global.isStrictContext();
- global.set(OUT_NAME, out, isStrict);
- global.set(ERR_NAME, err, isStrict);
- global.set(EXIT_NAME, exit, isStrict);
+ global.set(OUT_NAME, out, false);
+ global.set(ERR_NAME, err, false);
+ global.set(EXIT_NAME, exit, false);
// Propagate exception if present.
for (int i = 0; i < exception.length; i++) {
--- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayIterator.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayIterator.java Tue Jun 18 13:25:24 2013 +0530
@@ -83,6 +83,6 @@
@Override
public void remove() {
- array.delete(index, array.isStrictContext());
+ array.delete(index, false);
}
}
--- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayLikeIterator.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayLikeIterator.java Tue Jun 18 13:25:24 2013 +0530
@@ -26,6 +26,7 @@
package jdk.nashorn.internal.runtime.arrays;
import java.util.Iterator;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
import jdk.nashorn.internal.runtime.JSType;
import jdk.nashorn.internal.runtime.ScriptObject;
@@ -125,6 +126,10 @@
return new MapIterator((ScriptObject)obj, includeUndefined);
}
+ if (obj instanceof ScriptObjectMirror) {
+ return new ScriptObjectMirrorIterator((ScriptObjectMirror)obj, includeUndefined);
+ }
+
return new EmptyArrayLikeIterator();
}
@@ -146,6 +151,10 @@
return new ReverseMapIterator((ScriptObject)obj, includeUndefined);
}
+ if (obj instanceof ScriptObjectMirror) {
+ return new ReverseScriptObjectMirrorIterator((ScriptObjectMirror)obj, includeUndefined);
+ }
+
assert !obj.getClass().isArray();
return new EmptyArrayLikeIterator();
--- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/IteratorAction.java Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/IteratorAction.java Tue Jun 18 13:25:24 2013 +0530
@@ -27,6 +27,7 @@
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
import jdk.nashorn.internal.runtime.Context;
import jdk.nashorn.internal.runtime.ScriptFunction;
import jdk.nashorn.internal.runtime.ScriptRuntime;
@@ -96,12 +97,18 @@
* @return result of apply
*/
public final T apply() {
- if (!(callbackfn instanceof ScriptFunction)) {
+ final boolean strict;
+ if (callbackfn instanceof ScriptFunction) {
+ strict = ((ScriptFunction)callbackfn).isStrict();
+ } else if (callbackfn instanceof ScriptObjectMirror &&
+ ((ScriptObjectMirror)callbackfn).isFunction()) {
+ strict = ((ScriptObjectMirror)callbackfn).isStrictFunction();
+ } else {
throw typeError("not.a.function", ScriptRuntime.safeToString(callbackfn));
}
- final ScriptFunction func = ((ScriptFunction)callbackfn);
+
// for non-strict callback, need to translate undefined thisArg to be global object
- thisArg = (thisArg == ScriptRuntime.UNDEFINED && !func.isStrict()) ? Context.getGlobal() : thisArg;
+ thisArg = (thisArg == ScriptRuntime.UNDEFINED && !strict)? Context.getGlobal() : thisArg;
applyLoopBegin(iter);
final boolean reverse = iter.isReverse();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ReverseScriptObjectMirrorIterator.java Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.nashorn.internal.runtime.arrays;
+
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
+import jdk.nashorn.internal.runtime.JSType;
+
+/**
+ * Reverse iterator over a ScriptObjectMirror
+ */
+final class ReverseScriptObjectMirrorIterator extends ScriptObjectMirrorIterator {
+
+ ReverseScriptObjectMirrorIterator(final ScriptObjectMirror obj, final boolean includeUndefined) {
+ super(obj, includeUndefined);
+ this.index = JSType.toUint32(obj.containsKey("length")? obj.getMember("length") : 0) - 1;
+ }
+
+ @Override
+ public boolean isReverse() {
+ return true;
+ }
+
+ @Override
+ protected boolean indexInArray() {
+ return index >= 0;
+ }
+
+ @Override
+ protected long bumpIndex() {
+ return index--;
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ScriptObjectMirrorIterator.java Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.nashorn.internal.runtime.arrays;
+
+import java.util.NoSuchElementException;
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
+import jdk.nashorn.internal.runtime.JSType;
+
+/**
+ * Iterator over a ScriptObjectMirror
+ */
+class ScriptObjectMirrorIterator extends ArrayLikeIterator<Object> {
+
+ protected final ScriptObjectMirror obj;
+ private final long length;
+
+ ScriptObjectMirrorIterator(final ScriptObjectMirror obj, final boolean includeUndefined) {
+ super(includeUndefined);
+ this.obj = obj;
+ this.length = JSType.toUint32(obj.containsKey("length")? obj.getMember("length") : 0);
+ this.index = 0;
+ }
+
+ protected boolean indexInArray() {
+ return index < length;
+ }
+
+ @Override
+ public long getLength() {
+ return length;
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (length == 0L) {
+ return false; //return empty string if toUint32(length) == 0
+ }
+
+ while (indexInArray()) {
+ if (obj.containsKey(index) || includeUndefined) {
+ break;
+ }
+ bumpIndex();
+ }
+
+ return indexInArray();
+ }
+
+ @Override
+ public Object next() {
+ if (indexInArray()) {
+ return obj.get(bumpIndex());
+ }
+
+ throw new NoSuchElementException();
+ }
+}
+
--- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Tue Jun 18 13:25:24 2013 +0530
@@ -25,8 +25,8 @@
lexer.error.edit.string.missing.brace=Edit string expression missing closing brace
lexer.error.here.missing.end.marker=Here string missing end marker "{0}"
lexer.error.missing.close.quote=Missing close quote
+lexer.error.missing.space.after.number=Missing space after numeric literal
lexer.error.invalid.hex=Invalid hex digit
-lexer.error.invalid.octal=Invalid octal digit
lexer.error.strict.no.octal=cannot use octal escapes in strict mode
lexer.error.json.invalid.number=Invalid JSON number format
lexer.error.invalid.escape.char=Invalid escape character
--- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Options.properties Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Options.properties Tue Jun 18 13:25:24 2013 +0530
@@ -59,7 +59,7 @@
## is_undocumented - should this option never appear in the online help. defaults to no.
## desc - description of what the option does
## default - default value of the option. e.g. debug.lines is true by default. Not set means option not available by default
-## dependency - does this arg imply another arg, e.g. scripting -> anon-functions
+## dependency - does this arg imply another arg.
## confict - does this arg conflict with another arg e.g trace && instrument
## value_next_arg - is the opton's value passed as next argument in command line?
##
@@ -77,16 +77,9 @@
desc="Print extended help for command line flags." \
}
-nashorn.option.anon.functions = { \
- name="--anon-functions", \
- short_name="-af", \
- is_undocumented=true, \
- desc="Always allow functions as statements." \
-}
-
nashorn.option.class.cache.size ={ \
name="--class-cache-size", \
- short_name="--ccs", \
+ short_name="-ccs", \
desc="Size of the Class cache size per global scope.", \
is_undocumented=true, \
type=Integer, \
@@ -201,10 +194,10 @@
nashorn.option.no.syntax.extensions = { \
name="--no-syntax-extensions", \
- short_name="--nse", \
+ short_name="-nse", \
is_undocumented=true, \
desc="No non-standard syntax extensions", \
- default=-anon-functions=false \
+ default=false \
}
nashorn.option.package = { \
@@ -296,8 +289,7 @@
nashorn.option.scripting = { \
name="-scripting", \
- desc="Enable scripting features.", \
- dependency="--anon-functions=true" \
+ desc="Enable scripting features." \
}
nashorn.option.specialize.calls = { \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8011893.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8011893: JS Object builtin prototype is not thread safe
+ *
+ * @test
+ * @run
+ */
+
+var a = {};
+var thread = new java.lang.Thread(new java.lang.Runnable() {
+ run: function() {
+ print("Thread starts");
+ for (var i = 0; i < 1000000; i++) {
+ // Unsubscribe to builtin, subscribe to new proto
+ var b = Object.create(a);
+ }
+ print("Thread done");
+ }
+});
+
+print("Main starts");
+thread.start();
+for (var j = 0; j < 1000000; j++) {
+ // Subscribe to builtin prototype.
+ a = {};
+}
+
+thread.join();
+print("Main done");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8011893.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,4 @@
+Main starts
+Thread starts
+Thread done
+Main done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8015355.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8015355: Array.prototype functions don't honour non-writable length and / or index properties
+ *
+ * @test
+ * @run
+ */
+
+function fail(msg) {
+ print(msg);
+}
+
+function check(callback) {
+ try {
+ callback();
+ fail("TypeError expected for " + callback);
+ } catch (e) {
+ if (! (e instanceof TypeError)) {
+ fail("TypeError expected, got " + e);
+ }
+ }
+}
+
+var array = Object.defineProperty([],"length", { writable: false });
+
+check(function() {
+ array.push(0)
+});
+
+check(function() {
+ array.pop()
+});
+
+check(function() {
+ Object.defineProperty([,,],"0",{ writable: false }).reverse();
+});
+
+check(function() {
+ array.shift()
+});
+
+check(function() {
+ array.splice(0)
+});
+
+check(function() {
+ array.unshift()
+});
+
+// try the above via call
+
+check(function() {
+ Array.prototype.push.call(array, 0);
+});
+
+check(function() {
+ Array.prototype.pop.call(array);
+});
+
+check(function() {
+ Array.prototype.shift.call(array);
+});
+
+check(function() {
+ Array.prototype.unshift.call(array);
+});
+
+check(function() {
+ Array.prototype.splice.call(array, 0);
+});
+
+check(function() {
+ Array.prototype.reverse.call(Object.defineProperty([,,],"0",{ writable: false }));
+});
+
+// try the above via apply
+
+check(function() {
+ Array.prototype.push.apply(array, [ 0 ]);
+});
+
+check(function() {
+ Array.prototype.pop.apply(array);
+});
+
+check(function() {
+ Array.prototype.shift.apply(array);
+});
+
+check(function() {
+ Array.prototype.unshift.apply(array);
+});
+
+check(function() {
+ Array.prototype.splice.apply(array, [ 0 ]);
+});
+
+check(function() {
+ Array.prototype.reverse.apply(Object.defineProperty([,,],"0",{ writable: false }));
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016235.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016235 : use before definition in catch block generated erroneous bytecode
+ * as there is no guarantee anything in the try block has executed.
+ *
+ * @test
+ * @run
+ */
+
+function f() {
+ try {
+ var parser = {};
+ } catch (e) {
+ parser = parser.context();
+ }
+}
+
+function g() {
+ try {
+ return "apa";
+ } catch (tmp) {
+ //for now, too conservative as var ex declaration exists on the function
+ //level, but at least the code does not break, and the analysis is driven
+ //from the catch block (the rare case), not the try block (the common case)
+ var ex = new Error("DOM Exception 5");
+ ex.code = ex.number = 5;
+ return ex;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016518.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016518: Parsing of octal string escapes is broken
+ *
+ * @test
+ * @run
+ */
+
+print("\471".charCodeAt(0));
+print("\471".charCodeAt(1));
+
+print("\377".length);
+print("\377".charCodeAt(0));
+print("\400".length);
+print("\400".charCodeAt(0));
+print("\400".charCodeAt(1));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016518.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,7 @@
+39
+49
+1
+255
+2
+32
+48
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016528.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016528: Hex code from escape() should be padded
+ *
+ * @test
+ * @run
+ */
+
+for (var i = 0; i < 8192; i++) {
+ print(escape(String.fromCharCode(i)));
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016528.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,8192 @@
+%00
+%01
+%02
+%03
+%04
+%05
+%06
+%07
+%08
+%09
+%0A
+%0B
+%0C
+%0D
+%0E
+%0F
+%10
+%11
+%12
+%13
+%14
+%15
+%16
+%17
+%18
+%19
+%1A
+%1B
+%1C
+%1D
+%1E
+%1F
+%20
+%21
+%22
+%23
+%24
+%25
+%26
+%27
+%28
+%29
+*
++
+%2C
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+%3A
+%3B
+%3C
+%3D
+%3E
+%3F
+@
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+%5B
+%5C
+%5D
+%5E
+_
+%60
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+%7B
+%7C
+%7D
+%7E
+%7F
+%80
+%81
+%82
+%83
+%84
+%85
+%86
+%87
+%88
+%89
+%8A
+%8B
+%8C
+%8D
+%8E
+%8F
+%90
+%91
+%92
+%93
+%94
+%95
+%96
+%97
+%98
+%99
+%9A
+%9B
+%9C
+%9D
+%9E
+%9F
+%A0
+%A1
+%A2
+%A3
+%A4
+%A5
+%A6
+%A7
+%A8
+%A9
+%AA
+%AB
+%AC
+%AD
+%AE
+%AF
+%B0
+%B1
+%B2
+%B3
+%B4
+%B5
+%B6
+%B7
+%B8
+%B9
+%BA
+%BB
+%BC
+%BD
+%BE
+%BF
+%C0
+%C1
+%C2
+%C3
+%C4
+%C5
+%C6
+%C7
+%C8
+%C9
+%CA
+%CB
+%CC
+%CD
+%CE
+%CF
+%D0
+%D1
+%D2
+%D3
+%D4
+%D5
+%D6
+%D7
+%D8
+%D9
+%DA
+%DB
+%DC
+%DD
+%DE
+%DF
+%E0
+%E1
+%E2
+%E3
+%E4
+%E5
+%E6
+%E7
+%E8
+%E9
+%EA
+%EB
+%EC
+%ED
+%EE
+%EF
+%F0
+%F1
+%F2
+%F3
+%F4
+%F5
+%F6
+%F7
+%F8
+%F9
+%FA
+%FB
+%FC
+%FD
+%FE
+%FF
+%u0100
+%u0101
+%u0102
+%u0103
+%u0104
+%u0105
+%u0106
+%u0107
+%u0108
+%u0109
+%u010A
+%u010B
+%u010C
+%u010D
+%u010E
+%u010F
+%u0110
+%u0111
+%u0112
+%u0113
+%u0114
+%u0115
+%u0116
+%u0117
+%u0118
+%u0119
+%u011A
+%u011B
+%u011C
+%u011D
+%u011E
+%u011F
+%u0120
+%u0121
+%u0122
+%u0123
+%u0124
+%u0125
+%u0126
+%u0127
+%u0128
+%u0129
+%u012A
+%u012B
+%u012C
+%u012D
+%u012E
+%u012F
+%u0130
+%u0131
+%u0132
+%u0133
+%u0134
+%u0135
+%u0136
+%u0137
+%u0138
+%u0139
+%u013A
+%u013B
+%u013C
+%u013D
+%u013E
+%u013F
+%u0140
+%u0141
+%u0142
+%u0143
+%u0144
+%u0145
+%u0146
+%u0147
+%u0148
+%u0149
+%u014A
+%u014B
+%u014C
+%u014D
+%u014E
+%u014F
+%u0150
+%u0151
+%u0152
+%u0153
+%u0154
+%u0155
+%u0156
+%u0157
+%u0158
+%u0159
+%u015A
+%u015B
+%u015C
+%u015D
+%u015E
+%u015F
+%u0160
+%u0161
+%u0162
+%u0163
+%u0164
+%u0165
+%u0166
+%u0167
+%u0168
+%u0169
+%u016A
+%u016B
+%u016C
+%u016D
+%u016E
+%u016F
+%u0170
+%u0171
+%u0172
+%u0173
+%u0174
+%u0175
+%u0176
+%u0177
+%u0178
+%u0179
+%u017A
+%u017B
+%u017C
+%u017D
+%u017E
+%u017F
+%u0180
+%u0181
+%u0182
+%u0183
+%u0184
+%u0185
+%u0186
+%u0187
+%u0188
+%u0189
+%u018A
+%u018B
+%u018C
+%u018D
+%u018E
+%u018F
+%u0190
+%u0191
+%u0192
+%u0193
+%u0194
+%u0195
+%u0196
+%u0197
+%u0198
+%u0199
+%u019A
+%u019B
+%u019C
+%u019D
+%u019E
+%u019F
+%u01A0
+%u01A1
+%u01A2
+%u01A3
+%u01A4
+%u01A5
+%u01A6
+%u01A7
+%u01A8
+%u01A9
+%u01AA
+%u01AB
+%u01AC
+%u01AD
+%u01AE
+%u01AF
+%u01B0
+%u01B1
+%u01B2
+%u01B3
+%u01B4
+%u01B5
+%u01B6
+%u01B7
+%u01B8
+%u01B9
+%u01BA
+%u01BB
+%u01BC
+%u01BD
+%u01BE
+%u01BF
+%u01C0
+%u01C1
+%u01C2
+%u01C3
+%u01C4
+%u01C5
+%u01C6
+%u01C7
+%u01C8
+%u01C9
+%u01CA
+%u01CB
+%u01CC
+%u01CD
+%u01CE
+%u01CF
+%u01D0
+%u01D1
+%u01D2
+%u01D3
+%u01D4
+%u01D5
+%u01D6
+%u01D7
+%u01D8
+%u01D9
+%u01DA
+%u01DB
+%u01DC
+%u01DD
+%u01DE
+%u01DF
+%u01E0
+%u01E1
+%u01E2
+%u01E3
+%u01E4
+%u01E5
+%u01E6
+%u01E7
+%u01E8
+%u01E9
+%u01EA
+%u01EB
+%u01EC
+%u01ED
+%u01EE
+%u01EF
+%u01F0
+%u01F1
+%u01F2
+%u01F3
+%u01F4
+%u01F5
+%u01F6
+%u01F7
+%u01F8
+%u01F9
+%u01FA
+%u01FB
+%u01FC
+%u01FD
+%u01FE
+%u01FF
+%u0200
+%u0201
+%u0202
+%u0203
+%u0204
+%u0205
+%u0206
+%u0207
+%u0208
+%u0209
+%u020A
+%u020B
+%u020C
+%u020D
+%u020E
+%u020F
+%u0210
+%u0211
+%u0212
+%u0213
+%u0214
+%u0215
+%u0216
+%u0217
+%u0218
+%u0219
+%u021A
+%u021B
+%u021C
+%u021D
+%u021E
+%u021F
+%u0220
+%u0221
+%u0222
+%u0223
+%u0224
+%u0225
+%u0226
+%u0227
+%u0228
+%u0229
+%u022A
+%u022B
+%u022C
+%u022D
+%u022E
+%u022F
+%u0230
+%u0231
+%u0232
+%u0233
+%u0234
+%u0235
+%u0236
+%u0237
+%u0238
+%u0239
+%u023A
+%u023B
+%u023C
+%u023D
+%u023E
+%u023F
+%u0240
+%u0241
+%u0242
+%u0243
+%u0244
+%u0245
+%u0246
+%u0247
+%u0248
+%u0249
+%u024A
+%u024B
+%u024C
+%u024D
+%u024E
+%u024F
+%u0250
+%u0251
+%u0252
+%u0253
+%u0254
+%u0255
+%u0256
+%u0257
+%u0258
+%u0259
+%u025A
+%u025B
+%u025C
+%u025D
+%u025E
+%u025F
+%u0260
+%u0261
+%u0262
+%u0263
+%u0264
+%u0265
+%u0266
+%u0267
+%u0268
+%u0269
+%u026A
+%u026B
+%u026C
+%u026D
+%u026E
+%u026F
+%u0270
+%u0271
+%u0272
+%u0273
+%u0274
+%u0275
+%u0276
+%u0277
+%u0278
+%u0279
+%u027A
+%u027B
+%u027C
+%u027D
+%u027E
+%u027F
+%u0280
+%u0281
+%u0282
+%u0283
+%u0284
+%u0285
+%u0286
+%u0287
+%u0288
+%u0289
+%u028A
+%u028B
+%u028C
+%u028D
+%u028E
+%u028F
+%u0290
+%u0291
+%u0292
+%u0293
+%u0294
+%u0295
+%u0296
+%u0297
+%u0298
+%u0299
+%u029A
+%u029B
+%u029C
+%u029D
+%u029E
+%u029F
+%u02A0
+%u02A1
+%u02A2
+%u02A3
+%u02A4
+%u02A5
+%u02A6
+%u02A7
+%u02A8
+%u02A9
+%u02AA
+%u02AB
+%u02AC
+%u02AD
+%u02AE
+%u02AF
+%u02B0
+%u02B1
+%u02B2
+%u02B3
+%u02B4
+%u02B5
+%u02B6
+%u02B7
+%u02B8
+%u02B9
+%u02BA
+%u02BB
+%u02BC
+%u02BD
+%u02BE
+%u02BF
+%u02C0
+%u02C1
+%u02C2
+%u02C3
+%u02C4
+%u02C5
+%u02C6
+%u02C7
+%u02C8
+%u02C9
+%u02CA
+%u02CB
+%u02CC
+%u02CD
+%u02CE
+%u02CF
+%u02D0
+%u02D1
+%u02D2
+%u02D3
+%u02D4
+%u02D5
+%u02D6
+%u02D7
+%u02D8
+%u02D9
+%u02DA
+%u02DB
+%u02DC
+%u02DD
+%u02DE
+%u02DF
+%u02E0
+%u02E1
+%u02E2
+%u02E3
+%u02E4
+%u02E5
+%u02E6
+%u02E7
+%u02E8
+%u02E9
+%u02EA
+%u02EB
+%u02EC
+%u02ED
+%u02EE
+%u02EF
+%u02F0
+%u02F1
+%u02F2
+%u02F3
+%u02F4
+%u02F5
+%u02F6
+%u02F7
+%u02F8
+%u02F9
+%u02FA
+%u02FB
+%u02FC
+%u02FD
+%u02FE
+%u02FF
+%u0300
+%u0301
+%u0302
+%u0303
+%u0304
+%u0305
+%u0306
+%u0307
+%u0308
+%u0309
+%u030A
+%u030B
+%u030C
+%u030D
+%u030E
+%u030F
+%u0310
+%u0311
+%u0312
+%u0313
+%u0314
+%u0315
+%u0316
+%u0317
+%u0318
+%u0319
+%u031A
+%u031B
+%u031C
+%u031D
+%u031E
+%u031F
+%u0320
+%u0321
+%u0322
+%u0323
+%u0324
+%u0325
+%u0326
+%u0327
+%u0328
+%u0329
+%u032A
+%u032B
+%u032C
+%u032D
+%u032E
+%u032F
+%u0330
+%u0331
+%u0332
+%u0333
+%u0334
+%u0335
+%u0336
+%u0337
+%u0338
+%u0339
+%u033A
+%u033B
+%u033C
+%u033D
+%u033E
+%u033F
+%u0340
+%u0341
+%u0342
+%u0343
+%u0344
+%u0345
+%u0346
+%u0347
+%u0348
+%u0349
+%u034A
+%u034B
+%u034C
+%u034D
+%u034E
+%u034F
+%u0350
+%u0351
+%u0352
+%u0353
+%u0354
+%u0355
+%u0356
+%u0357
+%u0358
+%u0359
+%u035A
+%u035B
+%u035C
+%u035D
+%u035E
+%u035F
+%u0360
+%u0361
+%u0362
+%u0363
+%u0364
+%u0365
+%u0366
+%u0367
+%u0368
+%u0369
+%u036A
+%u036B
+%u036C
+%u036D
+%u036E
+%u036F
+%u0370
+%u0371
+%u0372
+%u0373
+%u0374
+%u0375
+%u0376
+%u0377
+%u0378
+%u0379
+%u037A
+%u037B
+%u037C
+%u037D
+%u037E
+%u037F
+%u0380
+%u0381
+%u0382
+%u0383
+%u0384
+%u0385
+%u0386
+%u0387
+%u0388
+%u0389
+%u038A
+%u038B
+%u038C
+%u038D
+%u038E
+%u038F
+%u0390
+%u0391
+%u0392
+%u0393
+%u0394
+%u0395
+%u0396
+%u0397
+%u0398
+%u0399
+%u039A
+%u039B
+%u039C
+%u039D
+%u039E
+%u039F
+%u03A0
+%u03A1
+%u03A2
+%u03A3
+%u03A4
+%u03A5
+%u03A6
+%u03A7
+%u03A8
+%u03A9
+%u03AA
+%u03AB
+%u03AC
+%u03AD
+%u03AE
+%u03AF
+%u03B0
+%u03B1
+%u03B2
+%u03B3
+%u03B4
+%u03B5
+%u03B6
+%u03B7
+%u03B8
+%u03B9
+%u03BA
+%u03BB
+%u03BC
+%u03BD
+%u03BE
+%u03BF
+%u03C0
+%u03C1
+%u03C2
+%u03C3
+%u03C4
+%u03C5
+%u03C6
+%u03C7
+%u03C8
+%u03C9
+%u03CA
+%u03CB
+%u03CC
+%u03CD
+%u03CE
+%u03CF
+%u03D0
+%u03D1
+%u03D2
+%u03D3
+%u03D4
+%u03D5
+%u03D6
+%u03D7
+%u03D8
+%u03D9
+%u03DA
+%u03DB
+%u03DC
+%u03DD
+%u03DE
+%u03DF
+%u03E0
+%u03E1
+%u03E2
+%u03E3
+%u03E4
+%u03E5
+%u03E6
+%u03E7
+%u03E8
+%u03E9
+%u03EA
+%u03EB
+%u03EC
+%u03ED
+%u03EE
+%u03EF
+%u03F0
+%u03F1
+%u03F2
+%u03F3
+%u03F4
+%u03F5
+%u03F6
+%u03F7
+%u03F8
+%u03F9
+%u03FA
+%u03FB
+%u03FC
+%u03FD
+%u03FE
+%u03FF
+%u0400
+%u0401
+%u0402
+%u0403
+%u0404
+%u0405
+%u0406
+%u0407
+%u0408
+%u0409
+%u040A
+%u040B
+%u040C
+%u040D
+%u040E
+%u040F
+%u0410
+%u0411
+%u0412
+%u0413
+%u0414
+%u0415
+%u0416
+%u0417
+%u0418
+%u0419
+%u041A
+%u041B
+%u041C
+%u041D
+%u041E
+%u041F
+%u0420
+%u0421
+%u0422
+%u0423
+%u0424
+%u0425
+%u0426
+%u0427
+%u0428
+%u0429
+%u042A
+%u042B
+%u042C
+%u042D
+%u042E
+%u042F
+%u0430
+%u0431
+%u0432
+%u0433
+%u0434
+%u0435
+%u0436
+%u0437
+%u0438
+%u0439
+%u043A
+%u043B
+%u043C
+%u043D
+%u043E
+%u043F
+%u0440
+%u0441
+%u0442
+%u0443
+%u0444
+%u0445
+%u0446
+%u0447
+%u0448
+%u0449
+%u044A
+%u044B
+%u044C
+%u044D
+%u044E
+%u044F
+%u0450
+%u0451
+%u0452
+%u0453
+%u0454
+%u0455
+%u0456
+%u0457
+%u0458
+%u0459
+%u045A
+%u045B
+%u045C
+%u045D
+%u045E
+%u045F
+%u0460
+%u0461
+%u0462
+%u0463
+%u0464
+%u0465
+%u0466
+%u0467
+%u0468
+%u0469
+%u046A
+%u046B
+%u046C
+%u046D
+%u046E
+%u046F
+%u0470
+%u0471
+%u0472
+%u0473
+%u0474
+%u0475
+%u0476
+%u0477
+%u0478
+%u0479
+%u047A
+%u047B
+%u047C
+%u047D
+%u047E
+%u047F
+%u0480
+%u0481
+%u0482
+%u0483
+%u0484
+%u0485
+%u0486
+%u0487
+%u0488
+%u0489
+%u048A
+%u048B
+%u048C
+%u048D
+%u048E
+%u048F
+%u0490
+%u0491
+%u0492
+%u0493
+%u0494
+%u0495
+%u0496
+%u0497
+%u0498
+%u0499
+%u049A
+%u049B
+%u049C
+%u049D
+%u049E
+%u049F
+%u04A0
+%u04A1
+%u04A2
+%u04A3
+%u04A4
+%u04A5
+%u04A6
+%u04A7
+%u04A8
+%u04A9
+%u04AA
+%u04AB
+%u04AC
+%u04AD
+%u04AE
+%u04AF
+%u04B0
+%u04B1
+%u04B2
+%u04B3
+%u04B4
+%u04B5
+%u04B6
+%u04B7
+%u04B8
+%u04B9
+%u04BA
+%u04BB
+%u04BC
+%u04BD
+%u04BE
+%u04BF
+%u04C0
+%u04C1
+%u04C2
+%u04C3
+%u04C4
+%u04C5
+%u04C6
+%u04C7
+%u04C8
+%u04C9
+%u04CA
+%u04CB
+%u04CC
+%u04CD
+%u04CE
+%u04CF
+%u04D0
+%u04D1
+%u04D2
+%u04D3
+%u04D4
+%u04D5
+%u04D6
+%u04D7
+%u04D8
+%u04D9
+%u04DA
+%u04DB
+%u04DC
+%u04DD
+%u04DE
+%u04DF
+%u04E0
+%u04E1
+%u04E2
+%u04E3
+%u04E4
+%u04E5
+%u04E6
+%u04E7
+%u04E8
+%u04E9
+%u04EA
+%u04EB
+%u04EC
+%u04ED
+%u04EE
+%u04EF
+%u04F0
+%u04F1
+%u04F2
+%u04F3
+%u04F4
+%u04F5
+%u04F6
+%u04F7
+%u04F8
+%u04F9
+%u04FA
+%u04FB
+%u04FC
+%u04FD
+%u04FE
+%u04FF
+%u0500
+%u0501
+%u0502
+%u0503
+%u0504
+%u0505
+%u0506
+%u0507
+%u0508
+%u0509
+%u050A
+%u050B
+%u050C
+%u050D
+%u050E
+%u050F
+%u0510
+%u0511
+%u0512
+%u0513
+%u0514
+%u0515
+%u0516
+%u0517
+%u0518
+%u0519
+%u051A
+%u051B
+%u051C
+%u051D
+%u051E
+%u051F
+%u0520
+%u0521
+%u0522
+%u0523
+%u0524
+%u0525
+%u0526
+%u0527
+%u0528
+%u0529
+%u052A
+%u052B
+%u052C
+%u052D
+%u052E
+%u052F
+%u0530
+%u0531
+%u0532
+%u0533
+%u0534
+%u0535
+%u0536
+%u0537
+%u0538
+%u0539
+%u053A
+%u053B
+%u053C
+%u053D
+%u053E
+%u053F
+%u0540
+%u0541
+%u0542
+%u0543
+%u0544
+%u0545
+%u0546
+%u0547
+%u0548
+%u0549
+%u054A
+%u054B
+%u054C
+%u054D
+%u054E
+%u054F
+%u0550
+%u0551
+%u0552
+%u0553
+%u0554
+%u0555
+%u0556
+%u0557
+%u0558
+%u0559
+%u055A
+%u055B
+%u055C
+%u055D
+%u055E
+%u055F
+%u0560
+%u0561
+%u0562
+%u0563
+%u0564
+%u0565
+%u0566
+%u0567
+%u0568
+%u0569
+%u056A
+%u056B
+%u056C
+%u056D
+%u056E
+%u056F
+%u0570
+%u0571
+%u0572
+%u0573
+%u0574
+%u0575
+%u0576
+%u0577
+%u0578
+%u0579
+%u057A
+%u057B
+%u057C
+%u057D
+%u057E
+%u057F
+%u0580
+%u0581
+%u0582
+%u0583
+%u0584
+%u0585
+%u0586
+%u0587
+%u0588
+%u0589
+%u058A
+%u058B
+%u058C
+%u058D
+%u058E
+%u058F
+%u0590
+%u0591
+%u0592
+%u0593
+%u0594
+%u0595
+%u0596
+%u0597
+%u0598
+%u0599
+%u059A
+%u059B
+%u059C
+%u059D
+%u059E
+%u059F
+%u05A0
+%u05A1
+%u05A2
+%u05A3
+%u05A4
+%u05A5
+%u05A6
+%u05A7
+%u05A8
+%u05A9
+%u05AA
+%u05AB
+%u05AC
+%u05AD
+%u05AE
+%u05AF
+%u05B0
+%u05B1
+%u05B2
+%u05B3
+%u05B4
+%u05B5
+%u05B6
+%u05B7
+%u05B8
+%u05B9
+%u05BA
+%u05BB
+%u05BC
+%u05BD
+%u05BE
+%u05BF
+%u05C0
+%u05C1
+%u05C2
+%u05C3
+%u05C4
+%u05C5
+%u05C6
+%u05C7
+%u05C8
+%u05C9
+%u05CA
+%u05CB
+%u05CC
+%u05CD
+%u05CE
+%u05CF
+%u05D0
+%u05D1
+%u05D2
+%u05D3
+%u05D4
+%u05D5
+%u05D6
+%u05D7
+%u05D8
+%u05D9
+%u05DA
+%u05DB
+%u05DC
+%u05DD
+%u05DE
+%u05DF
+%u05E0
+%u05E1
+%u05E2
+%u05E3
+%u05E4
+%u05E5
+%u05E6
+%u05E7
+%u05E8
+%u05E9
+%u05EA
+%u05EB
+%u05EC
+%u05ED
+%u05EE
+%u05EF
+%u05F0
+%u05F1
+%u05F2
+%u05F3
+%u05F4
+%u05F5
+%u05F6
+%u05F7
+%u05F8
+%u05F9
+%u05FA
+%u05FB
+%u05FC
+%u05FD
+%u05FE
+%u05FF
+%u0600
+%u0601
+%u0602
+%u0603
+%u0604
+%u0605
+%u0606
+%u0607
+%u0608
+%u0609
+%u060A
+%u060B
+%u060C
+%u060D
+%u060E
+%u060F
+%u0610
+%u0611
+%u0612
+%u0613
+%u0614
+%u0615
+%u0616
+%u0617
+%u0618
+%u0619
+%u061A
+%u061B
+%u061C
+%u061D
+%u061E
+%u061F
+%u0620
+%u0621
+%u0622
+%u0623
+%u0624
+%u0625
+%u0626
+%u0627
+%u0628
+%u0629
+%u062A
+%u062B
+%u062C
+%u062D
+%u062E
+%u062F
+%u0630
+%u0631
+%u0632
+%u0633
+%u0634
+%u0635
+%u0636
+%u0637
+%u0638
+%u0639
+%u063A
+%u063B
+%u063C
+%u063D
+%u063E
+%u063F
+%u0640
+%u0641
+%u0642
+%u0643
+%u0644
+%u0645
+%u0646
+%u0647
+%u0648
+%u0649
+%u064A
+%u064B
+%u064C
+%u064D
+%u064E
+%u064F
+%u0650
+%u0651
+%u0652
+%u0653
+%u0654
+%u0655
+%u0656
+%u0657
+%u0658
+%u0659
+%u065A
+%u065B
+%u065C
+%u065D
+%u065E
+%u065F
+%u0660
+%u0661
+%u0662
+%u0663
+%u0664
+%u0665
+%u0666
+%u0667
+%u0668
+%u0669
+%u066A
+%u066B
+%u066C
+%u066D
+%u066E
+%u066F
+%u0670
+%u0671
+%u0672
+%u0673
+%u0674
+%u0675
+%u0676
+%u0677
+%u0678
+%u0679
+%u067A
+%u067B
+%u067C
+%u067D
+%u067E
+%u067F
+%u0680
+%u0681
+%u0682
+%u0683
+%u0684
+%u0685
+%u0686
+%u0687
+%u0688
+%u0689
+%u068A
+%u068B
+%u068C
+%u068D
+%u068E
+%u068F
+%u0690
+%u0691
+%u0692
+%u0693
+%u0694
+%u0695
+%u0696
+%u0697
+%u0698
+%u0699
+%u069A
+%u069B
+%u069C
+%u069D
+%u069E
+%u069F
+%u06A0
+%u06A1
+%u06A2
+%u06A3
+%u06A4
+%u06A5
+%u06A6
+%u06A7
+%u06A8
+%u06A9
+%u06AA
+%u06AB
+%u06AC
+%u06AD
+%u06AE
+%u06AF
+%u06B0
+%u06B1
+%u06B2
+%u06B3
+%u06B4
+%u06B5
+%u06B6
+%u06B7
+%u06B8
+%u06B9
+%u06BA
+%u06BB
+%u06BC
+%u06BD
+%u06BE
+%u06BF
+%u06C0
+%u06C1
+%u06C2
+%u06C3
+%u06C4
+%u06C5
+%u06C6
+%u06C7
+%u06C8
+%u06C9
+%u06CA
+%u06CB
+%u06CC
+%u06CD
+%u06CE
+%u06CF
+%u06D0
+%u06D1
+%u06D2
+%u06D3
+%u06D4
+%u06D5
+%u06D6
+%u06D7
+%u06D8
+%u06D9
+%u06DA
+%u06DB
+%u06DC
+%u06DD
+%u06DE
+%u06DF
+%u06E0
+%u06E1
+%u06E2
+%u06E3
+%u06E4
+%u06E5
+%u06E6
+%u06E7
+%u06E8
+%u06E9
+%u06EA
+%u06EB
+%u06EC
+%u06ED
+%u06EE
+%u06EF
+%u06F0
+%u06F1
+%u06F2
+%u06F3
+%u06F4
+%u06F5
+%u06F6
+%u06F7
+%u06F8
+%u06F9
+%u06FA
+%u06FB
+%u06FC
+%u06FD
+%u06FE
+%u06FF
+%u0700
+%u0701
+%u0702
+%u0703
+%u0704
+%u0705
+%u0706
+%u0707
+%u0708
+%u0709
+%u070A
+%u070B
+%u070C
+%u070D
+%u070E
+%u070F
+%u0710
+%u0711
+%u0712
+%u0713
+%u0714
+%u0715
+%u0716
+%u0717
+%u0718
+%u0719
+%u071A
+%u071B
+%u071C
+%u071D
+%u071E
+%u071F
+%u0720
+%u0721
+%u0722
+%u0723
+%u0724
+%u0725
+%u0726
+%u0727
+%u0728
+%u0729
+%u072A
+%u072B
+%u072C
+%u072D
+%u072E
+%u072F
+%u0730
+%u0731
+%u0732
+%u0733
+%u0734
+%u0735
+%u0736
+%u0737
+%u0738
+%u0739
+%u073A
+%u073B
+%u073C
+%u073D
+%u073E
+%u073F
+%u0740
+%u0741
+%u0742
+%u0743
+%u0744
+%u0745
+%u0746
+%u0747
+%u0748
+%u0749
+%u074A
+%u074B
+%u074C
+%u074D
+%u074E
+%u074F
+%u0750
+%u0751
+%u0752
+%u0753
+%u0754
+%u0755
+%u0756
+%u0757
+%u0758
+%u0759
+%u075A
+%u075B
+%u075C
+%u075D
+%u075E
+%u075F
+%u0760
+%u0761
+%u0762
+%u0763
+%u0764
+%u0765
+%u0766
+%u0767
+%u0768
+%u0769
+%u076A
+%u076B
+%u076C
+%u076D
+%u076E
+%u076F
+%u0770
+%u0771
+%u0772
+%u0773
+%u0774
+%u0775
+%u0776
+%u0777
+%u0778
+%u0779
+%u077A
+%u077B
+%u077C
+%u077D
+%u077E
+%u077F
+%u0780
+%u0781
+%u0782
+%u0783
+%u0784
+%u0785
+%u0786
+%u0787
+%u0788
+%u0789
+%u078A
+%u078B
+%u078C
+%u078D
+%u078E
+%u078F
+%u0790
+%u0791
+%u0792
+%u0793
+%u0794
+%u0795
+%u0796
+%u0797
+%u0798
+%u0799
+%u079A
+%u079B
+%u079C
+%u079D
+%u079E
+%u079F
+%u07A0
+%u07A1
+%u07A2
+%u07A3
+%u07A4
+%u07A5
+%u07A6
+%u07A7
+%u07A8
+%u07A9
+%u07AA
+%u07AB
+%u07AC
+%u07AD
+%u07AE
+%u07AF
+%u07B0
+%u07B1
+%u07B2
+%u07B3
+%u07B4
+%u07B5
+%u07B6
+%u07B7
+%u07B8
+%u07B9
+%u07BA
+%u07BB
+%u07BC
+%u07BD
+%u07BE
+%u07BF
+%u07C0
+%u07C1
+%u07C2
+%u07C3
+%u07C4
+%u07C5
+%u07C6
+%u07C7
+%u07C8
+%u07C9
+%u07CA
+%u07CB
+%u07CC
+%u07CD
+%u07CE
+%u07CF
+%u07D0
+%u07D1
+%u07D2
+%u07D3
+%u07D4
+%u07D5
+%u07D6
+%u07D7
+%u07D8
+%u07D9
+%u07DA
+%u07DB
+%u07DC
+%u07DD
+%u07DE
+%u07DF
+%u07E0
+%u07E1
+%u07E2
+%u07E3
+%u07E4
+%u07E5
+%u07E6
+%u07E7
+%u07E8
+%u07E9
+%u07EA
+%u07EB
+%u07EC
+%u07ED
+%u07EE
+%u07EF
+%u07F0
+%u07F1
+%u07F2
+%u07F3
+%u07F4
+%u07F5
+%u07F6
+%u07F7
+%u07F8
+%u07F9
+%u07FA
+%u07FB
+%u07FC
+%u07FD
+%u07FE
+%u07FF
+%u0800
+%u0801
+%u0802
+%u0803
+%u0804
+%u0805
+%u0806
+%u0807
+%u0808
+%u0809
+%u080A
+%u080B
+%u080C
+%u080D
+%u080E
+%u080F
+%u0810
+%u0811
+%u0812
+%u0813
+%u0814
+%u0815
+%u0816
+%u0817
+%u0818
+%u0819
+%u081A
+%u081B
+%u081C
+%u081D
+%u081E
+%u081F
+%u0820
+%u0821
+%u0822
+%u0823
+%u0824
+%u0825
+%u0826
+%u0827
+%u0828
+%u0829
+%u082A
+%u082B
+%u082C
+%u082D
+%u082E
+%u082F
+%u0830
+%u0831
+%u0832
+%u0833
+%u0834
+%u0835
+%u0836
+%u0837
+%u0838
+%u0839
+%u083A
+%u083B
+%u083C
+%u083D
+%u083E
+%u083F
+%u0840
+%u0841
+%u0842
+%u0843
+%u0844
+%u0845
+%u0846
+%u0847
+%u0848
+%u0849
+%u084A
+%u084B
+%u084C
+%u084D
+%u084E
+%u084F
+%u0850
+%u0851
+%u0852
+%u0853
+%u0854
+%u0855
+%u0856
+%u0857
+%u0858
+%u0859
+%u085A
+%u085B
+%u085C
+%u085D
+%u085E
+%u085F
+%u0860
+%u0861
+%u0862
+%u0863
+%u0864
+%u0865
+%u0866
+%u0867
+%u0868
+%u0869
+%u086A
+%u086B
+%u086C
+%u086D
+%u086E
+%u086F
+%u0870
+%u0871
+%u0872
+%u0873
+%u0874
+%u0875
+%u0876
+%u0877
+%u0878
+%u0879
+%u087A
+%u087B
+%u087C
+%u087D
+%u087E
+%u087F
+%u0880
+%u0881
+%u0882
+%u0883
+%u0884
+%u0885
+%u0886
+%u0887
+%u0888
+%u0889
+%u088A
+%u088B
+%u088C
+%u088D
+%u088E
+%u088F
+%u0890
+%u0891
+%u0892
+%u0893
+%u0894
+%u0895
+%u0896
+%u0897
+%u0898
+%u0899
+%u089A
+%u089B
+%u089C
+%u089D
+%u089E
+%u089F
+%u08A0
+%u08A1
+%u08A2
+%u08A3
+%u08A4
+%u08A5
+%u08A6
+%u08A7
+%u08A8
+%u08A9
+%u08AA
+%u08AB
+%u08AC
+%u08AD
+%u08AE
+%u08AF
+%u08B0
+%u08B1
+%u08B2
+%u08B3
+%u08B4
+%u08B5
+%u08B6
+%u08B7
+%u08B8
+%u08B9
+%u08BA
+%u08BB
+%u08BC
+%u08BD
+%u08BE
+%u08BF
+%u08C0
+%u08C1
+%u08C2
+%u08C3
+%u08C4
+%u08C5
+%u08C6
+%u08C7
+%u08C8
+%u08C9
+%u08CA
+%u08CB
+%u08CC
+%u08CD
+%u08CE
+%u08CF
+%u08D0
+%u08D1
+%u08D2
+%u08D3
+%u08D4
+%u08D5
+%u08D6
+%u08D7
+%u08D8
+%u08D9
+%u08DA
+%u08DB
+%u08DC
+%u08DD
+%u08DE
+%u08DF
+%u08E0
+%u08E1
+%u08E2
+%u08E3
+%u08E4
+%u08E5
+%u08E6
+%u08E7
+%u08E8
+%u08E9
+%u08EA
+%u08EB
+%u08EC
+%u08ED
+%u08EE
+%u08EF
+%u08F0
+%u08F1
+%u08F2
+%u08F3
+%u08F4
+%u08F5
+%u08F6
+%u08F7
+%u08F8
+%u08F9
+%u08FA
+%u08FB
+%u08FC
+%u08FD
+%u08FE
+%u08FF
+%u0900
+%u0901
+%u0902
+%u0903
+%u0904
+%u0905
+%u0906
+%u0907
+%u0908
+%u0909
+%u090A
+%u090B
+%u090C
+%u090D
+%u090E
+%u090F
+%u0910
+%u0911
+%u0912
+%u0913
+%u0914
+%u0915
+%u0916
+%u0917
+%u0918
+%u0919
+%u091A
+%u091B
+%u091C
+%u091D
+%u091E
+%u091F
+%u0920
+%u0921
+%u0922
+%u0923
+%u0924
+%u0925
+%u0926
+%u0927
+%u0928
+%u0929
+%u092A
+%u092B
+%u092C
+%u092D
+%u092E
+%u092F
+%u0930
+%u0931
+%u0932
+%u0933
+%u0934
+%u0935
+%u0936
+%u0937
+%u0938
+%u0939
+%u093A
+%u093B
+%u093C
+%u093D
+%u093E
+%u093F
+%u0940
+%u0941
+%u0942
+%u0943
+%u0944
+%u0945
+%u0946
+%u0947
+%u0948
+%u0949
+%u094A
+%u094B
+%u094C
+%u094D
+%u094E
+%u094F
+%u0950
+%u0951
+%u0952
+%u0953
+%u0954
+%u0955
+%u0956
+%u0957
+%u0958
+%u0959
+%u095A
+%u095B
+%u095C
+%u095D
+%u095E
+%u095F
+%u0960
+%u0961
+%u0962
+%u0963
+%u0964
+%u0965
+%u0966
+%u0967
+%u0968
+%u0969
+%u096A
+%u096B
+%u096C
+%u096D
+%u096E
+%u096F
+%u0970
+%u0971
+%u0972
+%u0973
+%u0974
+%u0975
+%u0976
+%u0977
+%u0978
+%u0979
+%u097A
+%u097B
+%u097C
+%u097D
+%u097E
+%u097F
+%u0980
+%u0981
+%u0982
+%u0983
+%u0984
+%u0985
+%u0986
+%u0987
+%u0988
+%u0989
+%u098A
+%u098B
+%u098C
+%u098D
+%u098E
+%u098F
+%u0990
+%u0991
+%u0992
+%u0993
+%u0994
+%u0995
+%u0996
+%u0997
+%u0998
+%u0999
+%u099A
+%u099B
+%u099C
+%u099D
+%u099E
+%u099F
+%u09A0
+%u09A1
+%u09A2
+%u09A3
+%u09A4
+%u09A5
+%u09A6
+%u09A7
+%u09A8
+%u09A9
+%u09AA
+%u09AB
+%u09AC
+%u09AD
+%u09AE
+%u09AF
+%u09B0
+%u09B1
+%u09B2
+%u09B3
+%u09B4
+%u09B5
+%u09B6
+%u09B7
+%u09B8
+%u09B9
+%u09BA
+%u09BB
+%u09BC
+%u09BD
+%u09BE
+%u09BF
+%u09C0
+%u09C1
+%u09C2
+%u09C3
+%u09C4
+%u09C5
+%u09C6
+%u09C7
+%u09C8
+%u09C9
+%u09CA
+%u09CB
+%u09CC
+%u09CD
+%u09CE
+%u09CF
+%u09D0
+%u09D1
+%u09D2
+%u09D3
+%u09D4
+%u09D5
+%u09D6
+%u09D7
+%u09D8
+%u09D9
+%u09DA
+%u09DB
+%u09DC
+%u09DD
+%u09DE
+%u09DF
+%u09E0
+%u09E1
+%u09E2
+%u09E3
+%u09E4
+%u09E5
+%u09E6
+%u09E7
+%u09E8
+%u09E9
+%u09EA
+%u09EB
+%u09EC
+%u09ED
+%u09EE
+%u09EF
+%u09F0
+%u09F1
+%u09F2
+%u09F3
+%u09F4
+%u09F5
+%u09F6
+%u09F7
+%u09F8
+%u09F9
+%u09FA
+%u09FB
+%u09FC
+%u09FD
+%u09FE
+%u09FF
+%u0A00
+%u0A01
+%u0A02
+%u0A03
+%u0A04
+%u0A05
+%u0A06
+%u0A07
+%u0A08
+%u0A09
+%u0A0A
+%u0A0B
+%u0A0C
+%u0A0D
+%u0A0E
+%u0A0F
+%u0A10
+%u0A11
+%u0A12
+%u0A13
+%u0A14
+%u0A15
+%u0A16
+%u0A17
+%u0A18
+%u0A19
+%u0A1A
+%u0A1B
+%u0A1C
+%u0A1D
+%u0A1E
+%u0A1F
+%u0A20
+%u0A21
+%u0A22
+%u0A23
+%u0A24
+%u0A25
+%u0A26
+%u0A27
+%u0A28
+%u0A29
+%u0A2A
+%u0A2B
+%u0A2C
+%u0A2D
+%u0A2E
+%u0A2F
+%u0A30
+%u0A31
+%u0A32
+%u0A33
+%u0A34
+%u0A35
+%u0A36
+%u0A37
+%u0A38
+%u0A39
+%u0A3A
+%u0A3B
+%u0A3C
+%u0A3D
+%u0A3E
+%u0A3F
+%u0A40
+%u0A41
+%u0A42
+%u0A43
+%u0A44
+%u0A45
+%u0A46
+%u0A47
+%u0A48
+%u0A49
+%u0A4A
+%u0A4B
+%u0A4C
+%u0A4D
+%u0A4E
+%u0A4F
+%u0A50
+%u0A51
+%u0A52
+%u0A53
+%u0A54
+%u0A55
+%u0A56
+%u0A57
+%u0A58
+%u0A59
+%u0A5A
+%u0A5B
+%u0A5C
+%u0A5D
+%u0A5E
+%u0A5F
+%u0A60
+%u0A61
+%u0A62
+%u0A63
+%u0A64
+%u0A65
+%u0A66
+%u0A67
+%u0A68
+%u0A69
+%u0A6A
+%u0A6B
+%u0A6C
+%u0A6D
+%u0A6E
+%u0A6F
+%u0A70
+%u0A71
+%u0A72
+%u0A73
+%u0A74
+%u0A75
+%u0A76
+%u0A77
+%u0A78
+%u0A79
+%u0A7A
+%u0A7B
+%u0A7C
+%u0A7D
+%u0A7E
+%u0A7F
+%u0A80
+%u0A81
+%u0A82
+%u0A83
+%u0A84
+%u0A85
+%u0A86
+%u0A87
+%u0A88
+%u0A89
+%u0A8A
+%u0A8B
+%u0A8C
+%u0A8D
+%u0A8E
+%u0A8F
+%u0A90
+%u0A91
+%u0A92
+%u0A93
+%u0A94
+%u0A95
+%u0A96
+%u0A97
+%u0A98
+%u0A99
+%u0A9A
+%u0A9B
+%u0A9C
+%u0A9D
+%u0A9E
+%u0A9F
+%u0AA0
+%u0AA1
+%u0AA2
+%u0AA3
+%u0AA4
+%u0AA5
+%u0AA6
+%u0AA7
+%u0AA8
+%u0AA9
+%u0AAA
+%u0AAB
+%u0AAC
+%u0AAD
+%u0AAE
+%u0AAF
+%u0AB0
+%u0AB1
+%u0AB2
+%u0AB3
+%u0AB4
+%u0AB5
+%u0AB6
+%u0AB7
+%u0AB8
+%u0AB9
+%u0ABA
+%u0ABB
+%u0ABC
+%u0ABD
+%u0ABE
+%u0ABF
+%u0AC0
+%u0AC1
+%u0AC2
+%u0AC3
+%u0AC4
+%u0AC5
+%u0AC6
+%u0AC7
+%u0AC8
+%u0AC9
+%u0ACA
+%u0ACB
+%u0ACC
+%u0ACD
+%u0ACE
+%u0ACF
+%u0AD0
+%u0AD1
+%u0AD2
+%u0AD3
+%u0AD4
+%u0AD5
+%u0AD6
+%u0AD7
+%u0AD8
+%u0AD9
+%u0ADA
+%u0ADB
+%u0ADC
+%u0ADD
+%u0ADE
+%u0ADF
+%u0AE0
+%u0AE1
+%u0AE2
+%u0AE3
+%u0AE4
+%u0AE5
+%u0AE6
+%u0AE7
+%u0AE8
+%u0AE9
+%u0AEA
+%u0AEB
+%u0AEC
+%u0AED
+%u0AEE
+%u0AEF
+%u0AF0
+%u0AF1
+%u0AF2
+%u0AF3
+%u0AF4
+%u0AF5
+%u0AF6
+%u0AF7
+%u0AF8
+%u0AF9
+%u0AFA
+%u0AFB
+%u0AFC
+%u0AFD
+%u0AFE
+%u0AFF
+%u0B00
+%u0B01
+%u0B02
+%u0B03
+%u0B04
+%u0B05
+%u0B06
+%u0B07
+%u0B08
+%u0B09
+%u0B0A
+%u0B0B
+%u0B0C
+%u0B0D
+%u0B0E
+%u0B0F
+%u0B10
+%u0B11
+%u0B12
+%u0B13
+%u0B14
+%u0B15
+%u0B16
+%u0B17
+%u0B18
+%u0B19
+%u0B1A
+%u0B1B
+%u0B1C
+%u0B1D
+%u0B1E
+%u0B1F
+%u0B20
+%u0B21
+%u0B22
+%u0B23
+%u0B24
+%u0B25
+%u0B26
+%u0B27
+%u0B28
+%u0B29
+%u0B2A
+%u0B2B
+%u0B2C
+%u0B2D
+%u0B2E
+%u0B2F
+%u0B30
+%u0B31
+%u0B32
+%u0B33
+%u0B34
+%u0B35
+%u0B36
+%u0B37
+%u0B38
+%u0B39
+%u0B3A
+%u0B3B
+%u0B3C
+%u0B3D
+%u0B3E
+%u0B3F
+%u0B40
+%u0B41
+%u0B42
+%u0B43
+%u0B44
+%u0B45
+%u0B46
+%u0B47
+%u0B48
+%u0B49
+%u0B4A
+%u0B4B
+%u0B4C
+%u0B4D
+%u0B4E
+%u0B4F
+%u0B50
+%u0B51
+%u0B52
+%u0B53
+%u0B54
+%u0B55
+%u0B56
+%u0B57
+%u0B58
+%u0B59
+%u0B5A
+%u0B5B
+%u0B5C
+%u0B5D
+%u0B5E
+%u0B5F
+%u0B60
+%u0B61
+%u0B62
+%u0B63
+%u0B64
+%u0B65
+%u0B66
+%u0B67
+%u0B68
+%u0B69
+%u0B6A
+%u0B6B
+%u0B6C
+%u0B6D
+%u0B6E
+%u0B6F
+%u0B70
+%u0B71
+%u0B72
+%u0B73
+%u0B74
+%u0B75
+%u0B76
+%u0B77
+%u0B78
+%u0B79
+%u0B7A
+%u0B7B
+%u0B7C
+%u0B7D
+%u0B7E
+%u0B7F
+%u0B80
+%u0B81
+%u0B82
+%u0B83
+%u0B84
+%u0B85
+%u0B86
+%u0B87
+%u0B88
+%u0B89
+%u0B8A
+%u0B8B
+%u0B8C
+%u0B8D
+%u0B8E
+%u0B8F
+%u0B90
+%u0B91
+%u0B92
+%u0B93
+%u0B94
+%u0B95
+%u0B96
+%u0B97
+%u0B98
+%u0B99
+%u0B9A
+%u0B9B
+%u0B9C
+%u0B9D
+%u0B9E
+%u0B9F
+%u0BA0
+%u0BA1
+%u0BA2
+%u0BA3
+%u0BA4
+%u0BA5
+%u0BA6
+%u0BA7
+%u0BA8
+%u0BA9
+%u0BAA
+%u0BAB
+%u0BAC
+%u0BAD
+%u0BAE
+%u0BAF
+%u0BB0
+%u0BB1
+%u0BB2
+%u0BB3
+%u0BB4
+%u0BB5
+%u0BB6
+%u0BB7
+%u0BB8
+%u0BB9
+%u0BBA
+%u0BBB
+%u0BBC
+%u0BBD
+%u0BBE
+%u0BBF
+%u0BC0
+%u0BC1
+%u0BC2
+%u0BC3
+%u0BC4
+%u0BC5
+%u0BC6
+%u0BC7
+%u0BC8
+%u0BC9
+%u0BCA
+%u0BCB
+%u0BCC
+%u0BCD
+%u0BCE
+%u0BCF
+%u0BD0
+%u0BD1
+%u0BD2
+%u0BD3
+%u0BD4
+%u0BD5
+%u0BD6
+%u0BD7
+%u0BD8
+%u0BD9
+%u0BDA
+%u0BDB
+%u0BDC
+%u0BDD
+%u0BDE
+%u0BDF
+%u0BE0
+%u0BE1
+%u0BE2
+%u0BE3
+%u0BE4
+%u0BE5
+%u0BE6
+%u0BE7
+%u0BE8
+%u0BE9
+%u0BEA
+%u0BEB
+%u0BEC
+%u0BED
+%u0BEE
+%u0BEF
+%u0BF0
+%u0BF1
+%u0BF2
+%u0BF3
+%u0BF4
+%u0BF5
+%u0BF6
+%u0BF7
+%u0BF8
+%u0BF9
+%u0BFA
+%u0BFB
+%u0BFC
+%u0BFD
+%u0BFE
+%u0BFF
+%u0C00
+%u0C01
+%u0C02
+%u0C03
+%u0C04
+%u0C05
+%u0C06
+%u0C07
+%u0C08
+%u0C09
+%u0C0A
+%u0C0B
+%u0C0C
+%u0C0D
+%u0C0E
+%u0C0F
+%u0C10
+%u0C11
+%u0C12
+%u0C13
+%u0C14
+%u0C15
+%u0C16
+%u0C17
+%u0C18
+%u0C19
+%u0C1A
+%u0C1B
+%u0C1C
+%u0C1D
+%u0C1E
+%u0C1F
+%u0C20
+%u0C21
+%u0C22
+%u0C23
+%u0C24
+%u0C25
+%u0C26
+%u0C27
+%u0C28
+%u0C29
+%u0C2A
+%u0C2B
+%u0C2C
+%u0C2D
+%u0C2E
+%u0C2F
+%u0C30
+%u0C31
+%u0C32
+%u0C33
+%u0C34
+%u0C35
+%u0C36
+%u0C37
+%u0C38
+%u0C39
+%u0C3A
+%u0C3B
+%u0C3C
+%u0C3D
+%u0C3E
+%u0C3F
+%u0C40
+%u0C41
+%u0C42
+%u0C43
+%u0C44
+%u0C45
+%u0C46
+%u0C47
+%u0C48
+%u0C49
+%u0C4A
+%u0C4B
+%u0C4C
+%u0C4D
+%u0C4E
+%u0C4F
+%u0C50
+%u0C51
+%u0C52
+%u0C53
+%u0C54
+%u0C55
+%u0C56
+%u0C57
+%u0C58
+%u0C59
+%u0C5A
+%u0C5B
+%u0C5C
+%u0C5D
+%u0C5E
+%u0C5F
+%u0C60
+%u0C61
+%u0C62
+%u0C63
+%u0C64
+%u0C65
+%u0C66
+%u0C67
+%u0C68
+%u0C69
+%u0C6A
+%u0C6B
+%u0C6C
+%u0C6D
+%u0C6E
+%u0C6F
+%u0C70
+%u0C71
+%u0C72
+%u0C73
+%u0C74
+%u0C75
+%u0C76
+%u0C77
+%u0C78
+%u0C79
+%u0C7A
+%u0C7B
+%u0C7C
+%u0C7D
+%u0C7E
+%u0C7F
+%u0C80
+%u0C81
+%u0C82
+%u0C83
+%u0C84
+%u0C85
+%u0C86
+%u0C87
+%u0C88
+%u0C89
+%u0C8A
+%u0C8B
+%u0C8C
+%u0C8D
+%u0C8E
+%u0C8F
+%u0C90
+%u0C91
+%u0C92
+%u0C93
+%u0C94
+%u0C95
+%u0C96
+%u0C97
+%u0C98
+%u0C99
+%u0C9A
+%u0C9B
+%u0C9C
+%u0C9D
+%u0C9E
+%u0C9F
+%u0CA0
+%u0CA1
+%u0CA2
+%u0CA3
+%u0CA4
+%u0CA5
+%u0CA6
+%u0CA7
+%u0CA8
+%u0CA9
+%u0CAA
+%u0CAB
+%u0CAC
+%u0CAD
+%u0CAE
+%u0CAF
+%u0CB0
+%u0CB1
+%u0CB2
+%u0CB3
+%u0CB4
+%u0CB5
+%u0CB6
+%u0CB7
+%u0CB8
+%u0CB9
+%u0CBA
+%u0CBB
+%u0CBC
+%u0CBD
+%u0CBE
+%u0CBF
+%u0CC0
+%u0CC1
+%u0CC2
+%u0CC3
+%u0CC4
+%u0CC5
+%u0CC6
+%u0CC7
+%u0CC8
+%u0CC9
+%u0CCA
+%u0CCB
+%u0CCC
+%u0CCD
+%u0CCE
+%u0CCF
+%u0CD0
+%u0CD1
+%u0CD2
+%u0CD3
+%u0CD4
+%u0CD5
+%u0CD6
+%u0CD7
+%u0CD8
+%u0CD9
+%u0CDA
+%u0CDB
+%u0CDC
+%u0CDD
+%u0CDE
+%u0CDF
+%u0CE0
+%u0CE1
+%u0CE2
+%u0CE3
+%u0CE4
+%u0CE5
+%u0CE6
+%u0CE7
+%u0CE8
+%u0CE9
+%u0CEA
+%u0CEB
+%u0CEC
+%u0CED
+%u0CEE
+%u0CEF
+%u0CF0
+%u0CF1
+%u0CF2
+%u0CF3
+%u0CF4
+%u0CF5
+%u0CF6
+%u0CF7
+%u0CF8
+%u0CF9
+%u0CFA
+%u0CFB
+%u0CFC
+%u0CFD
+%u0CFE
+%u0CFF
+%u0D00
+%u0D01
+%u0D02
+%u0D03
+%u0D04
+%u0D05
+%u0D06
+%u0D07
+%u0D08
+%u0D09
+%u0D0A
+%u0D0B
+%u0D0C
+%u0D0D
+%u0D0E
+%u0D0F
+%u0D10
+%u0D11
+%u0D12
+%u0D13
+%u0D14
+%u0D15
+%u0D16
+%u0D17
+%u0D18
+%u0D19
+%u0D1A
+%u0D1B
+%u0D1C
+%u0D1D
+%u0D1E
+%u0D1F
+%u0D20
+%u0D21
+%u0D22
+%u0D23
+%u0D24
+%u0D25
+%u0D26
+%u0D27
+%u0D28
+%u0D29
+%u0D2A
+%u0D2B
+%u0D2C
+%u0D2D
+%u0D2E
+%u0D2F
+%u0D30
+%u0D31
+%u0D32
+%u0D33
+%u0D34
+%u0D35
+%u0D36
+%u0D37
+%u0D38
+%u0D39
+%u0D3A
+%u0D3B
+%u0D3C
+%u0D3D
+%u0D3E
+%u0D3F
+%u0D40
+%u0D41
+%u0D42
+%u0D43
+%u0D44
+%u0D45
+%u0D46
+%u0D47
+%u0D48
+%u0D49
+%u0D4A
+%u0D4B
+%u0D4C
+%u0D4D
+%u0D4E
+%u0D4F
+%u0D50
+%u0D51
+%u0D52
+%u0D53
+%u0D54
+%u0D55
+%u0D56
+%u0D57
+%u0D58
+%u0D59
+%u0D5A
+%u0D5B
+%u0D5C
+%u0D5D
+%u0D5E
+%u0D5F
+%u0D60
+%u0D61
+%u0D62
+%u0D63
+%u0D64
+%u0D65
+%u0D66
+%u0D67
+%u0D68
+%u0D69
+%u0D6A
+%u0D6B
+%u0D6C
+%u0D6D
+%u0D6E
+%u0D6F
+%u0D70
+%u0D71
+%u0D72
+%u0D73
+%u0D74
+%u0D75
+%u0D76
+%u0D77
+%u0D78
+%u0D79
+%u0D7A
+%u0D7B
+%u0D7C
+%u0D7D
+%u0D7E
+%u0D7F
+%u0D80
+%u0D81
+%u0D82
+%u0D83
+%u0D84
+%u0D85
+%u0D86
+%u0D87
+%u0D88
+%u0D89
+%u0D8A
+%u0D8B
+%u0D8C
+%u0D8D
+%u0D8E
+%u0D8F
+%u0D90
+%u0D91
+%u0D92
+%u0D93
+%u0D94
+%u0D95
+%u0D96
+%u0D97
+%u0D98
+%u0D99
+%u0D9A
+%u0D9B
+%u0D9C
+%u0D9D
+%u0D9E
+%u0D9F
+%u0DA0
+%u0DA1
+%u0DA2
+%u0DA3
+%u0DA4
+%u0DA5
+%u0DA6
+%u0DA7
+%u0DA8
+%u0DA9
+%u0DAA
+%u0DAB
+%u0DAC
+%u0DAD
+%u0DAE
+%u0DAF
+%u0DB0
+%u0DB1
+%u0DB2
+%u0DB3
+%u0DB4
+%u0DB5
+%u0DB6
+%u0DB7
+%u0DB8
+%u0DB9
+%u0DBA
+%u0DBB
+%u0DBC
+%u0DBD
+%u0DBE
+%u0DBF
+%u0DC0
+%u0DC1
+%u0DC2
+%u0DC3
+%u0DC4
+%u0DC5
+%u0DC6
+%u0DC7
+%u0DC8
+%u0DC9
+%u0DCA
+%u0DCB
+%u0DCC
+%u0DCD
+%u0DCE
+%u0DCF
+%u0DD0
+%u0DD1
+%u0DD2
+%u0DD3
+%u0DD4
+%u0DD5
+%u0DD6
+%u0DD7
+%u0DD8
+%u0DD9
+%u0DDA
+%u0DDB
+%u0DDC
+%u0DDD
+%u0DDE
+%u0DDF
+%u0DE0
+%u0DE1
+%u0DE2
+%u0DE3
+%u0DE4
+%u0DE5
+%u0DE6
+%u0DE7
+%u0DE8
+%u0DE9
+%u0DEA
+%u0DEB
+%u0DEC
+%u0DED
+%u0DEE
+%u0DEF
+%u0DF0
+%u0DF1
+%u0DF2
+%u0DF3
+%u0DF4
+%u0DF5
+%u0DF6
+%u0DF7
+%u0DF8
+%u0DF9
+%u0DFA
+%u0DFB
+%u0DFC
+%u0DFD
+%u0DFE
+%u0DFF
+%u0E00
+%u0E01
+%u0E02
+%u0E03
+%u0E04
+%u0E05
+%u0E06
+%u0E07
+%u0E08
+%u0E09
+%u0E0A
+%u0E0B
+%u0E0C
+%u0E0D
+%u0E0E
+%u0E0F
+%u0E10
+%u0E11
+%u0E12
+%u0E13
+%u0E14
+%u0E15
+%u0E16
+%u0E17
+%u0E18
+%u0E19
+%u0E1A
+%u0E1B
+%u0E1C
+%u0E1D
+%u0E1E
+%u0E1F
+%u0E20
+%u0E21
+%u0E22
+%u0E23
+%u0E24
+%u0E25
+%u0E26
+%u0E27
+%u0E28
+%u0E29
+%u0E2A
+%u0E2B
+%u0E2C
+%u0E2D
+%u0E2E
+%u0E2F
+%u0E30
+%u0E31
+%u0E32
+%u0E33
+%u0E34
+%u0E35
+%u0E36
+%u0E37
+%u0E38
+%u0E39
+%u0E3A
+%u0E3B
+%u0E3C
+%u0E3D
+%u0E3E
+%u0E3F
+%u0E40
+%u0E41
+%u0E42
+%u0E43
+%u0E44
+%u0E45
+%u0E46
+%u0E47
+%u0E48
+%u0E49
+%u0E4A
+%u0E4B
+%u0E4C
+%u0E4D
+%u0E4E
+%u0E4F
+%u0E50
+%u0E51
+%u0E52
+%u0E53
+%u0E54
+%u0E55
+%u0E56
+%u0E57
+%u0E58
+%u0E59
+%u0E5A
+%u0E5B
+%u0E5C
+%u0E5D
+%u0E5E
+%u0E5F
+%u0E60
+%u0E61
+%u0E62
+%u0E63
+%u0E64
+%u0E65
+%u0E66
+%u0E67
+%u0E68
+%u0E69
+%u0E6A
+%u0E6B
+%u0E6C
+%u0E6D
+%u0E6E
+%u0E6F
+%u0E70
+%u0E71
+%u0E72
+%u0E73
+%u0E74
+%u0E75
+%u0E76
+%u0E77
+%u0E78
+%u0E79
+%u0E7A
+%u0E7B
+%u0E7C
+%u0E7D
+%u0E7E
+%u0E7F
+%u0E80
+%u0E81
+%u0E82
+%u0E83
+%u0E84
+%u0E85
+%u0E86
+%u0E87
+%u0E88
+%u0E89
+%u0E8A
+%u0E8B
+%u0E8C
+%u0E8D
+%u0E8E
+%u0E8F
+%u0E90
+%u0E91
+%u0E92
+%u0E93
+%u0E94
+%u0E95
+%u0E96
+%u0E97
+%u0E98
+%u0E99
+%u0E9A
+%u0E9B
+%u0E9C
+%u0E9D
+%u0E9E
+%u0E9F
+%u0EA0
+%u0EA1
+%u0EA2
+%u0EA3
+%u0EA4
+%u0EA5
+%u0EA6
+%u0EA7
+%u0EA8
+%u0EA9
+%u0EAA
+%u0EAB
+%u0EAC
+%u0EAD
+%u0EAE
+%u0EAF
+%u0EB0
+%u0EB1
+%u0EB2
+%u0EB3
+%u0EB4
+%u0EB5
+%u0EB6
+%u0EB7
+%u0EB8
+%u0EB9
+%u0EBA
+%u0EBB
+%u0EBC
+%u0EBD
+%u0EBE
+%u0EBF
+%u0EC0
+%u0EC1
+%u0EC2
+%u0EC3
+%u0EC4
+%u0EC5
+%u0EC6
+%u0EC7
+%u0EC8
+%u0EC9
+%u0ECA
+%u0ECB
+%u0ECC
+%u0ECD
+%u0ECE
+%u0ECF
+%u0ED0
+%u0ED1
+%u0ED2
+%u0ED3
+%u0ED4
+%u0ED5
+%u0ED6
+%u0ED7
+%u0ED8
+%u0ED9
+%u0EDA
+%u0EDB
+%u0EDC
+%u0EDD
+%u0EDE
+%u0EDF
+%u0EE0
+%u0EE1
+%u0EE2
+%u0EE3
+%u0EE4
+%u0EE5
+%u0EE6
+%u0EE7
+%u0EE8
+%u0EE9
+%u0EEA
+%u0EEB
+%u0EEC
+%u0EED
+%u0EEE
+%u0EEF
+%u0EF0
+%u0EF1
+%u0EF2
+%u0EF3
+%u0EF4
+%u0EF5
+%u0EF6
+%u0EF7
+%u0EF8
+%u0EF9
+%u0EFA
+%u0EFB
+%u0EFC
+%u0EFD
+%u0EFE
+%u0EFF
+%u0F00
+%u0F01
+%u0F02
+%u0F03
+%u0F04
+%u0F05
+%u0F06
+%u0F07
+%u0F08
+%u0F09
+%u0F0A
+%u0F0B
+%u0F0C
+%u0F0D
+%u0F0E
+%u0F0F
+%u0F10
+%u0F11
+%u0F12
+%u0F13
+%u0F14
+%u0F15
+%u0F16
+%u0F17
+%u0F18
+%u0F19
+%u0F1A
+%u0F1B
+%u0F1C
+%u0F1D
+%u0F1E
+%u0F1F
+%u0F20
+%u0F21
+%u0F22
+%u0F23
+%u0F24
+%u0F25
+%u0F26
+%u0F27
+%u0F28
+%u0F29
+%u0F2A
+%u0F2B
+%u0F2C
+%u0F2D
+%u0F2E
+%u0F2F
+%u0F30
+%u0F31
+%u0F32
+%u0F33
+%u0F34
+%u0F35
+%u0F36
+%u0F37
+%u0F38
+%u0F39
+%u0F3A
+%u0F3B
+%u0F3C
+%u0F3D
+%u0F3E
+%u0F3F
+%u0F40
+%u0F41
+%u0F42
+%u0F43
+%u0F44
+%u0F45
+%u0F46
+%u0F47
+%u0F48
+%u0F49
+%u0F4A
+%u0F4B
+%u0F4C
+%u0F4D
+%u0F4E
+%u0F4F
+%u0F50
+%u0F51
+%u0F52
+%u0F53
+%u0F54
+%u0F55
+%u0F56
+%u0F57
+%u0F58
+%u0F59
+%u0F5A
+%u0F5B
+%u0F5C
+%u0F5D
+%u0F5E
+%u0F5F
+%u0F60
+%u0F61
+%u0F62
+%u0F63
+%u0F64
+%u0F65
+%u0F66
+%u0F67
+%u0F68
+%u0F69
+%u0F6A
+%u0F6B
+%u0F6C
+%u0F6D
+%u0F6E
+%u0F6F
+%u0F70
+%u0F71
+%u0F72
+%u0F73
+%u0F74
+%u0F75
+%u0F76
+%u0F77
+%u0F78
+%u0F79
+%u0F7A
+%u0F7B
+%u0F7C
+%u0F7D
+%u0F7E
+%u0F7F
+%u0F80
+%u0F81
+%u0F82
+%u0F83
+%u0F84
+%u0F85
+%u0F86
+%u0F87
+%u0F88
+%u0F89
+%u0F8A
+%u0F8B
+%u0F8C
+%u0F8D
+%u0F8E
+%u0F8F
+%u0F90
+%u0F91
+%u0F92
+%u0F93
+%u0F94
+%u0F95
+%u0F96
+%u0F97
+%u0F98
+%u0F99
+%u0F9A
+%u0F9B
+%u0F9C
+%u0F9D
+%u0F9E
+%u0F9F
+%u0FA0
+%u0FA1
+%u0FA2
+%u0FA3
+%u0FA4
+%u0FA5
+%u0FA6
+%u0FA7
+%u0FA8
+%u0FA9
+%u0FAA
+%u0FAB
+%u0FAC
+%u0FAD
+%u0FAE
+%u0FAF
+%u0FB0
+%u0FB1
+%u0FB2
+%u0FB3
+%u0FB4
+%u0FB5
+%u0FB6
+%u0FB7
+%u0FB8
+%u0FB9
+%u0FBA
+%u0FBB
+%u0FBC
+%u0FBD
+%u0FBE
+%u0FBF
+%u0FC0
+%u0FC1
+%u0FC2
+%u0FC3
+%u0FC4
+%u0FC5
+%u0FC6
+%u0FC7
+%u0FC8
+%u0FC9
+%u0FCA
+%u0FCB
+%u0FCC
+%u0FCD
+%u0FCE
+%u0FCF
+%u0FD0
+%u0FD1
+%u0FD2
+%u0FD3
+%u0FD4
+%u0FD5
+%u0FD6
+%u0FD7
+%u0FD8
+%u0FD9
+%u0FDA
+%u0FDB
+%u0FDC
+%u0FDD
+%u0FDE
+%u0FDF
+%u0FE0
+%u0FE1
+%u0FE2
+%u0FE3
+%u0FE4
+%u0FE5
+%u0FE6
+%u0FE7
+%u0FE8
+%u0FE9
+%u0FEA
+%u0FEB
+%u0FEC
+%u0FED
+%u0FEE
+%u0FEF
+%u0FF0
+%u0FF1
+%u0FF2
+%u0FF3
+%u0FF4
+%u0FF5
+%u0FF6
+%u0FF7
+%u0FF8
+%u0FF9
+%u0FFA
+%u0FFB
+%u0FFC
+%u0FFD
+%u0FFE
+%u0FFF
+%u1000
+%u1001
+%u1002
+%u1003
+%u1004
+%u1005
+%u1006
+%u1007
+%u1008
+%u1009
+%u100A
+%u100B
+%u100C
+%u100D
+%u100E
+%u100F
+%u1010
+%u1011
+%u1012
+%u1013
+%u1014
+%u1015
+%u1016
+%u1017
+%u1018
+%u1019
+%u101A
+%u101B
+%u101C
+%u101D
+%u101E
+%u101F
+%u1020
+%u1021
+%u1022
+%u1023
+%u1024
+%u1025
+%u1026
+%u1027
+%u1028
+%u1029
+%u102A
+%u102B
+%u102C
+%u102D
+%u102E
+%u102F
+%u1030
+%u1031
+%u1032
+%u1033
+%u1034
+%u1035
+%u1036
+%u1037
+%u1038
+%u1039
+%u103A
+%u103B
+%u103C
+%u103D
+%u103E
+%u103F
+%u1040
+%u1041
+%u1042
+%u1043
+%u1044
+%u1045
+%u1046
+%u1047
+%u1048
+%u1049
+%u104A
+%u104B
+%u104C
+%u104D
+%u104E
+%u104F
+%u1050
+%u1051
+%u1052
+%u1053
+%u1054
+%u1055
+%u1056
+%u1057
+%u1058
+%u1059
+%u105A
+%u105B
+%u105C
+%u105D
+%u105E
+%u105F
+%u1060
+%u1061
+%u1062
+%u1063
+%u1064
+%u1065
+%u1066
+%u1067
+%u1068
+%u1069
+%u106A
+%u106B
+%u106C
+%u106D
+%u106E
+%u106F
+%u1070
+%u1071
+%u1072
+%u1073
+%u1074
+%u1075
+%u1076
+%u1077
+%u1078
+%u1079
+%u107A
+%u107B
+%u107C
+%u107D
+%u107E
+%u107F
+%u1080
+%u1081
+%u1082
+%u1083
+%u1084
+%u1085
+%u1086
+%u1087
+%u1088
+%u1089
+%u108A
+%u108B
+%u108C
+%u108D
+%u108E
+%u108F
+%u1090
+%u1091
+%u1092
+%u1093
+%u1094
+%u1095
+%u1096
+%u1097
+%u1098
+%u1099
+%u109A
+%u109B
+%u109C
+%u109D
+%u109E
+%u109F
+%u10A0
+%u10A1
+%u10A2
+%u10A3
+%u10A4
+%u10A5
+%u10A6
+%u10A7
+%u10A8
+%u10A9
+%u10AA
+%u10AB
+%u10AC
+%u10AD
+%u10AE
+%u10AF
+%u10B0
+%u10B1
+%u10B2
+%u10B3
+%u10B4
+%u10B5
+%u10B6
+%u10B7
+%u10B8
+%u10B9
+%u10BA
+%u10BB
+%u10BC
+%u10BD
+%u10BE
+%u10BF
+%u10C0
+%u10C1
+%u10C2
+%u10C3
+%u10C4
+%u10C5
+%u10C6
+%u10C7
+%u10C8
+%u10C9
+%u10CA
+%u10CB
+%u10CC
+%u10CD
+%u10CE
+%u10CF
+%u10D0
+%u10D1
+%u10D2
+%u10D3
+%u10D4
+%u10D5
+%u10D6
+%u10D7
+%u10D8
+%u10D9
+%u10DA
+%u10DB
+%u10DC
+%u10DD
+%u10DE
+%u10DF
+%u10E0
+%u10E1
+%u10E2
+%u10E3
+%u10E4
+%u10E5
+%u10E6
+%u10E7
+%u10E8
+%u10E9
+%u10EA
+%u10EB
+%u10EC
+%u10ED
+%u10EE
+%u10EF
+%u10F0
+%u10F1
+%u10F2
+%u10F3
+%u10F4
+%u10F5
+%u10F6
+%u10F7
+%u10F8
+%u10F9
+%u10FA
+%u10FB
+%u10FC
+%u10FD
+%u10FE
+%u10FF
+%u1100
+%u1101
+%u1102
+%u1103
+%u1104
+%u1105
+%u1106
+%u1107
+%u1108
+%u1109
+%u110A
+%u110B
+%u110C
+%u110D
+%u110E
+%u110F
+%u1110
+%u1111
+%u1112
+%u1113
+%u1114
+%u1115
+%u1116
+%u1117
+%u1118
+%u1119
+%u111A
+%u111B
+%u111C
+%u111D
+%u111E
+%u111F
+%u1120
+%u1121
+%u1122
+%u1123
+%u1124
+%u1125
+%u1126
+%u1127
+%u1128
+%u1129
+%u112A
+%u112B
+%u112C
+%u112D
+%u112E
+%u112F
+%u1130
+%u1131
+%u1132
+%u1133
+%u1134
+%u1135
+%u1136
+%u1137
+%u1138
+%u1139
+%u113A
+%u113B
+%u113C
+%u113D
+%u113E
+%u113F
+%u1140
+%u1141
+%u1142
+%u1143
+%u1144
+%u1145
+%u1146
+%u1147
+%u1148
+%u1149
+%u114A
+%u114B
+%u114C
+%u114D
+%u114E
+%u114F
+%u1150
+%u1151
+%u1152
+%u1153
+%u1154
+%u1155
+%u1156
+%u1157
+%u1158
+%u1159
+%u115A
+%u115B
+%u115C
+%u115D
+%u115E
+%u115F
+%u1160
+%u1161
+%u1162
+%u1163
+%u1164
+%u1165
+%u1166
+%u1167
+%u1168
+%u1169
+%u116A
+%u116B
+%u116C
+%u116D
+%u116E
+%u116F
+%u1170
+%u1171
+%u1172
+%u1173
+%u1174
+%u1175
+%u1176
+%u1177
+%u1178
+%u1179
+%u117A
+%u117B
+%u117C
+%u117D
+%u117E
+%u117F
+%u1180
+%u1181
+%u1182
+%u1183
+%u1184
+%u1185
+%u1186
+%u1187
+%u1188
+%u1189
+%u118A
+%u118B
+%u118C
+%u118D
+%u118E
+%u118F
+%u1190
+%u1191
+%u1192
+%u1193
+%u1194
+%u1195
+%u1196
+%u1197
+%u1198
+%u1199
+%u119A
+%u119B
+%u119C
+%u119D
+%u119E
+%u119F
+%u11A0
+%u11A1
+%u11A2
+%u11A3
+%u11A4
+%u11A5
+%u11A6
+%u11A7
+%u11A8
+%u11A9
+%u11AA
+%u11AB
+%u11AC
+%u11AD
+%u11AE
+%u11AF
+%u11B0
+%u11B1
+%u11B2
+%u11B3
+%u11B4
+%u11B5
+%u11B6
+%u11B7
+%u11B8
+%u11B9
+%u11BA
+%u11BB
+%u11BC
+%u11BD
+%u11BE
+%u11BF
+%u11C0
+%u11C1
+%u11C2
+%u11C3
+%u11C4
+%u11C5
+%u11C6
+%u11C7
+%u11C8
+%u11C9
+%u11CA
+%u11CB
+%u11CC
+%u11CD
+%u11CE
+%u11CF
+%u11D0
+%u11D1
+%u11D2
+%u11D3
+%u11D4
+%u11D5
+%u11D6
+%u11D7
+%u11D8
+%u11D9
+%u11DA
+%u11DB
+%u11DC
+%u11DD
+%u11DE
+%u11DF
+%u11E0
+%u11E1
+%u11E2
+%u11E3
+%u11E4
+%u11E5
+%u11E6
+%u11E7
+%u11E8
+%u11E9
+%u11EA
+%u11EB
+%u11EC
+%u11ED
+%u11EE
+%u11EF
+%u11F0
+%u11F1
+%u11F2
+%u11F3
+%u11F4
+%u11F5
+%u11F6
+%u11F7
+%u11F8
+%u11F9
+%u11FA
+%u11FB
+%u11FC
+%u11FD
+%u11FE
+%u11FF
+%u1200
+%u1201
+%u1202
+%u1203
+%u1204
+%u1205
+%u1206
+%u1207
+%u1208
+%u1209
+%u120A
+%u120B
+%u120C
+%u120D
+%u120E
+%u120F
+%u1210
+%u1211
+%u1212
+%u1213
+%u1214
+%u1215
+%u1216
+%u1217
+%u1218
+%u1219
+%u121A
+%u121B
+%u121C
+%u121D
+%u121E
+%u121F
+%u1220
+%u1221
+%u1222
+%u1223
+%u1224
+%u1225
+%u1226
+%u1227
+%u1228
+%u1229
+%u122A
+%u122B
+%u122C
+%u122D
+%u122E
+%u122F
+%u1230
+%u1231
+%u1232
+%u1233
+%u1234
+%u1235
+%u1236
+%u1237
+%u1238
+%u1239
+%u123A
+%u123B
+%u123C
+%u123D
+%u123E
+%u123F
+%u1240
+%u1241
+%u1242
+%u1243
+%u1244
+%u1245
+%u1246
+%u1247
+%u1248
+%u1249
+%u124A
+%u124B
+%u124C
+%u124D
+%u124E
+%u124F
+%u1250
+%u1251
+%u1252
+%u1253
+%u1254
+%u1255
+%u1256
+%u1257
+%u1258
+%u1259
+%u125A
+%u125B
+%u125C
+%u125D
+%u125E
+%u125F
+%u1260
+%u1261
+%u1262
+%u1263
+%u1264
+%u1265
+%u1266
+%u1267
+%u1268
+%u1269
+%u126A
+%u126B
+%u126C
+%u126D
+%u126E
+%u126F
+%u1270
+%u1271
+%u1272
+%u1273
+%u1274
+%u1275
+%u1276
+%u1277
+%u1278
+%u1279
+%u127A
+%u127B
+%u127C
+%u127D
+%u127E
+%u127F
+%u1280
+%u1281
+%u1282
+%u1283
+%u1284
+%u1285
+%u1286
+%u1287
+%u1288
+%u1289
+%u128A
+%u128B
+%u128C
+%u128D
+%u128E
+%u128F
+%u1290
+%u1291
+%u1292
+%u1293
+%u1294
+%u1295
+%u1296
+%u1297
+%u1298
+%u1299
+%u129A
+%u129B
+%u129C
+%u129D
+%u129E
+%u129F
+%u12A0
+%u12A1
+%u12A2
+%u12A3
+%u12A4
+%u12A5
+%u12A6
+%u12A7
+%u12A8
+%u12A9
+%u12AA
+%u12AB
+%u12AC
+%u12AD
+%u12AE
+%u12AF
+%u12B0
+%u12B1
+%u12B2
+%u12B3
+%u12B4
+%u12B5
+%u12B6
+%u12B7
+%u12B8
+%u12B9
+%u12BA
+%u12BB
+%u12BC
+%u12BD
+%u12BE
+%u12BF
+%u12C0
+%u12C1
+%u12C2
+%u12C3
+%u12C4
+%u12C5
+%u12C6
+%u12C7
+%u12C8
+%u12C9
+%u12CA
+%u12CB
+%u12CC
+%u12CD
+%u12CE
+%u12CF
+%u12D0
+%u12D1
+%u12D2
+%u12D3
+%u12D4
+%u12D5
+%u12D6
+%u12D7
+%u12D8
+%u12D9
+%u12DA
+%u12DB
+%u12DC
+%u12DD
+%u12DE
+%u12DF
+%u12E0
+%u12E1
+%u12E2
+%u12E3
+%u12E4
+%u12E5
+%u12E6
+%u12E7
+%u12E8
+%u12E9
+%u12EA
+%u12EB
+%u12EC
+%u12ED
+%u12EE
+%u12EF
+%u12F0
+%u12F1
+%u12F2
+%u12F3
+%u12F4
+%u12F5
+%u12F6
+%u12F7
+%u12F8
+%u12F9
+%u12FA
+%u12FB
+%u12FC
+%u12FD
+%u12FE
+%u12FF
+%u1300
+%u1301
+%u1302
+%u1303
+%u1304
+%u1305
+%u1306
+%u1307
+%u1308
+%u1309
+%u130A
+%u130B
+%u130C
+%u130D
+%u130E
+%u130F
+%u1310
+%u1311
+%u1312
+%u1313
+%u1314
+%u1315
+%u1316
+%u1317
+%u1318
+%u1319
+%u131A
+%u131B
+%u131C
+%u131D
+%u131E
+%u131F
+%u1320
+%u1321
+%u1322
+%u1323
+%u1324
+%u1325
+%u1326
+%u1327
+%u1328
+%u1329
+%u132A
+%u132B
+%u132C
+%u132D
+%u132E
+%u132F
+%u1330
+%u1331
+%u1332
+%u1333
+%u1334
+%u1335
+%u1336
+%u1337
+%u1338
+%u1339
+%u133A
+%u133B
+%u133C
+%u133D
+%u133E
+%u133F
+%u1340
+%u1341
+%u1342
+%u1343
+%u1344
+%u1345
+%u1346
+%u1347
+%u1348
+%u1349
+%u134A
+%u134B
+%u134C
+%u134D
+%u134E
+%u134F
+%u1350
+%u1351
+%u1352
+%u1353
+%u1354
+%u1355
+%u1356
+%u1357
+%u1358
+%u1359
+%u135A
+%u135B
+%u135C
+%u135D
+%u135E
+%u135F
+%u1360
+%u1361
+%u1362
+%u1363
+%u1364
+%u1365
+%u1366
+%u1367
+%u1368
+%u1369
+%u136A
+%u136B
+%u136C
+%u136D
+%u136E
+%u136F
+%u1370
+%u1371
+%u1372
+%u1373
+%u1374
+%u1375
+%u1376
+%u1377
+%u1378
+%u1379
+%u137A
+%u137B
+%u137C
+%u137D
+%u137E
+%u137F
+%u1380
+%u1381
+%u1382
+%u1383
+%u1384
+%u1385
+%u1386
+%u1387
+%u1388
+%u1389
+%u138A
+%u138B
+%u138C
+%u138D
+%u138E
+%u138F
+%u1390
+%u1391
+%u1392
+%u1393
+%u1394
+%u1395
+%u1396
+%u1397
+%u1398
+%u1399
+%u139A
+%u139B
+%u139C
+%u139D
+%u139E
+%u139F
+%u13A0
+%u13A1
+%u13A2
+%u13A3
+%u13A4
+%u13A5
+%u13A6
+%u13A7
+%u13A8
+%u13A9
+%u13AA
+%u13AB
+%u13AC
+%u13AD
+%u13AE
+%u13AF
+%u13B0
+%u13B1
+%u13B2
+%u13B3
+%u13B4
+%u13B5
+%u13B6
+%u13B7
+%u13B8
+%u13B9
+%u13BA
+%u13BB
+%u13BC
+%u13BD
+%u13BE
+%u13BF
+%u13C0
+%u13C1
+%u13C2
+%u13C3
+%u13C4
+%u13C5
+%u13C6
+%u13C7
+%u13C8
+%u13C9
+%u13CA
+%u13CB
+%u13CC
+%u13CD
+%u13CE
+%u13CF
+%u13D0
+%u13D1
+%u13D2
+%u13D3
+%u13D4
+%u13D5
+%u13D6
+%u13D7
+%u13D8
+%u13D9
+%u13DA
+%u13DB
+%u13DC
+%u13DD
+%u13DE
+%u13DF
+%u13E0
+%u13E1
+%u13E2
+%u13E3
+%u13E4
+%u13E5
+%u13E6
+%u13E7
+%u13E8
+%u13E9
+%u13EA
+%u13EB
+%u13EC
+%u13ED
+%u13EE
+%u13EF
+%u13F0
+%u13F1
+%u13F2
+%u13F3
+%u13F4
+%u13F5
+%u13F6
+%u13F7
+%u13F8
+%u13F9
+%u13FA
+%u13FB
+%u13FC
+%u13FD
+%u13FE
+%u13FF
+%u1400
+%u1401
+%u1402
+%u1403
+%u1404
+%u1405
+%u1406
+%u1407
+%u1408
+%u1409
+%u140A
+%u140B
+%u140C
+%u140D
+%u140E
+%u140F
+%u1410
+%u1411
+%u1412
+%u1413
+%u1414
+%u1415
+%u1416
+%u1417
+%u1418
+%u1419
+%u141A
+%u141B
+%u141C
+%u141D
+%u141E
+%u141F
+%u1420
+%u1421
+%u1422
+%u1423
+%u1424
+%u1425
+%u1426
+%u1427
+%u1428
+%u1429
+%u142A
+%u142B
+%u142C
+%u142D
+%u142E
+%u142F
+%u1430
+%u1431
+%u1432
+%u1433
+%u1434
+%u1435
+%u1436
+%u1437
+%u1438
+%u1439
+%u143A
+%u143B
+%u143C
+%u143D
+%u143E
+%u143F
+%u1440
+%u1441
+%u1442
+%u1443
+%u1444
+%u1445
+%u1446
+%u1447
+%u1448
+%u1449
+%u144A
+%u144B
+%u144C
+%u144D
+%u144E
+%u144F
+%u1450
+%u1451
+%u1452
+%u1453
+%u1454
+%u1455
+%u1456
+%u1457
+%u1458
+%u1459
+%u145A
+%u145B
+%u145C
+%u145D
+%u145E
+%u145F
+%u1460
+%u1461
+%u1462
+%u1463
+%u1464
+%u1465
+%u1466
+%u1467
+%u1468
+%u1469
+%u146A
+%u146B
+%u146C
+%u146D
+%u146E
+%u146F
+%u1470
+%u1471
+%u1472
+%u1473
+%u1474
+%u1475
+%u1476
+%u1477
+%u1478
+%u1479
+%u147A
+%u147B
+%u147C
+%u147D
+%u147E
+%u147F
+%u1480
+%u1481
+%u1482
+%u1483
+%u1484
+%u1485
+%u1486
+%u1487
+%u1488
+%u1489
+%u148A
+%u148B
+%u148C
+%u148D
+%u148E
+%u148F
+%u1490
+%u1491
+%u1492
+%u1493
+%u1494
+%u1495
+%u1496
+%u1497
+%u1498
+%u1499
+%u149A
+%u149B
+%u149C
+%u149D
+%u149E
+%u149F
+%u14A0
+%u14A1
+%u14A2
+%u14A3
+%u14A4
+%u14A5
+%u14A6
+%u14A7
+%u14A8
+%u14A9
+%u14AA
+%u14AB
+%u14AC
+%u14AD
+%u14AE
+%u14AF
+%u14B0
+%u14B1
+%u14B2
+%u14B3
+%u14B4
+%u14B5
+%u14B6
+%u14B7
+%u14B8
+%u14B9
+%u14BA
+%u14BB
+%u14BC
+%u14BD
+%u14BE
+%u14BF
+%u14C0
+%u14C1
+%u14C2
+%u14C3
+%u14C4
+%u14C5
+%u14C6
+%u14C7
+%u14C8
+%u14C9
+%u14CA
+%u14CB
+%u14CC
+%u14CD
+%u14CE
+%u14CF
+%u14D0
+%u14D1
+%u14D2
+%u14D3
+%u14D4
+%u14D5
+%u14D6
+%u14D7
+%u14D8
+%u14D9
+%u14DA
+%u14DB
+%u14DC
+%u14DD
+%u14DE
+%u14DF
+%u14E0
+%u14E1
+%u14E2
+%u14E3
+%u14E4
+%u14E5
+%u14E6
+%u14E7
+%u14E8
+%u14E9
+%u14EA
+%u14EB
+%u14EC
+%u14ED
+%u14EE
+%u14EF
+%u14F0
+%u14F1
+%u14F2
+%u14F3
+%u14F4
+%u14F5
+%u14F6
+%u14F7
+%u14F8
+%u14F9
+%u14FA
+%u14FB
+%u14FC
+%u14FD
+%u14FE
+%u14FF
+%u1500
+%u1501
+%u1502
+%u1503
+%u1504
+%u1505
+%u1506
+%u1507
+%u1508
+%u1509
+%u150A
+%u150B
+%u150C
+%u150D
+%u150E
+%u150F
+%u1510
+%u1511
+%u1512
+%u1513
+%u1514
+%u1515
+%u1516
+%u1517
+%u1518
+%u1519
+%u151A
+%u151B
+%u151C
+%u151D
+%u151E
+%u151F
+%u1520
+%u1521
+%u1522
+%u1523
+%u1524
+%u1525
+%u1526
+%u1527
+%u1528
+%u1529
+%u152A
+%u152B
+%u152C
+%u152D
+%u152E
+%u152F
+%u1530
+%u1531
+%u1532
+%u1533
+%u1534
+%u1535
+%u1536
+%u1537
+%u1538
+%u1539
+%u153A
+%u153B
+%u153C
+%u153D
+%u153E
+%u153F
+%u1540
+%u1541
+%u1542
+%u1543
+%u1544
+%u1545
+%u1546
+%u1547
+%u1548
+%u1549
+%u154A
+%u154B
+%u154C
+%u154D
+%u154E
+%u154F
+%u1550
+%u1551
+%u1552
+%u1553
+%u1554
+%u1555
+%u1556
+%u1557
+%u1558
+%u1559
+%u155A
+%u155B
+%u155C
+%u155D
+%u155E
+%u155F
+%u1560
+%u1561
+%u1562
+%u1563
+%u1564
+%u1565
+%u1566
+%u1567
+%u1568
+%u1569
+%u156A
+%u156B
+%u156C
+%u156D
+%u156E
+%u156F
+%u1570
+%u1571
+%u1572
+%u1573
+%u1574
+%u1575
+%u1576
+%u1577
+%u1578
+%u1579
+%u157A
+%u157B
+%u157C
+%u157D
+%u157E
+%u157F
+%u1580
+%u1581
+%u1582
+%u1583
+%u1584
+%u1585
+%u1586
+%u1587
+%u1588
+%u1589
+%u158A
+%u158B
+%u158C
+%u158D
+%u158E
+%u158F
+%u1590
+%u1591
+%u1592
+%u1593
+%u1594
+%u1595
+%u1596
+%u1597
+%u1598
+%u1599
+%u159A
+%u159B
+%u159C
+%u159D
+%u159E
+%u159F
+%u15A0
+%u15A1
+%u15A2
+%u15A3
+%u15A4
+%u15A5
+%u15A6
+%u15A7
+%u15A8
+%u15A9
+%u15AA
+%u15AB
+%u15AC
+%u15AD
+%u15AE
+%u15AF
+%u15B0
+%u15B1
+%u15B2
+%u15B3
+%u15B4
+%u15B5
+%u15B6
+%u15B7
+%u15B8
+%u15B9
+%u15BA
+%u15BB
+%u15BC
+%u15BD
+%u15BE
+%u15BF
+%u15C0
+%u15C1
+%u15C2
+%u15C3
+%u15C4
+%u15C5
+%u15C6
+%u15C7
+%u15C8
+%u15C9
+%u15CA
+%u15CB
+%u15CC
+%u15CD
+%u15CE
+%u15CF
+%u15D0
+%u15D1
+%u15D2
+%u15D3
+%u15D4
+%u15D5
+%u15D6
+%u15D7
+%u15D8
+%u15D9
+%u15DA
+%u15DB
+%u15DC
+%u15DD
+%u15DE
+%u15DF
+%u15E0
+%u15E1
+%u15E2
+%u15E3
+%u15E4
+%u15E5
+%u15E6
+%u15E7
+%u15E8
+%u15E9
+%u15EA
+%u15EB
+%u15EC
+%u15ED
+%u15EE
+%u15EF
+%u15F0
+%u15F1
+%u15F2
+%u15F3
+%u15F4
+%u15F5
+%u15F6
+%u15F7
+%u15F8
+%u15F9
+%u15FA
+%u15FB
+%u15FC
+%u15FD
+%u15FE
+%u15FF
+%u1600
+%u1601
+%u1602
+%u1603
+%u1604
+%u1605
+%u1606
+%u1607
+%u1608
+%u1609
+%u160A
+%u160B
+%u160C
+%u160D
+%u160E
+%u160F
+%u1610
+%u1611
+%u1612
+%u1613
+%u1614
+%u1615
+%u1616
+%u1617
+%u1618
+%u1619
+%u161A
+%u161B
+%u161C
+%u161D
+%u161E
+%u161F
+%u1620
+%u1621
+%u1622
+%u1623
+%u1624
+%u1625
+%u1626
+%u1627
+%u1628
+%u1629
+%u162A
+%u162B
+%u162C
+%u162D
+%u162E
+%u162F
+%u1630
+%u1631
+%u1632
+%u1633
+%u1634
+%u1635
+%u1636
+%u1637
+%u1638
+%u1639
+%u163A
+%u163B
+%u163C
+%u163D
+%u163E
+%u163F
+%u1640
+%u1641
+%u1642
+%u1643
+%u1644
+%u1645
+%u1646
+%u1647
+%u1648
+%u1649
+%u164A
+%u164B
+%u164C
+%u164D
+%u164E
+%u164F
+%u1650
+%u1651
+%u1652
+%u1653
+%u1654
+%u1655
+%u1656
+%u1657
+%u1658
+%u1659
+%u165A
+%u165B
+%u165C
+%u165D
+%u165E
+%u165F
+%u1660
+%u1661
+%u1662
+%u1663
+%u1664
+%u1665
+%u1666
+%u1667
+%u1668
+%u1669
+%u166A
+%u166B
+%u166C
+%u166D
+%u166E
+%u166F
+%u1670
+%u1671
+%u1672
+%u1673
+%u1674
+%u1675
+%u1676
+%u1677
+%u1678
+%u1679
+%u167A
+%u167B
+%u167C
+%u167D
+%u167E
+%u167F
+%u1680
+%u1681
+%u1682
+%u1683
+%u1684
+%u1685
+%u1686
+%u1687
+%u1688
+%u1689
+%u168A
+%u168B
+%u168C
+%u168D
+%u168E
+%u168F
+%u1690
+%u1691
+%u1692
+%u1693
+%u1694
+%u1695
+%u1696
+%u1697
+%u1698
+%u1699
+%u169A
+%u169B
+%u169C
+%u169D
+%u169E
+%u169F
+%u16A0
+%u16A1
+%u16A2
+%u16A3
+%u16A4
+%u16A5
+%u16A6
+%u16A7
+%u16A8
+%u16A9
+%u16AA
+%u16AB
+%u16AC
+%u16AD
+%u16AE
+%u16AF
+%u16B0
+%u16B1
+%u16B2
+%u16B3
+%u16B4
+%u16B5
+%u16B6
+%u16B7
+%u16B8
+%u16B9
+%u16BA
+%u16BB
+%u16BC
+%u16BD
+%u16BE
+%u16BF
+%u16C0
+%u16C1
+%u16C2
+%u16C3
+%u16C4
+%u16C5
+%u16C6
+%u16C7
+%u16C8
+%u16C9
+%u16CA
+%u16CB
+%u16CC
+%u16CD
+%u16CE
+%u16CF
+%u16D0
+%u16D1
+%u16D2
+%u16D3
+%u16D4
+%u16D5
+%u16D6
+%u16D7
+%u16D8
+%u16D9
+%u16DA
+%u16DB
+%u16DC
+%u16DD
+%u16DE
+%u16DF
+%u16E0
+%u16E1
+%u16E2
+%u16E3
+%u16E4
+%u16E5
+%u16E6
+%u16E7
+%u16E8
+%u16E9
+%u16EA
+%u16EB
+%u16EC
+%u16ED
+%u16EE
+%u16EF
+%u16F0
+%u16F1
+%u16F2
+%u16F3
+%u16F4
+%u16F5
+%u16F6
+%u16F7
+%u16F8
+%u16F9
+%u16FA
+%u16FB
+%u16FC
+%u16FD
+%u16FE
+%u16FF
+%u1700
+%u1701
+%u1702
+%u1703
+%u1704
+%u1705
+%u1706
+%u1707
+%u1708
+%u1709
+%u170A
+%u170B
+%u170C
+%u170D
+%u170E
+%u170F
+%u1710
+%u1711
+%u1712
+%u1713
+%u1714
+%u1715
+%u1716
+%u1717
+%u1718
+%u1719
+%u171A
+%u171B
+%u171C
+%u171D
+%u171E
+%u171F
+%u1720
+%u1721
+%u1722
+%u1723
+%u1724
+%u1725
+%u1726
+%u1727
+%u1728
+%u1729
+%u172A
+%u172B
+%u172C
+%u172D
+%u172E
+%u172F
+%u1730
+%u1731
+%u1732
+%u1733
+%u1734
+%u1735
+%u1736
+%u1737
+%u1738
+%u1739
+%u173A
+%u173B
+%u173C
+%u173D
+%u173E
+%u173F
+%u1740
+%u1741
+%u1742
+%u1743
+%u1744
+%u1745
+%u1746
+%u1747
+%u1748
+%u1749
+%u174A
+%u174B
+%u174C
+%u174D
+%u174E
+%u174F
+%u1750
+%u1751
+%u1752
+%u1753
+%u1754
+%u1755
+%u1756
+%u1757
+%u1758
+%u1759
+%u175A
+%u175B
+%u175C
+%u175D
+%u175E
+%u175F
+%u1760
+%u1761
+%u1762
+%u1763
+%u1764
+%u1765
+%u1766
+%u1767
+%u1768
+%u1769
+%u176A
+%u176B
+%u176C
+%u176D
+%u176E
+%u176F
+%u1770
+%u1771
+%u1772
+%u1773
+%u1774
+%u1775
+%u1776
+%u1777
+%u1778
+%u1779
+%u177A
+%u177B
+%u177C
+%u177D
+%u177E
+%u177F
+%u1780
+%u1781
+%u1782
+%u1783
+%u1784
+%u1785
+%u1786
+%u1787
+%u1788
+%u1789
+%u178A
+%u178B
+%u178C
+%u178D
+%u178E
+%u178F
+%u1790
+%u1791
+%u1792
+%u1793
+%u1794
+%u1795
+%u1796
+%u1797
+%u1798
+%u1799
+%u179A
+%u179B
+%u179C
+%u179D
+%u179E
+%u179F
+%u17A0
+%u17A1
+%u17A2
+%u17A3
+%u17A4
+%u17A5
+%u17A6
+%u17A7
+%u17A8
+%u17A9
+%u17AA
+%u17AB
+%u17AC
+%u17AD
+%u17AE
+%u17AF
+%u17B0
+%u17B1
+%u17B2
+%u17B3
+%u17B4
+%u17B5
+%u17B6
+%u17B7
+%u17B8
+%u17B9
+%u17BA
+%u17BB
+%u17BC
+%u17BD
+%u17BE
+%u17BF
+%u17C0
+%u17C1
+%u17C2
+%u17C3
+%u17C4
+%u17C5
+%u17C6
+%u17C7
+%u17C8
+%u17C9
+%u17CA
+%u17CB
+%u17CC
+%u17CD
+%u17CE
+%u17CF
+%u17D0
+%u17D1
+%u17D2
+%u17D3
+%u17D4
+%u17D5
+%u17D6
+%u17D7
+%u17D8
+%u17D9
+%u17DA
+%u17DB
+%u17DC
+%u17DD
+%u17DE
+%u17DF
+%u17E0
+%u17E1
+%u17E2
+%u17E3
+%u17E4
+%u17E5
+%u17E6
+%u17E7
+%u17E8
+%u17E9
+%u17EA
+%u17EB
+%u17EC
+%u17ED
+%u17EE
+%u17EF
+%u17F0
+%u17F1
+%u17F2
+%u17F3
+%u17F4
+%u17F5
+%u17F6
+%u17F7
+%u17F8
+%u17F9
+%u17FA
+%u17FB
+%u17FC
+%u17FD
+%u17FE
+%u17FF
+%u1800
+%u1801
+%u1802
+%u1803
+%u1804
+%u1805
+%u1806
+%u1807
+%u1808
+%u1809
+%u180A
+%u180B
+%u180C
+%u180D
+%u180E
+%u180F
+%u1810
+%u1811
+%u1812
+%u1813
+%u1814
+%u1815
+%u1816
+%u1817
+%u1818
+%u1819
+%u181A
+%u181B
+%u181C
+%u181D
+%u181E
+%u181F
+%u1820
+%u1821
+%u1822
+%u1823
+%u1824
+%u1825
+%u1826
+%u1827
+%u1828
+%u1829
+%u182A
+%u182B
+%u182C
+%u182D
+%u182E
+%u182F
+%u1830
+%u1831
+%u1832
+%u1833
+%u1834
+%u1835
+%u1836
+%u1837
+%u1838
+%u1839
+%u183A
+%u183B
+%u183C
+%u183D
+%u183E
+%u183F
+%u1840
+%u1841
+%u1842
+%u1843
+%u1844
+%u1845
+%u1846
+%u1847
+%u1848
+%u1849
+%u184A
+%u184B
+%u184C
+%u184D
+%u184E
+%u184F
+%u1850
+%u1851
+%u1852
+%u1853
+%u1854
+%u1855
+%u1856
+%u1857
+%u1858
+%u1859
+%u185A
+%u185B
+%u185C
+%u185D
+%u185E
+%u185F
+%u1860
+%u1861
+%u1862
+%u1863
+%u1864
+%u1865
+%u1866
+%u1867
+%u1868
+%u1869
+%u186A
+%u186B
+%u186C
+%u186D
+%u186E
+%u186F
+%u1870
+%u1871
+%u1872
+%u1873
+%u1874
+%u1875
+%u1876
+%u1877
+%u1878
+%u1879
+%u187A
+%u187B
+%u187C
+%u187D
+%u187E
+%u187F
+%u1880
+%u1881
+%u1882
+%u1883
+%u1884
+%u1885
+%u1886
+%u1887
+%u1888
+%u1889
+%u188A
+%u188B
+%u188C
+%u188D
+%u188E
+%u188F
+%u1890
+%u1891
+%u1892
+%u1893
+%u1894
+%u1895
+%u1896
+%u1897
+%u1898
+%u1899
+%u189A
+%u189B
+%u189C
+%u189D
+%u189E
+%u189F
+%u18A0
+%u18A1
+%u18A2
+%u18A3
+%u18A4
+%u18A5
+%u18A6
+%u18A7
+%u18A8
+%u18A9
+%u18AA
+%u18AB
+%u18AC
+%u18AD
+%u18AE
+%u18AF
+%u18B0
+%u18B1
+%u18B2
+%u18B3
+%u18B4
+%u18B5
+%u18B6
+%u18B7
+%u18B8
+%u18B9
+%u18BA
+%u18BB
+%u18BC
+%u18BD
+%u18BE
+%u18BF
+%u18C0
+%u18C1
+%u18C2
+%u18C3
+%u18C4
+%u18C5
+%u18C6
+%u18C7
+%u18C8
+%u18C9
+%u18CA
+%u18CB
+%u18CC
+%u18CD
+%u18CE
+%u18CF
+%u18D0
+%u18D1
+%u18D2
+%u18D3
+%u18D4
+%u18D5
+%u18D6
+%u18D7
+%u18D8
+%u18D9
+%u18DA
+%u18DB
+%u18DC
+%u18DD
+%u18DE
+%u18DF
+%u18E0
+%u18E1
+%u18E2
+%u18E3
+%u18E4
+%u18E5
+%u18E6
+%u18E7
+%u18E8
+%u18E9
+%u18EA
+%u18EB
+%u18EC
+%u18ED
+%u18EE
+%u18EF
+%u18F0
+%u18F1
+%u18F2
+%u18F3
+%u18F4
+%u18F5
+%u18F6
+%u18F7
+%u18F8
+%u18F9
+%u18FA
+%u18FB
+%u18FC
+%u18FD
+%u18FE
+%u18FF
+%u1900
+%u1901
+%u1902
+%u1903
+%u1904
+%u1905
+%u1906
+%u1907
+%u1908
+%u1909
+%u190A
+%u190B
+%u190C
+%u190D
+%u190E
+%u190F
+%u1910
+%u1911
+%u1912
+%u1913
+%u1914
+%u1915
+%u1916
+%u1917
+%u1918
+%u1919
+%u191A
+%u191B
+%u191C
+%u191D
+%u191E
+%u191F
+%u1920
+%u1921
+%u1922
+%u1923
+%u1924
+%u1925
+%u1926
+%u1927
+%u1928
+%u1929
+%u192A
+%u192B
+%u192C
+%u192D
+%u192E
+%u192F
+%u1930
+%u1931
+%u1932
+%u1933
+%u1934
+%u1935
+%u1936
+%u1937
+%u1938
+%u1939
+%u193A
+%u193B
+%u193C
+%u193D
+%u193E
+%u193F
+%u1940
+%u1941
+%u1942
+%u1943
+%u1944
+%u1945
+%u1946
+%u1947
+%u1948
+%u1949
+%u194A
+%u194B
+%u194C
+%u194D
+%u194E
+%u194F
+%u1950
+%u1951
+%u1952
+%u1953
+%u1954
+%u1955
+%u1956
+%u1957
+%u1958
+%u1959
+%u195A
+%u195B
+%u195C
+%u195D
+%u195E
+%u195F
+%u1960
+%u1961
+%u1962
+%u1963
+%u1964
+%u1965
+%u1966
+%u1967
+%u1968
+%u1969
+%u196A
+%u196B
+%u196C
+%u196D
+%u196E
+%u196F
+%u1970
+%u1971
+%u1972
+%u1973
+%u1974
+%u1975
+%u1976
+%u1977
+%u1978
+%u1979
+%u197A
+%u197B
+%u197C
+%u197D
+%u197E
+%u197F
+%u1980
+%u1981
+%u1982
+%u1983
+%u1984
+%u1985
+%u1986
+%u1987
+%u1988
+%u1989
+%u198A
+%u198B
+%u198C
+%u198D
+%u198E
+%u198F
+%u1990
+%u1991
+%u1992
+%u1993
+%u1994
+%u1995
+%u1996
+%u1997
+%u1998
+%u1999
+%u199A
+%u199B
+%u199C
+%u199D
+%u199E
+%u199F
+%u19A0
+%u19A1
+%u19A2
+%u19A3
+%u19A4
+%u19A5
+%u19A6
+%u19A7
+%u19A8
+%u19A9
+%u19AA
+%u19AB
+%u19AC
+%u19AD
+%u19AE
+%u19AF
+%u19B0
+%u19B1
+%u19B2
+%u19B3
+%u19B4
+%u19B5
+%u19B6
+%u19B7
+%u19B8
+%u19B9
+%u19BA
+%u19BB
+%u19BC
+%u19BD
+%u19BE
+%u19BF
+%u19C0
+%u19C1
+%u19C2
+%u19C3
+%u19C4
+%u19C5
+%u19C6
+%u19C7
+%u19C8
+%u19C9
+%u19CA
+%u19CB
+%u19CC
+%u19CD
+%u19CE
+%u19CF
+%u19D0
+%u19D1
+%u19D2
+%u19D3
+%u19D4
+%u19D5
+%u19D6
+%u19D7
+%u19D8
+%u19D9
+%u19DA
+%u19DB
+%u19DC
+%u19DD
+%u19DE
+%u19DF
+%u19E0
+%u19E1
+%u19E2
+%u19E3
+%u19E4
+%u19E5
+%u19E6
+%u19E7
+%u19E8
+%u19E9
+%u19EA
+%u19EB
+%u19EC
+%u19ED
+%u19EE
+%u19EF
+%u19F0
+%u19F1
+%u19F2
+%u19F3
+%u19F4
+%u19F5
+%u19F6
+%u19F7
+%u19F8
+%u19F9
+%u19FA
+%u19FB
+%u19FC
+%u19FD
+%u19FE
+%u19FF
+%u1A00
+%u1A01
+%u1A02
+%u1A03
+%u1A04
+%u1A05
+%u1A06
+%u1A07
+%u1A08
+%u1A09
+%u1A0A
+%u1A0B
+%u1A0C
+%u1A0D
+%u1A0E
+%u1A0F
+%u1A10
+%u1A11
+%u1A12
+%u1A13
+%u1A14
+%u1A15
+%u1A16
+%u1A17
+%u1A18
+%u1A19
+%u1A1A
+%u1A1B
+%u1A1C
+%u1A1D
+%u1A1E
+%u1A1F
+%u1A20
+%u1A21
+%u1A22
+%u1A23
+%u1A24
+%u1A25
+%u1A26
+%u1A27
+%u1A28
+%u1A29
+%u1A2A
+%u1A2B
+%u1A2C
+%u1A2D
+%u1A2E
+%u1A2F
+%u1A30
+%u1A31
+%u1A32
+%u1A33
+%u1A34
+%u1A35
+%u1A36
+%u1A37
+%u1A38
+%u1A39
+%u1A3A
+%u1A3B
+%u1A3C
+%u1A3D
+%u1A3E
+%u1A3F
+%u1A40
+%u1A41
+%u1A42
+%u1A43
+%u1A44
+%u1A45
+%u1A46
+%u1A47
+%u1A48
+%u1A49
+%u1A4A
+%u1A4B
+%u1A4C
+%u1A4D
+%u1A4E
+%u1A4F
+%u1A50
+%u1A51
+%u1A52
+%u1A53
+%u1A54
+%u1A55
+%u1A56
+%u1A57
+%u1A58
+%u1A59
+%u1A5A
+%u1A5B
+%u1A5C
+%u1A5D
+%u1A5E
+%u1A5F
+%u1A60
+%u1A61
+%u1A62
+%u1A63
+%u1A64
+%u1A65
+%u1A66
+%u1A67
+%u1A68
+%u1A69
+%u1A6A
+%u1A6B
+%u1A6C
+%u1A6D
+%u1A6E
+%u1A6F
+%u1A70
+%u1A71
+%u1A72
+%u1A73
+%u1A74
+%u1A75
+%u1A76
+%u1A77
+%u1A78
+%u1A79
+%u1A7A
+%u1A7B
+%u1A7C
+%u1A7D
+%u1A7E
+%u1A7F
+%u1A80
+%u1A81
+%u1A82
+%u1A83
+%u1A84
+%u1A85
+%u1A86
+%u1A87
+%u1A88
+%u1A89
+%u1A8A
+%u1A8B
+%u1A8C
+%u1A8D
+%u1A8E
+%u1A8F
+%u1A90
+%u1A91
+%u1A92
+%u1A93
+%u1A94
+%u1A95
+%u1A96
+%u1A97
+%u1A98
+%u1A99
+%u1A9A
+%u1A9B
+%u1A9C
+%u1A9D
+%u1A9E
+%u1A9F
+%u1AA0
+%u1AA1
+%u1AA2
+%u1AA3
+%u1AA4
+%u1AA5
+%u1AA6
+%u1AA7
+%u1AA8
+%u1AA9
+%u1AAA
+%u1AAB
+%u1AAC
+%u1AAD
+%u1AAE
+%u1AAF
+%u1AB0
+%u1AB1
+%u1AB2
+%u1AB3
+%u1AB4
+%u1AB5
+%u1AB6
+%u1AB7
+%u1AB8
+%u1AB9
+%u1ABA
+%u1ABB
+%u1ABC
+%u1ABD
+%u1ABE
+%u1ABF
+%u1AC0
+%u1AC1
+%u1AC2
+%u1AC3
+%u1AC4
+%u1AC5
+%u1AC6
+%u1AC7
+%u1AC8
+%u1AC9
+%u1ACA
+%u1ACB
+%u1ACC
+%u1ACD
+%u1ACE
+%u1ACF
+%u1AD0
+%u1AD1
+%u1AD2
+%u1AD3
+%u1AD4
+%u1AD5
+%u1AD6
+%u1AD7
+%u1AD8
+%u1AD9
+%u1ADA
+%u1ADB
+%u1ADC
+%u1ADD
+%u1ADE
+%u1ADF
+%u1AE0
+%u1AE1
+%u1AE2
+%u1AE3
+%u1AE4
+%u1AE5
+%u1AE6
+%u1AE7
+%u1AE8
+%u1AE9
+%u1AEA
+%u1AEB
+%u1AEC
+%u1AED
+%u1AEE
+%u1AEF
+%u1AF0
+%u1AF1
+%u1AF2
+%u1AF3
+%u1AF4
+%u1AF5
+%u1AF6
+%u1AF7
+%u1AF8
+%u1AF9
+%u1AFA
+%u1AFB
+%u1AFC
+%u1AFD
+%u1AFE
+%u1AFF
+%u1B00
+%u1B01
+%u1B02
+%u1B03
+%u1B04
+%u1B05
+%u1B06
+%u1B07
+%u1B08
+%u1B09
+%u1B0A
+%u1B0B
+%u1B0C
+%u1B0D
+%u1B0E
+%u1B0F
+%u1B10
+%u1B11
+%u1B12
+%u1B13
+%u1B14
+%u1B15
+%u1B16
+%u1B17
+%u1B18
+%u1B19
+%u1B1A
+%u1B1B
+%u1B1C
+%u1B1D
+%u1B1E
+%u1B1F
+%u1B20
+%u1B21
+%u1B22
+%u1B23
+%u1B24
+%u1B25
+%u1B26
+%u1B27
+%u1B28
+%u1B29
+%u1B2A
+%u1B2B
+%u1B2C
+%u1B2D
+%u1B2E
+%u1B2F
+%u1B30
+%u1B31
+%u1B32
+%u1B33
+%u1B34
+%u1B35
+%u1B36
+%u1B37
+%u1B38
+%u1B39
+%u1B3A
+%u1B3B
+%u1B3C
+%u1B3D
+%u1B3E
+%u1B3F
+%u1B40
+%u1B41
+%u1B42
+%u1B43
+%u1B44
+%u1B45
+%u1B46
+%u1B47
+%u1B48
+%u1B49
+%u1B4A
+%u1B4B
+%u1B4C
+%u1B4D
+%u1B4E
+%u1B4F
+%u1B50
+%u1B51
+%u1B52
+%u1B53
+%u1B54
+%u1B55
+%u1B56
+%u1B57
+%u1B58
+%u1B59
+%u1B5A
+%u1B5B
+%u1B5C
+%u1B5D
+%u1B5E
+%u1B5F
+%u1B60
+%u1B61
+%u1B62
+%u1B63
+%u1B64
+%u1B65
+%u1B66
+%u1B67
+%u1B68
+%u1B69
+%u1B6A
+%u1B6B
+%u1B6C
+%u1B6D
+%u1B6E
+%u1B6F
+%u1B70
+%u1B71
+%u1B72
+%u1B73
+%u1B74
+%u1B75
+%u1B76
+%u1B77
+%u1B78
+%u1B79
+%u1B7A
+%u1B7B
+%u1B7C
+%u1B7D
+%u1B7E
+%u1B7F
+%u1B80
+%u1B81
+%u1B82
+%u1B83
+%u1B84
+%u1B85
+%u1B86
+%u1B87
+%u1B88
+%u1B89
+%u1B8A
+%u1B8B
+%u1B8C
+%u1B8D
+%u1B8E
+%u1B8F
+%u1B90
+%u1B91
+%u1B92
+%u1B93
+%u1B94
+%u1B95
+%u1B96
+%u1B97
+%u1B98
+%u1B99
+%u1B9A
+%u1B9B
+%u1B9C
+%u1B9D
+%u1B9E
+%u1B9F
+%u1BA0
+%u1BA1
+%u1BA2
+%u1BA3
+%u1BA4
+%u1BA5
+%u1BA6
+%u1BA7
+%u1BA8
+%u1BA9
+%u1BAA
+%u1BAB
+%u1BAC
+%u1BAD
+%u1BAE
+%u1BAF
+%u1BB0
+%u1BB1
+%u1BB2
+%u1BB3
+%u1BB4
+%u1BB5
+%u1BB6
+%u1BB7
+%u1BB8
+%u1BB9
+%u1BBA
+%u1BBB
+%u1BBC
+%u1BBD
+%u1BBE
+%u1BBF
+%u1BC0
+%u1BC1
+%u1BC2
+%u1BC3
+%u1BC4
+%u1BC5
+%u1BC6
+%u1BC7
+%u1BC8
+%u1BC9
+%u1BCA
+%u1BCB
+%u1BCC
+%u1BCD
+%u1BCE
+%u1BCF
+%u1BD0
+%u1BD1
+%u1BD2
+%u1BD3
+%u1BD4
+%u1BD5
+%u1BD6
+%u1BD7
+%u1BD8
+%u1BD9
+%u1BDA
+%u1BDB
+%u1BDC
+%u1BDD
+%u1BDE
+%u1BDF
+%u1BE0
+%u1BE1
+%u1BE2
+%u1BE3
+%u1BE4
+%u1BE5
+%u1BE6
+%u1BE7
+%u1BE8
+%u1BE9
+%u1BEA
+%u1BEB
+%u1BEC
+%u1BED
+%u1BEE
+%u1BEF
+%u1BF0
+%u1BF1
+%u1BF2
+%u1BF3
+%u1BF4
+%u1BF5
+%u1BF6
+%u1BF7
+%u1BF8
+%u1BF9
+%u1BFA
+%u1BFB
+%u1BFC
+%u1BFD
+%u1BFE
+%u1BFF
+%u1C00
+%u1C01
+%u1C02
+%u1C03
+%u1C04
+%u1C05
+%u1C06
+%u1C07
+%u1C08
+%u1C09
+%u1C0A
+%u1C0B
+%u1C0C
+%u1C0D
+%u1C0E
+%u1C0F
+%u1C10
+%u1C11
+%u1C12
+%u1C13
+%u1C14
+%u1C15
+%u1C16
+%u1C17
+%u1C18
+%u1C19
+%u1C1A
+%u1C1B
+%u1C1C
+%u1C1D
+%u1C1E
+%u1C1F
+%u1C20
+%u1C21
+%u1C22
+%u1C23
+%u1C24
+%u1C25
+%u1C26
+%u1C27
+%u1C28
+%u1C29
+%u1C2A
+%u1C2B
+%u1C2C
+%u1C2D
+%u1C2E
+%u1C2F
+%u1C30
+%u1C31
+%u1C32
+%u1C33
+%u1C34
+%u1C35
+%u1C36
+%u1C37
+%u1C38
+%u1C39
+%u1C3A
+%u1C3B
+%u1C3C
+%u1C3D
+%u1C3E
+%u1C3F
+%u1C40
+%u1C41
+%u1C42
+%u1C43
+%u1C44
+%u1C45
+%u1C46
+%u1C47
+%u1C48
+%u1C49
+%u1C4A
+%u1C4B
+%u1C4C
+%u1C4D
+%u1C4E
+%u1C4F
+%u1C50
+%u1C51
+%u1C52
+%u1C53
+%u1C54
+%u1C55
+%u1C56
+%u1C57
+%u1C58
+%u1C59
+%u1C5A
+%u1C5B
+%u1C5C
+%u1C5D
+%u1C5E
+%u1C5F
+%u1C60
+%u1C61
+%u1C62
+%u1C63
+%u1C64
+%u1C65
+%u1C66
+%u1C67
+%u1C68
+%u1C69
+%u1C6A
+%u1C6B
+%u1C6C
+%u1C6D
+%u1C6E
+%u1C6F
+%u1C70
+%u1C71
+%u1C72
+%u1C73
+%u1C74
+%u1C75
+%u1C76
+%u1C77
+%u1C78
+%u1C79
+%u1C7A
+%u1C7B
+%u1C7C
+%u1C7D
+%u1C7E
+%u1C7F
+%u1C80
+%u1C81
+%u1C82
+%u1C83
+%u1C84
+%u1C85
+%u1C86
+%u1C87
+%u1C88
+%u1C89
+%u1C8A
+%u1C8B
+%u1C8C
+%u1C8D
+%u1C8E
+%u1C8F
+%u1C90
+%u1C91
+%u1C92
+%u1C93
+%u1C94
+%u1C95
+%u1C96
+%u1C97
+%u1C98
+%u1C99
+%u1C9A
+%u1C9B
+%u1C9C
+%u1C9D
+%u1C9E
+%u1C9F
+%u1CA0
+%u1CA1
+%u1CA2
+%u1CA3
+%u1CA4
+%u1CA5
+%u1CA6
+%u1CA7
+%u1CA8
+%u1CA9
+%u1CAA
+%u1CAB
+%u1CAC
+%u1CAD
+%u1CAE
+%u1CAF
+%u1CB0
+%u1CB1
+%u1CB2
+%u1CB3
+%u1CB4
+%u1CB5
+%u1CB6
+%u1CB7
+%u1CB8
+%u1CB9
+%u1CBA
+%u1CBB
+%u1CBC
+%u1CBD
+%u1CBE
+%u1CBF
+%u1CC0
+%u1CC1
+%u1CC2
+%u1CC3
+%u1CC4
+%u1CC5
+%u1CC6
+%u1CC7
+%u1CC8
+%u1CC9
+%u1CCA
+%u1CCB
+%u1CCC
+%u1CCD
+%u1CCE
+%u1CCF
+%u1CD0
+%u1CD1
+%u1CD2
+%u1CD3
+%u1CD4
+%u1CD5
+%u1CD6
+%u1CD7
+%u1CD8
+%u1CD9
+%u1CDA
+%u1CDB
+%u1CDC
+%u1CDD
+%u1CDE
+%u1CDF
+%u1CE0
+%u1CE1
+%u1CE2
+%u1CE3
+%u1CE4
+%u1CE5
+%u1CE6
+%u1CE7
+%u1CE8
+%u1CE9
+%u1CEA
+%u1CEB
+%u1CEC
+%u1CED
+%u1CEE
+%u1CEF
+%u1CF0
+%u1CF1
+%u1CF2
+%u1CF3
+%u1CF4
+%u1CF5
+%u1CF6
+%u1CF7
+%u1CF8
+%u1CF9
+%u1CFA
+%u1CFB
+%u1CFC
+%u1CFD
+%u1CFE
+%u1CFF
+%u1D00
+%u1D01
+%u1D02
+%u1D03
+%u1D04
+%u1D05
+%u1D06
+%u1D07
+%u1D08
+%u1D09
+%u1D0A
+%u1D0B
+%u1D0C
+%u1D0D
+%u1D0E
+%u1D0F
+%u1D10
+%u1D11
+%u1D12
+%u1D13
+%u1D14
+%u1D15
+%u1D16
+%u1D17
+%u1D18
+%u1D19
+%u1D1A
+%u1D1B
+%u1D1C
+%u1D1D
+%u1D1E
+%u1D1F
+%u1D20
+%u1D21
+%u1D22
+%u1D23
+%u1D24
+%u1D25
+%u1D26
+%u1D27
+%u1D28
+%u1D29
+%u1D2A
+%u1D2B
+%u1D2C
+%u1D2D
+%u1D2E
+%u1D2F
+%u1D30
+%u1D31
+%u1D32
+%u1D33
+%u1D34
+%u1D35
+%u1D36
+%u1D37
+%u1D38
+%u1D39
+%u1D3A
+%u1D3B
+%u1D3C
+%u1D3D
+%u1D3E
+%u1D3F
+%u1D40
+%u1D41
+%u1D42
+%u1D43
+%u1D44
+%u1D45
+%u1D46
+%u1D47
+%u1D48
+%u1D49
+%u1D4A
+%u1D4B
+%u1D4C
+%u1D4D
+%u1D4E
+%u1D4F
+%u1D50
+%u1D51
+%u1D52
+%u1D53
+%u1D54
+%u1D55
+%u1D56
+%u1D57
+%u1D58
+%u1D59
+%u1D5A
+%u1D5B
+%u1D5C
+%u1D5D
+%u1D5E
+%u1D5F
+%u1D60
+%u1D61
+%u1D62
+%u1D63
+%u1D64
+%u1D65
+%u1D66
+%u1D67
+%u1D68
+%u1D69
+%u1D6A
+%u1D6B
+%u1D6C
+%u1D6D
+%u1D6E
+%u1D6F
+%u1D70
+%u1D71
+%u1D72
+%u1D73
+%u1D74
+%u1D75
+%u1D76
+%u1D77
+%u1D78
+%u1D79
+%u1D7A
+%u1D7B
+%u1D7C
+%u1D7D
+%u1D7E
+%u1D7F
+%u1D80
+%u1D81
+%u1D82
+%u1D83
+%u1D84
+%u1D85
+%u1D86
+%u1D87
+%u1D88
+%u1D89
+%u1D8A
+%u1D8B
+%u1D8C
+%u1D8D
+%u1D8E
+%u1D8F
+%u1D90
+%u1D91
+%u1D92
+%u1D93
+%u1D94
+%u1D95
+%u1D96
+%u1D97
+%u1D98
+%u1D99
+%u1D9A
+%u1D9B
+%u1D9C
+%u1D9D
+%u1D9E
+%u1D9F
+%u1DA0
+%u1DA1
+%u1DA2
+%u1DA3
+%u1DA4
+%u1DA5
+%u1DA6
+%u1DA7
+%u1DA8
+%u1DA9
+%u1DAA
+%u1DAB
+%u1DAC
+%u1DAD
+%u1DAE
+%u1DAF
+%u1DB0
+%u1DB1
+%u1DB2
+%u1DB3
+%u1DB4
+%u1DB5
+%u1DB6
+%u1DB7
+%u1DB8
+%u1DB9
+%u1DBA
+%u1DBB
+%u1DBC
+%u1DBD
+%u1DBE
+%u1DBF
+%u1DC0
+%u1DC1
+%u1DC2
+%u1DC3
+%u1DC4
+%u1DC5
+%u1DC6
+%u1DC7
+%u1DC8
+%u1DC9
+%u1DCA
+%u1DCB
+%u1DCC
+%u1DCD
+%u1DCE
+%u1DCF
+%u1DD0
+%u1DD1
+%u1DD2
+%u1DD3
+%u1DD4
+%u1DD5
+%u1DD6
+%u1DD7
+%u1DD8
+%u1DD9
+%u1DDA
+%u1DDB
+%u1DDC
+%u1DDD
+%u1DDE
+%u1DDF
+%u1DE0
+%u1DE1
+%u1DE2
+%u1DE3
+%u1DE4
+%u1DE5
+%u1DE6
+%u1DE7
+%u1DE8
+%u1DE9
+%u1DEA
+%u1DEB
+%u1DEC
+%u1DED
+%u1DEE
+%u1DEF
+%u1DF0
+%u1DF1
+%u1DF2
+%u1DF3
+%u1DF4
+%u1DF5
+%u1DF6
+%u1DF7
+%u1DF8
+%u1DF9
+%u1DFA
+%u1DFB
+%u1DFC
+%u1DFD
+%u1DFE
+%u1DFF
+%u1E00
+%u1E01
+%u1E02
+%u1E03
+%u1E04
+%u1E05
+%u1E06
+%u1E07
+%u1E08
+%u1E09
+%u1E0A
+%u1E0B
+%u1E0C
+%u1E0D
+%u1E0E
+%u1E0F
+%u1E10
+%u1E11
+%u1E12
+%u1E13
+%u1E14
+%u1E15
+%u1E16
+%u1E17
+%u1E18
+%u1E19
+%u1E1A
+%u1E1B
+%u1E1C
+%u1E1D
+%u1E1E
+%u1E1F
+%u1E20
+%u1E21
+%u1E22
+%u1E23
+%u1E24
+%u1E25
+%u1E26
+%u1E27
+%u1E28
+%u1E29
+%u1E2A
+%u1E2B
+%u1E2C
+%u1E2D
+%u1E2E
+%u1E2F
+%u1E30
+%u1E31
+%u1E32
+%u1E33
+%u1E34
+%u1E35
+%u1E36
+%u1E37
+%u1E38
+%u1E39
+%u1E3A
+%u1E3B
+%u1E3C
+%u1E3D
+%u1E3E
+%u1E3F
+%u1E40
+%u1E41
+%u1E42
+%u1E43
+%u1E44
+%u1E45
+%u1E46
+%u1E47
+%u1E48
+%u1E49
+%u1E4A
+%u1E4B
+%u1E4C
+%u1E4D
+%u1E4E
+%u1E4F
+%u1E50
+%u1E51
+%u1E52
+%u1E53
+%u1E54
+%u1E55
+%u1E56
+%u1E57
+%u1E58
+%u1E59
+%u1E5A
+%u1E5B
+%u1E5C
+%u1E5D
+%u1E5E
+%u1E5F
+%u1E60
+%u1E61
+%u1E62
+%u1E63
+%u1E64
+%u1E65
+%u1E66
+%u1E67
+%u1E68
+%u1E69
+%u1E6A
+%u1E6B
+%u1E6C
+%u1E6D
+%u1E6E
+%u1E6F
+%u1E70
+%u1E71
+%u1E72
+%u1E73
+%u1E74
+%u1E75
+%u1E76
+%u1E77
+%u1E78
+%u1E79
+%u1E7A
+%u1E7B
+%u1E7C
+%u1E7D
+%u1E7E
+%u1E7F
+%u1E80
+%u1E81
+%u1E82
+%u1E83
+%u1E84
+%u1E85
+%u1E86
+%u1E87
+%u1E88
+%u1E89
+%u1E8A
+%u1E8B
+%u1E8C
+%u1E8D
+%u1E8E
+%u1E8F
+%u1E90
+%u1E91
+%u1E92
+%u1E93
+%u1E94
+%u1E95
+%u1E96
+%u1E97
+%u1E98
+%u1E99
+%u1E9A
+%u1E9B
+%u1E9C
+%u1E9D
+%u1E9E
+%u1E9F
+%u1EA0
+%u1EA1
+%u1EA2
+%u1EA3
+%u1EA4
+%u1EA5
+%u1EA6
+%u1EA7
+%u1EA8
+%u1EA9
+%u1EAA
+%u1EAB
+%u1EAC
+%u1EAD
+%u1EAE
+%u1EAF
+%u1EB0
+%u1EB1
+%u1EB2
+%u1EB3
+%u1EB4
+%u1EB5
+%u1EB6
+%u1EB7
+%u1EB8
+%u1EB9
+%u1EBA
+%u1EBB
+%u1EBC
+%u1EBD
+%u1EBE
+%u1EBF
+%u1EC0
+%u1EC1
+%u1EC2
+%u1EC3
+%u1EC4
+%u1EC5
+%u1EC6
+%u1EC7
+%u1EC8
+%u1EC9
+%u1ECA
+%u1ECB
+%u1ECC
+%u1ECD
+%u1ECE
+%u1ECF
+%u1ED0
+%u1ED1
+%u1ED2
+%u1ED3
+%u1ED4
+%u1ED5
+%u1ED6
+%u1ED7
+%u1ED8
+%u1ED9
+%u1EDA
+%u1EDB
+%u1EDC
+%u1EDD
+%u1EDE
+%u1EDF
+%u1EE0
+%u1EE1
+%u1EE2
+%u1EE3
+%u1EE4
+%u1EE5
+%u1EE6
+%u1EE7
+%u1EE8
+%u1EE9
+%u1EEA
+%u1EEB
+%u1EEC
+%u1EED
+%u1EEE
+%u1EEF
+%u1EF0
+%u1EF1
+%u1EF2
+%u1EF3
+%u1EF4
+%u1EF5
+%u1EF6
+%u1EF7
+%u1EF8
+%u1EF9
+%u1EFA
+%u1EFB
+%u1EFC
+%u1EFD
+%u1EFE
+%u1EFF
+%u1F00
+%u1F01
+%u1F02
+%u1F03
+%u1F04
+%u1F05
+%u1F06
+%u1F07
+%u1F08
+%u1F09
+%u1F0A
+%u1F0B
+%u1F0C
+%u1F0D
+%u1F0E
+%u1F0F
+%u1F10
+%u1F11
+%u1F12
+%u1F13
+%u1F14
+%u1F15
+%u1F16
+%u1F17
+%u1F18
+%u1F19
+%u1F1A
+%u1F1B
+%u1F1C
+%u1F1D
+%u1F1E
+%u1F1F
+%u1F20
+%u1F21
+%u1F22
+%u1F23
+%u1F24
+%u1F25
+%u1F26
+%u1F27
+%u1F28
+%u1F29
+%u1F2A
+%u1F2B
+%u1F2C
+%u1F2D
+%u1F2E
+%u1F2F
+%u1F30
+%u1F31
+%u1F32
+%u1F33
+%u1F34
+%u1F35
+%u1F36
+%u1F37
+%u1F38
+%u1F39
+%u1F3A
+%u1F3B
+%u1F3C
+%u1F3D
+%u1F3E
+%u1F3F
+%u1F40
+%u1F41
+%u1F42
+%u1F43
+%u1F44
+%u1F45
+%u1F46
+%u1F47
+%u1F48
+%u1F49
+%u1F4A
+%u1F4B
+%u1F4C
+%u1F4D
+%u1F4E
+%u1F4F
+%u1F50
+%u1F51
+%u1F52
+%u1F53
+%u1F54
+%u1F55
+%u1F56
+%u1F57
+%u1F58
+%u1F59
+%u1F5A
+%u1F5B
+%u1F5C
+%u1F5D
+%u1F5E
+%u1F5F
+%u1F60
+%u1F61
+%u1F62
+%u1F63
+%u1F64
+%u1F65
+%u1F66
+%u1F67
+%u1F68
+%u1F69
+%u1F6A
+%u1F6B
+%u1F6C
+%u1F6D
+%u1F6E
+%u1F6F
+%u1F70
+%u1F71
+%u1F72
+%u1F73
+%u1F74
+%u1F75
+%u1F76
+%u1F77
+%u1F78
+%u1F79
+%u1F7A
+%u1F7B
+%u1F7C
+%u1F7D
+%u1F7E
+%u1F7F
+%u1F80
+%u1F81
+%u1F82
+%u1F83
+%u1F84
+%u1F85
+%u1F86
+%u1F87
+%u1F88
+%u1F89
+%u1F8A
+%u1F8B
+%u1F8C
+%u1F8D
+%u1F8E
+%u1F8F
+%u1F90
+%u1F91
+%u1F92
+%u1F93
+%u1F94
+%u1F95
+%u1F96
+%u1F97
+%u1F98
+%u1F99
+%u1F9A
+%u1F9B
+%u1F9C
+%u1F9D
+%u1F9E
+%u1F9F
+%u1FA0
+%u1FA1
+%u1FA2
+%u1FA3
+%u1FA4
+%u1FA5
+%u1FA6
+%u1FA7
+%u1FA8
+%u1FA9
+%u1FAA
+%u1FAB
+%u1FAC
+%u1FAD
+%u1FAE
+%u1FAF
+%u1FB0
+%u1FB1
+%u1FB2
+%u1FB3
+%u1FB4
+%u1FB5
+%u1FB6
+%u1FB7
+%u1FB8
+%u1FB9
+%u1FBA
+%u1FBB
+%u1FBC
+%u1FBD
+%u1FBE
+%u1FBF
+%u1FC0
+%u1FC1
+%u1FC2
+%u1FC3
+%u1FC4
+%u1FC5
+%u1FC6
+%u1FC7
+%u1FC8
+%u1FC9
+%u1FCA
+%u1FCB
+%u1FCC
+%u1FCD
+%u1FCE
+%u1FCF
+%u1FD0
+%u1FD1
+%u1FD2
+%u1FD3
+%u1FD4
+%u1FD5
+%u1FD6
+%u1FD7
+%u1FD8
+%u1FD9
+%u1FDA
+%u1FDB
+%u1FDC
+%u1FDD
+%u1FDE
+%u1FDF
+%u1FE0
+%u1FE1
+%u1FE2
+%u1FE3
+%u1FE4
+%u1FE5
+%u1FE6
+%u1FE7
+%u1FE8
+%u1FE9
+%u1FEA
+%u1FEB
+%u1FEC
+%u1FED
+%u1FEE
+%u1FEF
+%u1FF0
+%u1FF1
+%u1FF2
+%u1FF3
+%u1FF4
+%u1FF5
+%u1FF6
+%u1FF7
+%u1FF8
+%u1FF9
+%u1FFA
+%u1FFB
+%u1FFC
+%u1FFD
+%u1FFE
+%u1FFF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016542.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016542: String.prototype.replace called with function argument should not replace $ patterns
+ *
+ * @test
+ * @run
+ */
+
+print("abc".replace("a", "$&"));
+print("abc".replace("b", "$&"));
+print("abc".replace("c", "$&"));
+
+print("abc".replace("a", function(){return "$&"}));
+print("abc".replace("b", function(){return "$&"}));
+print("abc".replace("c", function(){return "$&"}));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016542.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,6 @@
+abc
+abc
+abc
+$&bc
+a$&c
+ab$&
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016618.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016618: script mirror object access should be improved
+ *
+ * @test
+ * @option -scripting
+ * @option -strict
+ * @run
+ */
+
+var global = loadWithNewGlobal({
+ name: "code",
+ script: <<EOF
+var x = 33;
+
+function func(x, y) {
+ print('func.x = ' + x);
+ print('func.x = ' + y)
+};
+
+var obj = {
+ foo: 'hello',
+ bar: 42
+};
+
+Object.defineProperty(obj, "bar",
+ { enumerable: false, writable: false });
+
+// return global
+this;
+EOF
+});
+
+// load on mirror with local object as argument
+global.load({
+ name: "code",
+ script: "print('x = ' + x)"
+});
+
+function f() {
+ // mirror function called with local arguments
+ global.func.apply(obj, arguments);
+}
+
+f(23, "hello");
+
+var fObject = global.eval("Object");
+
+// instanceof on mirrors
+print("global instanceof fObject? " + (global instanceof fObject));
+
+// Object API on mirrors
+
+var desc = Object.getOwnPropertyDescriptor(global, "x");
+print("x is wriable ? " + desc.writable);
+print("x value = " + desc.value);
+
+var proto = Object.getPrototypeOf(global);
+print("global's __proto__ " + proto);
+
+var obj = global.obj;
+var keys = Object.keys(obj);
+print("Object.keys on obj");
+for (var i in keys) {
+ print(keys[i]);
+}
+
+print("Object.getOwnProperties on obj");
+var keys = Object.getOwnPropertyNames(obj);
+for (var i in keys) {
+ print(keys[i]);
+}
+
+// mirror array access
+var array = global.eval("[334, 55, 65]");
+Array.prototype.forEach.call(array, function(elem) {
+ print("forEach " + elem)
+});
+
+print("reduceRight " + Array.prototype.reduceRight.call(array,
+ function(previousValue, currentValue, index, array) {
+ print("reduceRight cur value " + currentValue);
+ return previousValue + currentValue;
+}, 0));
+
+print("reduce " + Array.prototype.reduce.call(array,
+ function(previousValue, currentValue, index, array) {
+ print("reduce cur value " + currentValue);
+ return previousValue + currentValue;
+}, 0));
+
+print("forEach");
+Array.prototype.forEach.call(array, function(o) {
+ print(o);
+});
+
+print("Array.isArray(array)? " + Array.isArray(array));
+
+// try to write to a non-writable property of mirror
+try {
+ obj.bar = 33;
+} catch (e) {
+ print(e);
+}
+
+// mirror function called with local callback
+print("forEach on mirror");
+array.forEach(function(toto) {
+ print(toto);
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8016618.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,33 @@
+x = 33
+func.x = 23
+func.x = hello
+global instanceof fObject? true
+x is wriable ? true
+x value = 33
+global's __proto__ [object Object]
+Object.keys on obj
+foo
+Object.getOwnProperties on obj
+foo
+bar
+forEach 334
+forEach 55
+forEach 65
+reduceRight cur value 65
+reduceRight cur value 55
+reduceRight cur value 334
+reduceRight 454
+reduce cur value 334
+reduce cur value 55
+reduce cur value 65
+reduce 454
+forEach
+334
+55
+65
+Array.isArray(array)? true
+TypeError: "bar" is not a writable property of [object Object]
+forEach on mirror
+334
+55
+65
--- a/nashorn/test/script/basic/moduleload.js Sun Jun 16 22:38:17 2013 -0700
+++ b/nashorn/test/script/basic/moduleload.js Tue Jun 18 13:25:24 2013 +0530
@@ -25,7 +25,6 @@
* This loads "module.js" and calls the anonymous top-level function from it.
*
* @test
- * @option --anon-functions
* @run
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/error/JDK-8016522.js Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8016522: Numeric literal must not be followed by IdentifierStart
+ *
+ * @test/compile-error
+ */
+
+3in {};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/error/JDK-8016522.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530
@@ -0,0 +1,3 @@
+test/script/error/JDK-8016522.js:30:1 Missing space after numeric literal
+3in {};
+ ^