From 61fcfb8ec0533f7cfbb4e3279740b985790edd59 Mon Sep 17 00:00:00 2001 From: Honfika Date: Sat, 19 Apr 2014 14:38:06 +0200 Subject: [PATCH] frame SVG export, cleanup, (java) code formatting --- trunk/src/com/jpexs/decompiler/flash/SWF.java | 71 +- .../decompiler/flash/abc/avm2/AVM2Code.java | 432 +- .../avm2/instructions/AVM2Instruction.java | 2 +- .../instructions/other/GetPropertyIns.java | 4 +- .../instructions/other/SetPropertyIns.java | 7 +- .../flash/abc/avm2/model/CoerceAVM2Item.java | 2 +- .../abc/avm2/model/DefaultXMLNamespace.java | 3 +- .../abc/avm2/model/EscapeXAttrAVM2Item.java | 3 +- .../abc/avm2/model/EscapeXElemAVM2Item.java | 4 +- .../avm2/model/GetDescendantsAVM2Item.java | 8 +- .../operations/DeletePropertyAVM2Item.java | 1 - .../parser/script/AVM2SourceGenerator.java | 206 +- .../avm2/parser/script/ActionScriptLexer.java | 4010 +++++++++-------- .../parser/script/ActionScriptParser.java | 5 +- .../abc/avm2/parser/script/ConstAVM2Item.java | 2 +- .../script/ConstructSomethingAVM2Item.java | 52 +- .../avm2/parser/script/GetterAVM2Item.java | 2 +- .../abc/avm2/parser/script/NameAVM2Item.java | 12 +- .../parser/script/NamespacedAVM2Item.java | 45 +- .../avm2/parser/script/PropertyAVM2Item.java | 10 +- .../avm2/parser/script/SetterAVM2Item.java | 4 +- .../parser/script/UnresolvedAVM2Item.java | 28 +- .../abc/avm2/parser/script/XMLAVM2Item.java | 15 +- .../avm2/parser/script/XMLFilterAVM2Item.java | 12 +- .../parser/script/ActionSourceGenerator.java | 3 +- .../flash/exporters/BitmapExporter.java | 2 +- .../flash/exporters/SVGExporter.java | 21 +- .../flash/exporters/SVGExporterContext.java | 12 +- .../exporters/morphshape/CurvedMorphEdge.java | 2 +- .../morphshape/MorphShapeExporterBase.java | 14 +- .../morphshape/SVGMorphShapeExporter.java | 14 +- .../exporters/shape/ShapeExporterBase.java | 6 +- .../flash/tags/DefineEditTextTag.java | 7 +- .../flash/tags/DefineMorphShape2Tag.java | 2 +- .../flash/tags/DefineMorphShapeTag.java | 2 +- .../flash/tags/DefineShape2Tag.java | 2 +- .../flash/tags/DefineShape3Tag.java | 2 +- .../flash/tags/DefineShape4Tag.java | 2 +- .../decompiler/flash/tags/DefineShapeTag.java | 2 +- .../flash/tags/DefineSpriteTag.java | 6 +- .../decompiler/flash/tags/DefineText2Tag.java | 7 +- .../decompiler/flash/tags/DefineTextTag.java | 5 +- .../decompiler/flash/tags/base/ButtonTag.java | 7 +- .../flash/tags/base/DrawableTag.java | 3 +- .../decompiler/flash/tags/base/FontTag.java | 5 +- .../flash/tags/base/MorphShapeTag.java | 2 +- .../src/com/jpexs/decompiler/graph/Graph.java | 26 +- .../decompiler/graph/SourceGenerator.java | 2 +- .../com/jpexs/decompiler/graph/TypeItem.java | 29 +- 49 files changed, 2659 insertions(+), 2466 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index 2e74cf960..db23c7345 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -1566,14 +1566,14 @@ public final class SWF implements TreeItem, Timelined { int frame = fframes.get(fi); File f = new File(foutdir + File.separator + fframes.get(fi) + ".svg"); try (FileOutputStream fos = new FileOutputStream(f)) { - fos.write(Utf8Helper.getBytes(frameToSvgGet(ftim, frame, 0, null, 0, ftim.displayRect, new Matrix(), new ColorTransform(), fbackgroundColor))); + fos.write(Utf8Helper.getBytes(frameToSvg(ftim, frame, 0, null, 0, new SVGExporterContext(foutdir.toString()), ftim.displayRect, new ColorTransform(), fbackgroundColor, 0))); } ret.add(f); } }, handler).run(); } } - + final List frameImages = new ArrayList<>(); for (int frame : frames) { frameImages.add(frameToImageGet(tim, frame, 0, null, 0, tim.displayRect, new Matrix(), new ColorTransform(), backgroundColor).getBufferedImage()); @@ -1837,7 +1837,7 @@ public final class SWF implements TreeItem, Timelined { exportTexts(handler, outdir, tags, mode); } - public static List exportShapes(AbortRetryIgnoreHandler handler, String outdir, List tags, final ShapeExportMode mode) throws IOException { + public static List exportShapes(AbortRetryIgnoreHandler handler, final String outdir, List tags, final ShapeExportMode mode) throws IOException { List ret = new ArrayList<>(); if (tags.isEmpty()) { return ret; @@ -1870,7 +1870,7 @@ public final class SWF implements TreeItem, Timelined { switch (mode) { case SVG: try (FileOutputStream fos = new FileOutputStream(file)) { - fos.write(Utf8Helper.getBytes(st.toSVG(new SVGExporterContext()))); + fos.write(Utf8Helper.getBytes(st.toSVG(new SVGExporterContext(outdir), 0))); } break; case PNG: @@ -1895,7 +1895,7 @@ public final class SWF implements TreeItem, Timelined { } //TODO: implement morphshape export. How to handle 65536 frames? - public static List exportMorphShapes(AbortRetryIgnoreHandler handler, String outdir, List tags, final MorphshapeExportMode mode) throws IOException { + public static List exportMorphShapes(AbortRetryIgnoreHandler handler, final String outdir, List tags, final MorphshapeExportMode mode) throws IOException { List ret = new ArrayList<>(); if (tags.isEmpty()) { return ret; @@ -1925,7 +1925,7 @@ public final class SWF implements TreeItem, Timelined { switch (mode) { case SVG: try (FileOutputStream fos = new FileOutputStream(file)) { - fos.write(Utf8Helper.getBytes(mst.toSVG(new SVGExporterContext()))); + fos.write(Utf8Helper.getBytes(mst.toSVG(new SVGExporterContext(outdir), 0))); } break; } @@ -2584,24 +2584,13 @@ public final class SWF implements TreeItem, Timelined { return ret; } - public static String frameToSvgGet(Timeline timeline, int frame, int time, DepthState stateUnderCursor, int mouseButton, RECT displayRect, Matrix transformation, ColorTransform colorTransform, Color backGroundColor) { - RECT rect = displayRect; - SVGExporter exporter = new SVGExporter(timeline.swf, new ExportRectangle(rect), colorTransform); + public static String frameToSvg(Timeline timeline, int frame, int time, DepthState stateUnderCursor, int mouseButton, SVGExporterContext exporterContext, RECT displayRect, ColorTransform colorTransform, Color backGroundColor, int level) throws IOException { + SVGExporter exporter = new SVGExporter(timeline.swf, new ExportRectangle(displayRect), colorTransform); if (backGroundColor != null) { exporter.setBackGroundColor(backGroundColor); } - Matrix m = new Matrix(); - m.translate(-rect.Xmin, -rect.Ymin); - if (timeline.frames.isEmpty()) { - frameToSvg(timeline, frame, time, stateUnderCursor, mouseButton, exporter, m, colorTransform); - } - return exporter.getSVG(); - } - - public static void frameToSvg(Timeline timeline, int frame, int time, DepthState stateUnderCursor, int mouseButton, SVGExporter exporter, Matrix transformation, ColorTransform colorTransform) { - float unzoom = (float) SWF.unitDivisor; if (timeline.frames.size() <= frame) { - return; + return exporter.getSVG(); } Frame frameObj = timeline.frames.get(frame); // TODO g.setTransform(transformation.toTransform()); @@ -2627,8 +2616,6 @@ public final class SWF implements TreeItem, Timelined { continue; } CharacterTag character = timeline.swf.characters.get(layer.characterId); - Matrix mat = new Matrix(layer.matrix); - mat = mat.preConcatenate(transformation); if (colorTransform == null) { colorTransform = new ColorTransform(); @@ -2641,7 +2628,6 @@ public final class SWF implements TreeItem, Timelined { if (character instanceof DrawableTag) { DrawableTag drawable = (DrawableTag) character; - Matrix drawMatrix = new Matrix(); int dframe = (time + layer.time) % drawable.getNumFrames(); if (character instanceof ButtonTag) { ButtonTag bt = (ButtonTag) character; @@ -2655,29 +2641,42 @@ public final class SWF implements TreeItem, Timelined { } } + String assetFileName; + Tag drawableTag = (Tag) drawable; + if (exporterContext.exportedTags.containsKey(drawableTag)) { + assetFileName = exporterContext.exportedTags.get(drawableTag); + } else { + String assetsDir = exporterContext.outDir + File.separator + "assets"; + File foutdir = new File(assetsDir); + if (!foutdir.exists()) { + if (!foutdir.mkdirs()) { + if (!foutdir.exists()) { + throw new IOException("Cannot create directory " + assetsDir); + } + } + } + assetFileName = exporterContext.exportedTags.size() + ".svg"; + exporterContext.exportedTags.put(drawableTag, assetFileName); + File file = new File(assetsDir + File.separator + assetFileName); + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(Utf8Helper.getBytes(drawable.toSVG(exporterContext, level + 1))); + } + } RECT boundRect = drawable.getRect(); ExportRectangle rect = new ExportRectangle(boundRect); - rect = mat.transform(rect); - Matrix m = mat.clone(); - - m.translate(-rect.xMin, -rect.yMin); - drawMatrix.translate(rect.xMin, rect.yMin); - - //drawable.toSVG(dframe, layer.time + time, layer.ratio, stateUnderCursor, mouseButton, exporter, m, clrTrans); - // TODO: drawable.toSVG(); // TODO: if (layer.filters != null) // TODO: if (layer.blendMode > 1) - - drawMatrix.translateX /= unzoom; - drawMatrix.translateY /= unzoom; - AffineTransform trans = drawMatrix.toTransform(); + String assetPath = level == 0 ? "assets" + File.separator + assetFileName : assetFileName; + Matrix mat = new Matrix(layer.matrix); + mat.translate(rect.xMin, rect.yMin); + exporter.addImage(mat, boundRect, assetPath); // TODO: if (layer.clipDepth > -1)... // TODO: g.setTransform(trans); } - } + return exporter.getSVG(); } public static SerializableImage frameToImageGet(Timeline timeline, int frame, int time, DepthState stateUnderCursor, int mouseButton, RECT displayRect, Matrix transformation, ColorTransform colorTransform, Color backGroundColor) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 1ae7e5b22..4c060f2d6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1266,203 +1266,202 @@ public class AVM2Code implements Serializable { String ret = ""; int ip = start; //try { - //int addr; - iploop: - while (ip <= end) { + //int addr; + iploop: + while (ip <= end) { - if (ignoredIns.contains(ip)) { - ip++; - continue; - } - boolean processTry = processJumps; - //addr = pos2adr(ip); - int ipfix = fixIPAfterDebugLine(ip); - //int addrfix = pos2adr(ipfix); - int maxend = -1; + if (ignoredIns.contains(ip)) { + ip++; + continue; + } + boolean processTry = processJumps; + //addr = pos2adr(ip); + int ipfix = fixIPAfterDebugLine(ip); + //int addrfix = pos2adr(ipfix); + int maxend = -1; - if (ip > end) { - break; - } + if (ip > end) { + break; + } - if (unknownJumps.contains(ip)) { - unknownJumps.remove(Integer.valueOf(ip)); - throw new UnknownJumpException(stack, ip, output); - } - if (visited[ip]) { - Logger.getLogger(AVM2Code.class.getName()).warning("Code already visited, ofs:" + Helper.formatAddress(pos2adr(ip)) + ", ip:" + ip); - break; - } - visited[ip] = true; - AVM2Instruction ins = code.get(ip); - if (debugMode) { - System.err.println("translating ip " + ip + " ins " + ins.toString() + " stack:" + stack.toString() + " scopeStack:" + scopeStack.toString()); - } - if (ins.definition instanceof NewFunctionIns) { - if (ip + 1 <= end) { - if (code.get(ip + 1).definition instanceof PopIns) { - ip += 2; - continue; - } + if (unknownJumps.contains(ip)) { + unknownJumps.remove(Integer.valueOf(ip)); + throw new UnknownJumpException(stack, ip, output); + } + if (visited[ip]) { + Logger.getLogger(AVM2Code.class.getName()).warning("Code already visited, ofs:" + Helper.formatAddress(pos2adr(ip)) + ", ip:" + ip); + break; + } + visited[ip] = true; + AVM2Instruction ins = code.get(ip); + if (debugMode) { + System.err.println("translating ip " + ip + " ins " + ins.toString() + " stack:" + stack.toString() + " scopeStack:" + scopeStack.toString()); + } + if (ins.definition instanceof NewFunctionIns) { + if (ip + 1 <= end) { + if (code.get(ip + 1).definition instanceof PopIns) { + ip += 2; + continue; } } - /*if ((ip + 8 < code.size())) { //return in finally clause - if (ins.definition instanceof SetLocalTypeIns) { - if (code.get(ip + 1).definition instanceof PushByteIns) { - AVM2Instruction jmp = code.get(ip + 2); - if (jmp.definition instanceof JumpIns) { - if (jmp.operands[0] == 0) { - if (code.get(ip + 3).definition instanceof LabelIns) { - if (code.get(ip + 4).definition instanceof PopIns) { - if (code.get(ip + 5).definition instanceof LabelIns) { - AVM2Instruction gl = code.get(ip + 6); - if (gl.definition instanceof GetLocalTypeIns) { - if (((GetLocalTypeIns) gl.definition).getRegisterId(gl) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins)) { - AVM2Instruction ki = code.get(ip + 7); - if (ki.definition instanceof KillIns) { - if (ki.operands[0] == ((SetLocalTypeIns) ins.definition).getRegisterId(ins)) { - if (code.get(ip + 8).definition instanceof ReturnValueIns) { - ip = ip + 8; - continue; - } - } - } - } - } - } - } - } - } - } - } - } - }//*/ + } + /*if ((ip + 8 < code.size())) { //return in finally clause + if (ins.definition instanceof SetLocalTypeIns) { + if (code.get(ip + 1).definition instanceof PushByteIns) { + AVM2Instruction jmp = code.get(ip + 2); + if (jmp.definition instanceof JumpIns) { + if (jmp.operands[0] == 0) { + if (code.get(ip + 3).definition instanceof LabelIns) { + if (code.get(ip + 4).definition instanceof PopIns) { + if (code.get(ip + 5).definition instanceof LabelIns) { + AVM2Instruction gl = code.get(ip + 6); + if (gl.definition instanceof GetLocalTypeIns) { + if (((GetLocalTypeIns) gl.definition).getRegisterId(gl) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins)) { + AVM2Instruction ki = code.get(ip + 7); + if (ki.definition instanceof KillIns) { + if (ki.operands[0] == ((SetLocalTypeIns) ins.definition).getRegisterId(ins)) { + if (code.get(ip + 8).definition instanceof ReturnValueIns) { + ip = ip + 8; + continue; + } + } + } + } + } + } + } + } + } + } + } + } + }//*/ - /*if ((ip + 2 < code.size()) && (ins.definition instanceof NewCatchIns)) { //Filling local register in catch clause - if (code.get(ip + 1).definition instanceof DupIns) { - if (code.get(ip + 2).definition instanceof SetLocalTypeIns) { - ins.definition.translate(isStatic, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames); - ip += 3; - continue; - } - } - }*/ - if ((ins.definition instanceof GetLocalTypeIns) && (!output.isEmpty()) && (output.get(output.size() - 1) instanceof SetLocalAVM2Item) && (((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex == ((GetLocalTypeIns) ins.definition).getRegisterId(ins)) && isKilled(((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex, start, end)) { - SetLocalAVM2Item slt = (SetLocalAVM2Item) output.remove(output.size() - 1); - stack.push(slt.getValue()); + /*if ((ip + 2 < code.size()) && (ins.definition instanceof NewCatchIns)) { //Filling local register in catch clause + if (code.get(ip + 1).definition instanceof DupIns) { + if (code.get(ip + 2).definition instanceof SetLocalTypeIns) { + ins.definition.translate(isStatic, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames); + ip += 3; + continue; + } + } + }*/ + if ((ins.definition instanceof GetLocalTypeIns) && (!output.isEmpty()) && (output.get(output.size() - 1) instanceof SetLocalAVM2Item) && (((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex == ((GetLocalTypeIns) ins.definition).getRegisterId(ins)) && isKilled(((SetLocalAVM2Item) output.get(output.size() - 1)).regIndex, start, end)) { + SetLocalAVM2Item slt = (SetLocalAVM2Item) output.remove(output.size() - 1); + stack.push(slt.getValue()); + ip++; + } else if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { //set_local_x,get_local_x..kill x + AVM2Instruction insAfter = code.get(ip + 1); + if ((insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) { + GraphTargetItem before = stack.peek(); + ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); + stack.push(before); + ip += 2; + continue iploop; + } else { + ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); ip++; - } else if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end) && (isKilled(((SetLocalTypeIns) ins.definition).getRegisterId(ins), ip, end))) { //set_local_x,get_local_x..kill x + continue iploop; + } + } else if (ins.definition instanceof DupIns) { + int nextPos; + do { AVM2Instruction insAfter = code.get(ip + 1); - if ((insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) { - GraphTargetItem before = stack.peek(); - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - stack.push(before); - ip += 2; - continue iploop; + AVM2Instruction insBefore = ins; + if (ip - 1 >= start) { + insBefore = code.get(ip - 1); + } + if (insAfter.definition instanceof ConvertBIns) { //SWF compiled with debug contain convert_b + ip++; + //addr = pos2adr(ip); + insAfter = code.get(ip + 1); + } + + boolean isAnd; + if (processJumps && (insAfter.definition instanceof IfFalseIns)) { + //stack.add("(" + stack.pop() + ")&&"); + isAnd = true; + } else if (processJumps && (insAfter.definition instanceof IfTrueIns)) { + //stack.add("(" + stack.pop() + ")||"); + isAnd = false; + } else if (insAfter.definition instanceof SetLocalTypeIns) { + //chained assignments + int reg = (((SetLocalTypeIns) insAfter.definition).getRegisterId(insAfter)); + for (int t = ip + 1; t <= end - 1; t++) { + if (code.get(t).definition instanceof KillIns) { + if (code.get(t).operands[0] == reg) { + break; + } + } + if (code.get(t).definition instanceof GetLocalTypeIns) { + if (((GetLocalTypeIns) code.get(t).definition).getRegisterId(code.get(t)) == reg) { + if (code.get(t + 1).definition instanceof KillIns) { + if (code.get(t + 1).operands[0] == reg) { + ConvertOutput assignment = toSourceOutput(path, part, processJumps, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, abc, constants, method_info, body, ip + 2, t - 1, localRegNames, fullyQualifiedNames, visited, localRegAssigmentIps, refs); + GraphTargetItem tar = assignment.output.remove(assignment.output.size() - 1); + tar.firstPart = part; + stack.push(tar); + ip = t + 2; + continue iploop; + } + } + } + } + } + if (!isKilled(reg, 0, end)) { + for (int i = ip; i >= start; i--) { + if (code.get(i).definition instanceof DupIns) { + if (stack.isEmpty()) { + break;//FIXME?o + } + GraphTargetItem v = stack.pop(); + stack.push(new LocalRegAVM2Item(ins, reg, v)); + stack.push(v); + } else { + break; + } + } + } else { + ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); + } + ip++; + break; + //} + } else { ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); ip++; - continue iploop; + break; + //throw new ConvertException("Unknown pattern after DUP:" + insComparsion.toString()); } - } else if (ins.definition instanceof DupIns) { - int nextPos; - do { - AVM2Instruction insAfter = code.get(ip + 1); - AVM2Instruction insBefore = ins; - if (ip - 1 >= start) { - insBefore = code.get(ip - 1); - } - if (insAfter.definition instanceof ConvertBIns) { //SWF compiled with debug contain convert_b - ip++; - //addr = pos2adr(ip); - insAfter = code.get(ip + 1); - } - - boolean isAnd; - if (processJumps && (insAfter.definition instanceof IfFalseIns)) { - //stack.add("(" + stack.pop() + ")&&"); - isAnd = true; - } else if (processJumps && (insAfter.definition instanceof IfTrueIns)) { - //stack.add("(" + stack.pop() + ")||"); - isAnd = false; - } else if (insAfter.definition instanceof SetLocalTypeIns) { - //chained assignments - int reg = (((SetLocalTypeIns) insAfter.definition).getRegisterId(insAfter)); - for (int t = ip + 1; t <= end - 1; t++) { - if (code.get(t).definition instanceof KillIns) { - if (code.get(t).operands[0] == reg) { - break; - } + } while (ins.definition instanceof DupIns); + } else if ((ins.definition instanceof ReturnValueIns) || (ins.definition instanceof ReturnVoidIns) || (ins.definition instanceof ThrowIns)) { + ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); + //ip = end + 1; + break; + } else if (ins.definition instanceof NewFunctionIns) { + String functionName = ""; + if ((ip >= start + 2) && (ip <= end - 4)) { + AVM2Instruction prev2 = code.get(ip - 2); + if (prev2.definition instanceof NewObjectIns) { + if (prev2.operands[0] == 0) { + if (code.get(ip - 1).definition instanceof PushWithIns) { + boolean hasDup = false; + int plus = 0; + if (code.get(ip + 1).definition instanceof DupIns) { + hasDup = true; + plus = 1; } - if (code.get(t).definition instanceof GetLocalTypeIns) { - if (((GetLocalTypeIns) code.get(t).definition).getRegisterId(code.get(t)) == reg) { - if (code.get(t + 1).definition instanceof KillIns) { - if (code.get(t + 1).operands[0] == reg) { - ConvertOutput assignment = toSourceOutput(path, part, processJumps, isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, abc, constants, method_info, body, ip + 2, t - 1, localRegNames, fullyQualifiedNames, visited, localRegAssigmentIps, refs); - GraphTargetItem tar = assignment.output.remove(assignment.output.size() - 1); - tar.firstPart = part; - stack.push(tar); - ip = t + 2; - continue iploop; - } - } - } - } - } - if (!isKilled(reg, 0, end)) { - for (int i = ip; i >= start; i--) { - if (code.get(i).definition instanceof DupIns) { - if (stack.isEmpty()) { - break;//FIXME?o - } - GraphTargetItem v = stack.pop(); - stack.push(new LocalRegAVM2Item(ins, reg, v)); - stack.push(v); - } else { - break; - } - } - } else { - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - } - ip++; - break; - //} - - } else { - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - ip++; - break; - //throw new ConvertException("Unknown pattern after DUP:" + insComparsion.toString()); - } - } while (ins.definition instanceof DupIns); - } else if ((ins.definition instanceof ReturnValueIns) || (ins.definition instanceof ReturnVoidIns) || (ins.definition instanceof ThrowIns)) { - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - //ip = end + 1; - break; - } else if (ins.definition instanceof NewFunctionIns) { - String functionName = ""; - if ((ip >= start + 2) && (ip <= end - 4)) { - AVM2Instruction prev2 = code.get(ip - 2); - if (prev2.definition instanceof NewObjectIns) { - if (prev2.operands[0] == 0) { - if (code.get(ip - 1).definition instanceof PushWithIns) { - boolean hasDup = false; - int plus = 0; - if (code.get(ip + 1).definition instanceof DupIns) { - hasDup = true; - plus = 1; - } - AVM2Instruction psco = code.get(ip + 1 + plus); - if (psco.definition instanceof GetScopeObjectIns) { - if (psco.operands[0] == scopeStack.size() - 1) { - if (code.get(ip + plus + 2).definition instanceof SwapIns) { - if (code.get(ip + plus + 4).definition instanceof PopScopeIns) { - if (code.get(ip + plus + 3).definition instanceof SetPropertyIns) { - functionName = abc.constants.getMultiname(code.get(ip + plus + 3).operands[0]).getName(constants, fullyQualifiedNames); - scopeStack.pop();//with - output.remove(output.size() - 1); //with - ip = ip + plus + 4; //+1 below - } + AVM2Instruction psco = code.get(ip + 1 + plus); + if (psco.definition instanceof GetScopeObjectIns) { + if (psco.operands[0] == scopeStack.size() - 1) { + if (code.get(ip + plus + 2).definition instanceof SwapIns) { + if (code.get(ip + plus + 4).definition instanceof PopScopeIns) { + if (code.get(ip + plus + 3).definition instanceof SetPropertyIns) { + functionName = abc.constants.getMultiname(code.get(ip + plus + 3).operands[0]).getName(constants, fullyQualifiedNames); + scopeStack.pop();//with + output.remove(output.size() - 1); //with + ip = ip + plus + 4; //+1 below } } } @@ -1471,41 +1470,42 @@ public class AVM2Code implements Serializable { } } } - //What to do when hasDup is false? - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - NewFunctionAVM2Item nft = (NewFunctionAVM2Item) stack.peek(); - nft.functionName = functionName; - ip++; - } else { - try{ - ins.definition.translate(isStatic, scriptIndex, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames, fullyQualifiedNames, path, localRegAssigmentIps, ip, refs, this); - }catch(RuntimeException re){ - /*String last=""; - int len=5; - for(int i=(ip-len<0?0:ip-len);i toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSourceMerge(localData, generator, ns, ins(new DXNSLateIns())); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java index 44acfb30d..235949531 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java @@ -19,7 +19,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.xml.EscXAttrIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.xml.EscXElemIns; import static com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item.ins; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; @@ -58,7 +57,7 @@ public class EscapeXAttrAVM2Item extends AVM2Item { public boolean hasReturnValue() { return true; } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSourceMerge(localData, generator, value, ins(new EscXAttrIns())); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java index e0e7b8193..ec34c0d00 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java @@ -34,7 +34,6 @@ import java.util.List; */ public class EscapeXElemAVM2Item extends AVM2Item { - public EscapeXElemAVM2Item(AVM2Instruction instruction, GraphTargetItem expression) { super(instruction, NOPRECEDENCE); this.value = expression; @@ -61,6 +60,5 @@ public class EscapeXElemAVM2Item extends AVM2Item { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSourceMerge(localData, generator, value, ins(new EscXElemIns())); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java index a2b41fc58..31790cda6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java @@ -35,7 +35,6 @@ public class GetDescendantsAVM2Item extends AVM2Item { public List openedNamespaces; public String nameStr; - //constructor for compiler public GetDescendantsAVM2Item(GraphTargetItem object, String nameStr, List openedNamespaces) { super(null, PRECEDENCE_PRIMARY); @@ -43,7 +42,7 @@ public class GetDescendantsAVM2Item extends AVM2Item { this.nameStr = nameStr; this.openedNamespaces = openedNamespaces; } - + public GetDescendantsAVM2Item(AVM2Instruction instruction, GraphTargetItem object, GraphTargetItem multiname) { super(instruction, PRECEDENCE_PRIMARY); this.object = object; @@ -69,8 +68,7 @@ public class GetDescendantsAVM2Item extends AVM2Item { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - return ((AVM2SourceGenerator)generator).generate(localData, this); + return ((AVM2SourceGenerator) generator).generate(localData, this); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index 3932ef8a5..40b4b1bd1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -20,7 +20,6 @@ import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.DeletePropertyIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.UnresolvedAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index 34cab0501..0a965c3fd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -153,12 +153,13 @@ public class AVM2SourceGenerator implements SourceGenerator { nssa[i] = item.openedNamespaces.get(i); } int nsset = abc.constants.getNamespaceSetId(new NamespaceSet(nssa), true); - - return GraphTargetItem.toSourceMerge(localData, this, + + return GraphTargetItem.toSourceMerge(localData, this, item.object, - ins(new GetDescendantsIns(),abc.constants.getMultinameId(new Multiname(Multiname.MULTINAME, abc.constants.getStringId(item.nameStr, true), 0, nsset, 0, new ArrayList()), true)) + ins(new GetDescendantsIns(), abc.constants.getMultinameId(new Multiname(Multiname.MULTINAME, abc.constants.getStringId(item.nameStr, true), 0, nsset, 0, new ArrayList()), true)) ); } + @Override public List generate(SourceGeneratorLocalData localData, AndItem item) throws CompilationException { List ret = new ArrayList<>(); @@ -279,7 +280,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } return ret; } - + public List generate(SourceGeneratorLocalData localData, XMLFilterAVM2Item item) throws CompilationException { List ret = new ArrayList<>(); final Reference counterReg = new Reference<>(0); @@ -293,14 +294,14 @@ public class AVM2SourceGenerator implements SourceGenerator { ins(new CheckFilterIns()), NameAVM2Item.generateCoerce(this, TypeItem.UNBOUNDED), AssignableAVM2Item.setTemp(localData, this, collectionReg), - ins(new GetLexIns(),abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId("XMLList", true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("", true)), 0, true), 0, 0, new ArrayList()), true)), - ins(new PushStringIns(),abc.constants.getStringId("", true)), - ins(new ConstructIns(),1), + ins(new GetLexIns(), abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId("XMLList", true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("", true)), 0, true), 0, 0, new ArrayList()), true)), + ins(new PushStringIns(), abc.constants.getStringId("", true)), + ins(new ConstructIns(), 1), xmlListSetTemp - )); + )); final Reference tempVal1 = new Reference<>(0); final Reference tempVal2 = new Reference<>(0); - + List forBody = toInsList(GraphTargetItem.toSourceMerge(localData, this, ins(new LabelIns()), AssignableAVM2Item.getTemp(localData, this, collectionReg), @@ -308,7 +309,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ins(new NextValueIns()), AssignableAVM2Item.dupSetTemp(localData, this, tempVal1), AssignableAVM2Item.dupSetTemp(localData, this, tempVal2), - ins(new PushWithIns()) + ins(new PushWithIns()) )); localData.scopeStack.add(new LocalRegAVM2Item(null, tempVal2.getVal(), null)); forBody.addAll(toInsList(item.value.toSource(localData, this))); @@ -317,18 +318,16 @@ public class AVM2SourceGenerator implements SourceGenerator { trueBody.addAll(toInsList(AssignableAVM2Item.getTemp(localData, this, counterReg))); trueBody.addAll(toInsList(AssignableAVM2Item.getTemp(localData, this, tempVal1))); int nss[] = new int[item.openedNamespaces.size()]; - for(int i=0;i()), true))); - forBody.add(ins(new IfFalseIns(),insToBytes(trueBody).length)); + trueBody.add(ins(new SetPropertyIns(), abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, abc.constants.getNamespaceSetId(new NamespaceSet(nss), true), 0, new ArrayList()), true))); + forBody.add(ins(new IfFalseIns(), insToBytes(trueBody).length)); forBody.addAll(trueBody); forBody.add(ins(new PopScopeIns())); - localData.scopeStack.remove(localData.scopeStack.size()-1); - forBody.addAll(toInsList(AssignableAVM2Item.killTemp(localData, this, Arrays.asList(tempVal2,tempVal1)))); - - - + localData.scopeStack.remove(localData.scopeStack.size() - 1); + forBody.addAll(toInsList(AssignableAVM2Item.killTemp(localData, this, Arrays.asList(tempVal2, tempVal1)))); + int forBodyLen = insToBytes(forBody).length; AVM2Instruction forwardJump = ins(new JumpIns(), forBodyLen); ret.add(forwardJump); @@ -680,20 +679,20 @@ public class AVM2SourceGenerator implements SourceGenerator { public List generate(SourceGeneratorLocalData localData, FunctionAVM2Item item) throws CompilationException { List ret = new ArrayList<>(); int scope = 0; - if(!item.functionName.equals("")){ - ret.add(ins(new NewObjectIns(),0)); + if (!item.functionName.isEmpty()) { + ret.add(ins(new NewObjectIns(), 0)); ret.add(ins(new PushWithIns())); - scope=localData.scopeStack.size(); + scope = localData.scopeStack.size(); localData.scopeStack.add(new PropertyAVM2Item(null, item.functionName, null, abc, allABCs, new ArrayList(), localData.callStack)); } ret.add(ins(new NewFunctionIns(), method(localData.callStack, localData.pkg, item.needsActivation, item.subvariables, 0 /*Set later*/, item.hasRest, item.line, null, null, false, localData, item.paramTypes, item.paramNames, item.paramValues, item.body, item.retType))); - if(!item.functionName.equals("")){ + if (!item.functionName.isEmpty()) { ret.add(ins(new DupIns())); - ret.add(ins(new GetScopeObjectIns(),scope)); + ret.add(ins(new GetScopeObjectIns(), scope)); ret.add(ins(new SwapIns())); - ret.add(ins(new SetPropertyIns(),abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId(item.functionName, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(localData.pkg, true)), 0, true), 0, 0, new ArrayList()), true))); + ret.add(ins(new SetPropertyIns(), abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId(item.functionName, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(localData.pkg, true)), 0, true), 0, 0, new ArrayList()), true))); ret.add(ins(new PopScopeIns())); - localData.scopeStack.remove(localData.scopeStack.size()-1); + localData.scopeStack.remove(localData.scopeStack.size() - 1); } return ret; } @@ -1154,7 +1153,7 @@ public class AVM2SourceGenerator implements SourceGenerator { return abc; } - public void generateClass(List openedNamespaces,int namespace, int initScope, PackageAVM2Item pkg, ClassInfo classInfo, InstanceInfo instanceInfo, SourceGeneratorLocalData localData, boolean isInterface, String name, String superName, GraphTargetItem extendsVal, List implementsStr, GraphTargetItem constructor, List traitItems) throws ParseException, CompilationException { + public void generateClass(List openedNamespaces, int namespace, int initScope, PackageAVM2Item pkg, ClassInfo classInfo, InstanceInfo instanceInfo, SourceGeneratorLocalData localData, boolean isInterface, String name, String superName, GraphTargetItem extendsVal, List implementsStr, GraphTargetItem constructor, List traitItems) throws ParseException, CompilationException { localData.currentClass = pkg.packageName.isEmpty() ? name : pkg.packageName + "." + name; List ret = new ArrayList<>(); if (extendsVal == null && !isInterface) { @@ -1164,8 +1163,8 @@ public class AVM2SourceGenerator implements SourceGenerator { Trait[] it = generateTraitsPhase1(pkg, name, superName, false, localData, traitItems, instanceInfo.instance_traits); Trait[] st = generateTraitsPhase1(pkg, name, superName, true, localData, traitItems, classInfo.static_traits); - generateTraitsPhase2(pkg.packageName,traitItems, it, openedNamespaces, localData); - generateTraitsPhase2(pkg.packageName,traitItems, st, openedNamespaces, localData); + generateTraitsPhase2(pkg.packageName, traitItems, it, openedNamespaces, localData); + generateTraitsPhase2(pkg.packageName, traitItems, st, openedNamespaces, localData); generateTraitsPhase3(initScope, pkg, name, superName, false, localData, traitItems, instanceInfo.instance_traits, it); generateTraitsPhase3(initScope, pkg, name, superName, true, localData, traitItems, classInfo.static_traits, st); if (constructor == null) { @@ -1232,7 +1231,7 @@ public class AVM2SourceGenerator implements SourceGenerator { */ if (cls instanceof ClassAVM2Item) { ClassAVM2Item cai = (ClassAVM2Item) cls; - generateClass(cai.openedNamespaces,namespace, initScope, pkg, ci, ii, localData, false, cai.className, cai.extendsOp.toString(), cai.extendsOp, cai.implementsOp, cai.constructor, cai.traits); + generateClass(cai.openedNamespaces, namespace, initScope, pkg, ci, ii, localData, false, cai.className, cai.extendsOp.toString(), cai.extendsOp, cai.implementsOp, cai.constructor, cai.traits); if (!cai.isDynamic) { ii.flags |= InstanceInfo.CLASS_SEALED; } @@ -1244,7 +1243,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } if (cls instanceof InterfaceAVM2Item) { InterfaceAVM2Item iai = (InterfaceAVM2Item) cls; - generateClass(iai.openedNamespaces,namespace, initScope, pkg, ci, ii, localData, true, iai.name, null, null, iai.superInterfaces, null, iai.methods); + generateClass(iai.openedNamespaces, namespace, initScope, pkg, ci, ii, localData, true, iai.name, null, null, iai.superInterfaces, null, iai.methods); ii.flags |= InstanceInfo.CLASS_INTERFACE; } @@ -1270,25 +1269,25 @@ public class AVM2SourceGenerator implements SourceGenerator { return 0; } - TypeItem nameItem = (TypeItem) type; - name = nameItem.fullTypeName; + TypeItem nameItem = (TypeItem) type; + name = nameItem.fullTypeName; if (name.contains(".")) { pkg = name.substring(0, name.lastIndexOf('.')); name = name.substring(name.lastIndexOf('.') + 1); } - if(!nameItem.subtypes.isEmpty()){ //It's vector => TypeName + if (!nameItem.subtypes.isEmpty()) { //It's vector => TypeName List params = new ArrayList<>(); - for(String p:nameItem.subtypes){ + for (String p : nameItem.subtypes) { String ppkg = ""; if (p.contains(".")) { ppkg = p.substring(0, p.lastIndexOf('.')); p = p.substring(p.lastIndexOf('.') + 1); } - params.add(abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(p), namespace(Namespace.KIND_PACKAGE/*?*/, ppkg), 0, 0, new ArrayList()), true)); + params.add(abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(p), namespace(Namespace.KIND_PACKAGE/*?*/, ppkg), 0, 0, new ArrayList()), true)); } - int qname = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); - return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME, 0,0, 0, qname, params), true); - }else{ + int qname = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); + return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME, 0, 0, 0, qname, params), true); + } else { return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(Namespace.KIND_PACKAGE/*?*/, pkg), 0, 0, new ArrayList()), true); } } @@ -1721,78 +1720,76 @@ public class AVM2SourceGenerator implements SourceGenerator { return null; } - private int genNs(String custom,int namespace, List openedNamespaces, SourceGeneratorLocalData localData){ - if(custom!=null){ + private int genNs(String custom, int namespace, List openedNamespaces, SourceGeneratorLocalData localData) { + if (custom != null) { PropertyAVM2Item prop = new PropertyAVM2Item(null, custom, null, abc, allABCs, openedNamespaces, new ArrayList()); - Reference value=new Reference<>(null); + Reference value = new Reference<>(null); prop.resolve(localData, new Reference(""), new Reference(""), new Reference(0), value); namespace = value.getVal().value_index; } return namespace; } - - public void generateTraitsPhase2(String pkg,List items,Trait[] traits, List openedNamespaces, SourceGeneratorLocalData localData) throws CompilationException{ + + public void generateTraitsPhase2(String pkg, List items, Trait[] traits, List openedNamespaces, SourceGeneratorLocalData localData) throws CompilationException { for (int k = 0; k < items.size(); k++) { GraphTargetItem item = items.get(k); if (traits[k] == null) { continue; } else if (item instanceof InterfaceAVM2Item) { - traits[k].name_index = traitName(((InterfaceAVM2Item)item).namespace,((InterfaceAVM2Item)item).name); + traits[k].name_index = traitName(((InterfaceAVM2Item) item).namespace, ((InterfaceAVM2Item) item).name); } else if (item instanceof ClassAVM2Item) { - traits[k].name_index = traitName(((ClassAVM2Item)item).namespace,((ClassAVM2Item)item).className); + traits[k].name_index = traitName(((ClassAVM2Item) item).namespace, ((ClassAVM2Item) item).className); } else if ((item instanceof MethodAVM2Item) || (item instanceof GetterAVM2Item) || (item instanceof SetterAVM2Item)) { - traits[k].name_index = traitName(genNs(((MethodAVM2Item)item).customNamespace,((MethodAVM2Item)item).namespace, openedNamespaces, localData),((MethodAVM2Item)item).functionName); + traits[k].name_index = traitName(genNs(((MethodAVM2Item) item).customNamespace, ((MethodAVM2Item) item).namespace, openedNamespaces, localData), ((MethodAVM2Item) item).functionName); } else if (item instanceof FunctionAVM2Item) { - traits[k].name_index = traitName(((FunctionAVM2Item)item).namespace,((FunctionAVM2Item)item).functionName); - } else if(item instanceof ConstAVM2Item){ - traits[k].name_index = traitName(genNs(((ConstAVM2Item)item).customNamespace,((ConstAVM2Item)item).getNamespace(), openedNamespaces, localData),((ConstAVM2Item)item).var); - } else if(item instanceof SlotAVM2Item){ - traits[k].name_index = traitName(genNs(((SlotAVM2Item)item).customNamespace,((SlotAVM2Item)item).getNamespace(), openedNamespaces, localData),((SlotAVM2Item)item).var); + traits[k].name_index = traitName(((FunctionAVM2Item) item).namespace, ((FunctionAVM2Item) item).functionName); + } else if (item instanceof ConstAVM2Item) { + traits[k].name_index = traitName(genNs(((ConstAVM2Item) item).customNamespace, ((ConstAVM2Item) item).getNamespace(), openedNamespaces, localData), ((ConstAVM2Item) item).var); + } else if (item instanceof SlotAVM2Item) { + traits[k].name_index = traitName(genNs(((SlotAVM2Item) item).customNamespace, ((SlotAVM2Item) item).getNamespace(), openedNamespaces, localData), ((SlotAVM2Item) item).var); } } - + for (int k = 0; k < items.size(); k++) { GraphTargetItem item = items.get(k); if (traits[k] == null) { continue; - } + } if (item instanceof ClassAVM2Item) { - InstanceInfo instanceInfo = abc.instance_info.get(((TraitClass)traits[k]).class_info); + InstanceInfo instanceInfo = abc.instance_info.get(((TraitClass) traits[k]).class_info); instanceInfo.name_index = abc.constants.addMultiname(new Multiname(Multiname.QNAME, abc.constants.getStringId(((ClassAVM2Item) item).className, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg, true)), 0, true), 0, 0, new ArrayList())); - + if (((ClassAVM2Item) item).extendsOp != null) { instanceInfo.super_index = typeName(localData, ((ClassAVM2Item) item).extendsOp); - }else{ + } else { instanceInfo.super_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str("Object"), namespace(Namespace.KIND_PACKAGE, ""), 0, 0, new ArrayList()), true); } instanceInfo.interfaces = new int[((ClassAVM2Item) item).implementsOp.size()]; - for(int i=0;i<((ClassAVM2Item) item).implementsOp.size();i++) - { - instanceInfo.interfaces[i] = typeName(localData,((ClassAVM2Item) item).implementsOp.get(i)); + for (int i = 0; i < ((ClassAVM2Item) item).implementsOp.size(); i++) { + instanceInfo.interfaces[i] = typeName(localData, ((ClassAVM2Item) item).implementsOp.get(i)); } } if (item instanceof InterfaceAVM2Item) { - InstanceInfo instanceInfo = abc.instance_info.get(((TraitClass)traits[k]).class_info); + InstanceInfo instanceInfo = abc.instance_info.get(((TraitClass) traits[k]).class_info); instanceInfo.name_index = abc.constants.addMultiname(new Multiname(Multiname.QNAME, abc.constants.getStringId(((ClassAVM2Item) item).className, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg, true)), 0, true), 0, 0, new ArrayList())); - + instanceInfo.interfaces = new int[((InterfaceAVM2Item) item).superInterfaces.size()]; - for(int i=0;i<((InterfaceAVM2Item) item).superInterfaces.size();i++) - { - instanceInfo.interfaces[i] = typeName(localData,((InterfaceAVM2Item) item).superInterfaces.get(i)); + for (int i = 0; i < ((InterfaceAVM2Item) item).superInterfaces.size(); i++) { + instanceInfo.interfaces[i] = typeName(localData, ((InterfaceAVM2Item) item).superInterfaces.get(i)); } } } } - + public void generateTraitsPhase3(int initScope, PackageAVM2Item pkg, String className, String superName, boolean generateStatic, SourceGeneratorLocalData localData, List items, Traits ts, Trait[] traits) throws ParseException, CompilationException { //Note: Names must be generated first before accesed in inner subs for (int k = 0; k < items.size(); k++) { GraphTargetItem item = items.get(k); if (traits[k] == null) { continue; - } + } if (item instanceof InterfaceAVM2Item) { generateClass(((InterfaceAVM2Item) item).namespace, abc.class_info.get(((TraitClass) traits[k]).class_info), abc.instance_info.get(((TraitClass) traits[k]).class_info), initScope, pkg, localData, (InterfaceAVM2Item) item); } @@ -1805,7 +1802,7 @@ public class AVM2SourceGenerator implements SourceGenerator { if (mai.isStatic() != generateStatic) { continue; } - ((TraitMethodGetterSetter) traits[k]).method_info = method(new ArrayList(), pkg.packageName, mai.needsActivation, mai.subvariables, initScope + (mai.isStatic()?0:1), mai.hasRest, mai.line, className, superName, false, localData, mai.paramTypes, mai.paramNames, mai.paramValues, mai.body, mai.retType); + ((TraitMethodGetterSetter) traits[k]).method_info = method(new ArrayList(), pkg.packageName, mai.needsActivation, mai.subvariables, initScope + (mai.isStatic() ? 0 : 1), mai.hasRest, mai.line, className, superName, false, localData, mai.paramTypes, mai.paramNames, mai.paramValues, mai.body, mai.retType); } else if (item instanceof FunctionAVM2Item) { FunctionAVM2Item fai = (FunctionAVM2Item) item; ((TraitFunction) traits[k]).method_info = method(new ArrayList(), pkg.packageName, fai.needsActivation, fai.subvariables, initScope, fai.hasRest, fai.line, className, superName, false, localData, fai.paramTypes, fai.paramNames, fai.paramValues, fai.body, fai.retType); @@ -1842,17 +1839,16 @@ public class AVM2SourceGenerator implements SourceGenerator { tc.class_info = abc.instance_info.size() - 1; /*instanceInfo.name_index = abc.constants.addMultiname(new Multiname(Multiname.QNAME, abc.constants.getStringId(((ClassAVM2Item) item).className, true), - abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg.packageName, true)), 0, true), 0, 0, new ArrayList())); - */ + abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg.packageName, true)), 0, true), 0, 0, new ArrayList())); + */ /*if (((ClassAVM2Item) item).extendsOp != null) { - instanceInfo.super_index = typeName(localData, ((ClassAVM2Item) item).extendsOp); - } else { - instanceInfo.super_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str("Object"), namespace(Namespace.KIND_PACKAGE, ""), 0, 0, new ArrayList()), true); - }*/ - + instanceInfo.super_index = typeName(localData, ((ClassAVM2Item) item).extendsOp); + } else { + instanceInfo.super_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str("Object"), namespace(Namespace.KIND_PACKAGE, ""), 0, 0, new ArrayList()), true); + }*/ tc.kindType = Trait.TRAIT_CLASS; - // tc.name_index = traitName(((ClassAVM2Item) item).namespace, ((ClassAVM2Item) item).className); + // tc.name_index = traitName(((ClassAVM2Item) item).namespace, ((ClassAVM2Item) item).className); tc.slot_id = slot_id++; ts.traits.add(tc); traits[k] = tc; @@ -1890,7 +1886,7 @@ public class AVM2SourceGenerator implements SourceGenerator { isNamespace = type.toString().equals("Namespace"); isStatic = cai.isStatic(); } - if(isNamespace){ + if (isNamespace) { tsc.name_index = traitName(namespace, var); } tsc.type_index = isNamespace ? 0 : (type == null ? 0 : typeName(localData, type)); @@ -1914,8 +1910,8 @@ public class AVM2SourceGenerator implements SourceGenerator { TraitMethodGetterSetter tmgs = new TraitMethodGetterSetter(); tmgs.kindType = (item instanceof MethodAVM2Item) ? Trait.TRAIT_METHOD : ((item instanceof GetterAVM2Item) ? Trait.TRAIT_GETTER : Trait.TRAIT_SETTER); //tmgs.name_index = traitName(((MethodAVM2Item) item).namespace, ((MethodAVM2Item) item).functionName); - tmgs.disp_id = mai.isStatic()?disp_id++:0; //For a reason, there is disp_id only for static methods (or not?) - if (mai.isFinal()||mai.isStatic()) { + tmgs.disp_id = mai.isStatic() ? disp_id++ : 0; //For a reason, there is disp_id only for static methods (or not?) + if (mai.isFinal() || mai.isStatic()) { tmgs.kindFlags |= Trait.ATTR_Final; } if (mai.isOverride()) { @@ -1932,7 +1928,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ts.traits.add(tf); traits[k] = tf; } - } + } return traits; } @@ -1941,14 +1937,13 @@ public class AVM2SourceGenerator implements SourceGenerator { ScriptInfo si = new ScriptInfo(); localData.currentScript = si; Trait[] traitArr = generateTraitsPhase1(pkg, null, null, false, localData, commands, si.traits); - generateTraitsPhase2(pkg.packageName,commands, traitArr, new ArrayList(), localData); + generateTraitsPhase2(pkg.packageName, commands, traitArr, new ArrayList(), localData); MethodInfo mi = new MethodInfo(new int[0], 0, 0, 0, new ValueKind[0], new int[0]); MethodBody mb = new MethodBody(); mb.method_info = abc.addMethodInfo(mi); mb.code = new AVM2Code(); mb.code.code.add(ins(new GetLocal0Ins())); mb.code.code.add(ins(new PushScopeIns())); - int traitScope = 1; @@ -2045,8 +2040,8 @@ public class AVM2SourceGenerator implements SourceGenerator { outPropNs.setVal(t.getName(abc).getNamespace(abc.constants).getName(abc.constants)); outPropNsKind.setVal(t.getName(abc).getNamespace(abc.constants).kind); outPropType.setVal(getTraitReturnType(abc, t).toString()); - if(t instanceof TraitSlotConst){ - TraitSlotConst tsc=(TraitSlotConst)t; + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; outPropValue.setVal(new ValueKind(tsc.value_index, tsc.value_kind)); } return true; @@ -2069,8 +2064,8 @@ public class AVM2SourceGenerator implements SourceGenerator { outPropNs.setVal(t.getName(abc).getNamespace(abc.constants).getName(abc.constants)); outPropNsKind.setVal(t.getName(abc).getNamespace(abc.constants).kind); outPropType.setVal(getTraitReturnType(abc, t).toString()); - if(t instanceof TraitSlotConst){ - TraitSlotConst tsc=(TraitSlotConst)t; + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; outPropValue.setVal(new ValueKind(tsc.value_index, tsc.value_kind)); } return true; @@ -2085,8 +2080,8 @@ public class AVM2SourceGenerator implements SourceGenerator { outPropNs.setVal(t.getName(abc).getNamespace(abc.constants).getName(abc.constants)); outPropNsKind.setVal(t.getName(abc).getNamespace(abc.constants).kind); outPropType.setVal(getTraitReturnType(abc, t).toString()); - if(t instanceof TraitSlotConst){ - TraitSlotConst tsc=(TraitSlotConst)t; + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; outPropValue.setVal(new ValueKind(tsc.value_index, tsc.value_kind)); } return true; @@ -2164,28 +2159,27 @@ public class AVM2SourceGenerator implements SourceGenerator { @Override public List generate(SourceGeneratorLocalData localData, TypeItem item) throws CompilationException { - String currentFullClassName = localData.currentClass==null?null:(localData.pkg.equals("")?localData.currentClass:localData.pkg+"."+localData.currentClass); - - if(localData.documentClass && item.toString().equals(currentFullClassName)){ + String currentFullClassName = localData.currentClass == null ? null : (localData.pkg.isEmpty() ? localData.currentClass : localData.pkg + "." + localData.currentClass); + + if (localData.documentClass && item.toString().equals(currentFullClassName)) { int slotId = 0; int c = abc.findClassByName(currentFullClassName); - for(Trait t:localData.currentScript.traits.traits){ - if(t instanceof TraitClass){ - TraitClass tc=(TraitClass)t; - if(tc.class_info == c){ + for (Trait t : localData.currentScript.traits.traits) { + if (t instanceof TraitClass) { + TraitClass tc = (TraitClass) t; + if (tc.class_info == c) { slotId = tc.slot_id; break; } } } - return GraphTargetItem.toSourceMerge(localData, this, ins(new GetGlobalScopeIns()),ins(new GetSlotIns(),slotId)); - }else{ - return GraphTargetItem.toSourceMerge(localData, this, ins(new GetLexIns(),resolveType(item, abc))); + return GraphTargetItem.toSourceMerge(localData, this, ins(new GetGlobalScopeIns()), ins(new GetSlotIns(), slotId)); + } else { + return GraphTargetItem.toSourceMerge(localData, this, ins(new GetLexIns(), resolveType(item, abc))); } } - - - public static int resolveType(TypeItem type,ABC abc) { + + public static int resolveType(TypeItem type, ABC abc) { String name = type.fullTypeName; String pkg = ""; int name_index = 0; @@ -2211,16 +2205,16 @@ public class AVM2SourceGenerator implements SourceGenerator { } } } - if(name_index == 0){ + if (name_index == 0) { name_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, abc.constants.getStringId(name, true), abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId(pkg, true)), 0, true), 0, 0, new ArrayList()), true); } - if(type.subtypes.isEmpty()){ + if (type.subtypes.isEmpty()) { return name_index; } - List params=new ArrayList<>(); - for(String s:type.subtypes){ - params.add(resolveType(new TypeItem(s),abc)); + List params = new ArrayList<>(); + for (String s : type.subtypes) { + params.add(resolveType(new TypeItem(s), abc)); } - return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME,0,0,0,name_index,params),true); + return abc.constants.getMultinameId(new Multiname(Multiname.TYPENAME, 0, 0, 0, name_index, params), true); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index 5d08589ef..ac048054a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -17,928 +17,968 @@ * along with this program. If not, see . */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; -import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; -import java.util.Stack; -import java.util.List; -import java.util.ArrayList; -import java.io.StringReader; +import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; /** - * This class is a scanner generated by - * JFlex 1.5.0-SNAPSHOT - * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex + * This class is a scanner generated by + * JFlex 1.5.0-SNAPSHOT from the + * specification file + * D:/Dropbox/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex */ public final class ActionScriptLexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLOPENTAG = 6; - public static final int XMLOPENTAGATTRIB = 8; - public static final int XMLINSTROPENTAG = 10; - public static final int XMLINSTRATTRIB = 12; - public static final int XMLCDATA = 14; - public static final int XMLCOMMENT = 16; - public static final int XML = 18; + /** + * lexical states + */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLOPENTAG = 6; + public static final int XMLOPENTAGATTRIB = 8; + public static final int XMLINSTROPENTAG = 10; + public static final int XMLINSTRATTRIB = 12; + public static final int XMLCDATA = 14; + public static final int XMLCOMMENT = 16; + public static final int XML = 18; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 8, 8, 9, 9 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, + 8, 8, 9, 9 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\7\1\12\1\2\1\111\1\3\1\1\16\7\4\0\1\12\1\13"+ - "\1\33\1\0\1\6\1\107\1\104\1\34\1\75\1\76\1\5\1\45"+ - "\1\102\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\101"+ - "\1\11\1\32\1\15\1\23\1\110\1\27\1\17\1\25\1\26\1\43"+ - "\1\17\2\20\1\73\4\20\1\74\5\20\1\30\3\20\1\37\2\20"+ - "\1\24\1\46\1\31\1\106\1\20\1\0\1\51\1\47\1\53\1\62"+ - "\1\44\1\40\1\72\1\65\1\60\1\20\1\52\1\63\1\70\1\56"+ - "\1\55\1\66\1\20\1\50\1\54\1\57\1\61\1\71\1\64\1\36"+ - "\1\67\1\20\1\77\1\105\1\100\1\103\6\7\1\112\32\7\2\0"+ - "\4\6\4\0\1\6\2\0\1\7\7\0\1\6\1\0\1\22\2\0"+ - "\1\6\5\0\27\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0"+ - "\5\6\7\0\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6"+ - "\2\0\4\6\1\0\7\0\1\6\1\0\3\6\1\0\1\6\1\0"+ - "\24\6\1\0\123\6\1\0\213\6\1\0\5\7\2\0\236\6\11\0"+ - "\46\6\2\0\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0"+ - "\2\7\1\0\2\7\1\0\1\7\10\0\33\6\5\0\3\6\15\0"+ - "\4\7\7\0\1\6\4\0\13\7\5\0\53\6\37\7\4\0\2\6"+ - "\1\7\143\6\1\0\1\6\10\7\1\0\6\7\2\6\2\7\1\0"+ - "\4\7\2\6\12\7\3\6\2\0\1\6\17\0\1\7\1\6\1\7"+ - "\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7\41\6\11\7"+ - "\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7\1\6\3\7"+ - "\1\6\5\7\22\0\31\6\3\7\244\0\4\7\66\6\3\7\1\6"+ - "\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0\7\6\1\0"+ - "\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0"+ - "\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6\7\7\2\0"+ - "\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6\1\0\3\6"+ - "\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7\1\0\6\6"+ - "\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6"+ - "\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7"+ - "\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7"+ - "\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6"+ - "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7"+ - "\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7\1\0"+ - "\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0"+ - "\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0"+ - "\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7"+ - "\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0"+ - "\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0"+ - "\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0"+ - "\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0\1\6\7\0"+ - "\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0"+ - "\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7"+ - "\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0\2\7\1\0"+ - "\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0\5\6\2\0"+ - "\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7\7\0"+ - "\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6\17\0\2\7"+ - "\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6\7\7\1\0"+ - "\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6\2\7\2\0"+ - "\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0\30\6\1\0"+ - "\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0\6\7\1\0"+ - "\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7\2\6\7\7"+ - "\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0\1\6\2\0"+ - "\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0\7\6\1\0"+ - "\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0\4\6\1\7"+ - "\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0\1\6\1\0"+ - "\6\7\2\0\12\7\2\0\2\6\42\0\1\6\27\0\2\7\6\0"+ - "\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0\2\7\10\6"+ - "\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7\1\0\44\7"+ - "\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0\6\6\4\7"+ - "\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7\15\6\14\7"+ - "\1\6\17\7\2\0\46\6\12\0\53\6\1\0\1\6\3\0\u0149\6"+ - "\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6"+ - "\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6"+ - "\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6"+ - "\2\0\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6"+ - "\1\0\32\6\5\0\113\6\3\0\3\6\17\0\15\6\1\0\4\6"+ - "\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0"+ - "\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6\3\0\2\6"+ - "\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0"+ - "\51\6\1\7\1\6\5\0\106\6\12\0\35\6\3\0\14\7\4\0"+ - "\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7"+ - "\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7"+ - "\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6\130\0\5\7"+ - "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6"+ - "\12\7\3\0\2\6\12\7\6\0\46\6\16\7\14\0\44\6\24\7"+ - "\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7"+ - "\4\6\1\7\4\6\1\7\15\0\300\6\47\7\25\0\4\7\u0116\6"+ - "\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6\1\0\1\6"+ - "\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6\1\0\7\6"+ - "\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6\2\0\6\6"+ - "\4\0\15\6\5\0\3\6\1\0\7\6\3\0\13\0\1\7\2\7"+ - "\2\7\30\0\1\111\1\111\5\7\20\0\2\6\23\0\1\6\13\0"+ - "\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0"+ - "\32\6\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0"+ - "\1\6\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0"+ - "\1\6\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0"+ - "\5\6\4\0\1\6\21\0\51\6\7\0\u0a70\0\57\6\1\0\57\6"+ - "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0"+ - "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6"+ - "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ - "\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\3\6\31\0\11\6"+ - "\6\7\1\0\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0"+ - "\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0"+ - "\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0"+ - "\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7"+ - "\14\0\2\7\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0"+ - "\147\6\2\0\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7"+ - "\3\6\1\7\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6"+ - "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0"+ - "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6"+ - "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7"+ - "\11\0\3\6\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0"+ - "\1\6\1\7\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6"+ - "\2\7\1\6\1\7\1\6\30\0\3\6\43\0\6\6\2\0\6\6"+ - "\2\0\6\6\11\0\7\6\1\0\7\6\221\0\43\6\10\7\1\0"+ - "\2\7\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0"+ - "\u1800\0\u0900\0\u012e\6\2\0\76\6\2\0\152\6\46\0\7\6\14\0"+ - "\5\6\5\0\1\6\1\7\12\6\1\0\15\6\1\0\5\6\1\0"+ - "\1\6\1\0\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0"+ - "\100\6\2\0\66\6\10\0\40\0\15\6\3\0\20\7\20\0\7\7"+ - "\14\0\2\6\30\0\3\6\31\0\1\6\6\0\5\6\1\0\207\6"+ - "\2\0\1\7\4\0\1\6\13\0\12\7\7\0\32\6\4\0\1\6"+ - "\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6"+ - "\2\0\3\6\3\0\2\6\3\0\2\6\22\0\3\7\2\0\2\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\7\1\12\1\2\1\111\1\3\1\1\16\7\4\0\1\12\1\13" + + "\1\33\1\0\1\6\1\107\1\104\1\34\1\75\1\76\1\5\1\45" + + "\1\102\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\101" + + "\1\11\1\32\1\15\1\23\1\110\1\27\1\17\1\25\1\26\1\43" + + "\1\17\2\20\1\73\4\20\1\74\5\20\1\30\3\20\1\37\2\20" + + "\1\24\1\46\1\31\1\106\1\20\1\0\1\51\1\47\1\53\1\62" + + "\1\44\1\40\1\72\1\65\1\60\1\20\1\52\1\63\1\70\1\56" + + "\1\55\1\66\1\20\1\50\1\54\1\57\1\61\1\71\1\64\1\36" + + "\1\67\1\20\1\77\1\105\1\100\1\103\6\7\1\112\32\7\2\0" + + "\4\6\4\0\1\6\2\0\1\7\7\0\1\6\1\0\1\22\2\0" + + "\1\6\5\0\27\6\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0" + + "\5\6\7\0\1\6\1\0\1\6\21\0\160\7\5\6\1\0\2\6" + + "\2\0\4\6\1\0\7\0\1\6\1\0\3\6\1\0\1\6\1\0" + + "\24\6\1\0\123\6\1\0\213\6\1\0\5\7\2\0\236\6\11\0" + + "\46\6\2\0\1\6\7\0\47\6\11\0\55\7\1\0\1\7\1\0" + + "\2\7\1\0\2\7\1\0\1\7\10\0\33\6\5\0\3\6\15\0" + + "\4\7\7\0\1\6\4\0\13\7\5\0\53\6\37\7\4\0\2\6" + + "\1\7\143\6\1\0\1\6\10\7\1\0\6\7\2\6\2\7\1\0" + + "\4\7\2\6\12\7\3\6\2\0\1\6\17\0\1\7\1\6\1\7" + + "\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7\41\6\11\7" + + "\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7\1\6\3\7" + + "\1\6\5\7\22\0\31\6\3\7\244\0\4\7\66\6\3\7\1\6" + + "\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0\7\6\1\0" + + "\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0" + + "\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6\7\7\2\0" + + "\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6\1\0\3\6" + + "\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7\1\0\6\6" + + "\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6" + + "\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7" + + "\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7" + + "\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6" + + "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7" + + "\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7\1\0" + + "\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0" + + "\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0" + + "\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0\3\6\2\7" + + "\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0\6\6\3\0" + + "\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0\2\6\3\0" + + "\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0\3\7\1\0" + + "\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0\1\6\7\0" + + "\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0" + + "\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7" + + "\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0\2\7\1\0" + + "\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0\5\6\2\0" + + "\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0\2\7\7\0" + + "\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6\17\0\2\7" + + "\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6\7\7\1\0" + + "\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6\2\7\2\0" + + "\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0\30\6\1\0" + + "\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0\6\7\1\0" + + "\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7\2\6\7\7" + + "\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0\1\6\2\0" + + "\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0\7\6\1\0" + + "\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0\4\6\1\7" + + "\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0\1\6\1\0" + + "\6\7\2\0\12\7\2\0\2\6\42\0\1\6\27\0\2\7\6\0" + + "\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0\2\7\10\6" + + "\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7\1\0\44\7" + + "\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0\6\6\4\7" + + "\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7\15\6\14\7" + + "\1\6\17\7\2\0\46\6\12\0\53\6\1\0\1\6\3\0\u0149\6" + + "\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\51\6" + + "\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6\1\0\1\6" + + "\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6\2\0\103\6" + + "\2\0\3\7\40\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6" + + "\1\0\32\6\5\0\113\6\3\0\3\6\17\0\15\6\1\0\4\6" + + "\3\7\13\0\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0" + + "\3\6\1\0\2\7\14\0\64\6\40\7\3\0\1\6\3\0\2\6" + + "\1\7\2\0\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0" + + "\51\6\1\7\1\6\5\0\106\6\12\0\35\6\3\0\14\7\4\0" + + "\14\7\12\0\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7" + + "\7\6\2\7\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7" + + "\1\0\35\7\2\0\13\7\6\0\12\7\15\0\1\6\130\0\5\7" + + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6" + + "\12\7\3\0\2\6\12\7\6\0\46\6\16\7\14\0\44\6\24\7" + + "\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7" + + "\4\6\1\7\4\6\1\7\15\0\300\6\47\7\25\0\4\7\u0116\6" + + "\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6\1\0\1\6" + + "\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6\1\0\7\6" + + "\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6\2\0\6\6" + + "\4\0\15\6\5\0\3\6\1\0\7\6\3\0\13\0\1\7\2\7" + + "\2\7\30\0\1\111\1\111\5\7\20\0\2\6\23\0\1\6\13\0" + + "\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0" + + "\32\6\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0" + + "\1\6\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0" + + "\1\6\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0" + + "\5\6\4\0\1\6\21\0\51\6\7\0\u0a70\0\57\6\1\0\57\6" + + "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0" + + "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6" + + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" + + "\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\3\6\31\0\11\6" + + "\6\7\1\0\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0" + + "\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0" + + "\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0" + + "\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7" + + "\14\0\2\7\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0" + + "\147\6\2\0\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7" + + "\3\6\1\7\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6" + + "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0" + + "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6" + + "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7" + + "\11\0\3\6\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0" + + "\1\6\1\7\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6" + + "\2\7\1\6\1\7\1\6\30\0\3\6\43\0\6\6\2\0\6\6" + + "\2\0\6\6\11\0\7\6\1\0\7\6\221\0\43\6\10\7\1\0" + + "\2\7\2\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0" + + "\u1800\0\u0900\0\u012e\6\2\0\76\6\2\0\152\6\46\0\7\6\14\0" + + "\5\6\5\0\1\6\1\7\12\6\1\0\15\6\1\0\5\6\1\0" + + "\1\6\1\0\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0" + + "\100\6\2\0\66\6\10\0\40\0\15\6\3\0\20\7\20\0\7\7" + + "\14\0\2\6\30\0\3\6\31\0\1\6\6\0\5\6\1\0\207\6" + + "\2\0\1\7\4\0\1\6\13\0\12\7\7\0\32\6\4\0\1\6" + + "\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6" + + "\2\0\3\6\3\0\2\6\3\0\2\6\22\0\3\7\2\0\2\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\12\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ - "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+ - "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\21\6"+ - "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ - "\1\35\1\36\1\37\1\40\1\41\2\42\1\43\1\1"+ - "\1\41\2\44\1\41\1\1\1\45\1\1\1\46\1\1"+ - "\1\47\2\1\1\50\1\1\1\51\2\41\2\52\1\41"+ - "\1\53\1\3\1\0\1\54\1\55\1\56\1\57\1\60"+ - "\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ - "\1\71\1\72\1\73\1\0\1\74\1\60\1\75\1\0"+ - "\2\75\7\6\1\76\1\77\2\6\1\100\16\6\1\101"+ - "\1\102\1\103\4\6\1\104\13\6\1\105\1\106\1\107"+ - "\1\110\1\111\1\112\1\113\1\114\1\115\1\116\1\117"+ - "\1\116\1\120\1\121\1\122\1\123\1\124\1\125\1\0"+ - "\1\126\1\0\1\127\1\0\1\130\1\131\1\0\1\132"+ - "\5\0\1\133\1\0\1\134\2\3\2\0\1\135\1\136"+ - "\1\137\1\140\1\141\1\0\1\60\1\142\2\143\1\75"+ - "\1\6\1\144\13\6\1\145\4\6\1\146\3\6\1\147"+ - "\6\6\1\150\12\6\1\151\1\6\1\152\1\6\1\153"+ - "\1\116\1\0\1\132\1\154\1\155\1\0\1\156\2\0"+ - "\1\157\1\160\1\0\1\161\1\143\1\75\4\6\1\162"+ - "\1\163\2\6\1\164\11\6\1\165\1\166\1\6\1\167"+ - "\11\6\1\170\5\6\1\171\1\6\1\0\1\172\1\173"+ - "\1\0\1\143\1\75\1\174\1\175\2\6\1\176\1\6"+ - "\1\177\1\200\1\6\1\201\1\6\1\202\3\6\1\203"+ - "\11\6\1\204\5\6\1\0\1\143\1\75\3\6\1\205"+ - "\1\6\1\206\1\207\2\6\1\210\3\6\1\211\3\6"+ - "\1\212\4\6\1\213\1\6\1\0\1\143\1\75\1\214"+ - "\1\6\1\215\10\6\1\216\1\217\1\6\1\220\1\221"+ - "\1\6\1\0\1\143\1\75\1\222\1\223\1\224\3\6"+ - "\1\225\3\6\1\226\1\0\1\143\1\75\1\227\1\6"+ - "\1\230\1\6\1\231\1\232\1\233\1\143\1\75\1\234"+ - "\1\235\6\75"; + private static final String ZZ_ACTION_PACKED_0 + = "\12\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" + + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17" + + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\21\6" + + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34" + + "\1\35\1\36\1\37\1\40\1\41\2\42\1\43\1\1" + + "\1\41\2\44\1\41\1\1\1\45\1\1\1\46\1\1" + + "\1\47\2\1\1\50\1\1\1\51\2\41\2\52\1\41" + + "\1\53\1\3\1\0\1\54\1\55\1\56\1\57\1\60" + + "\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70" + + "\1\71\1\72\1\73\1\0\1\74\1\60\1\75\1\0" + + "\2\75\7\6\1\76\1\77\2\6\1\100\16\6\1\101" + + "\1\102\1\103\4\6\1\104\13\6\1\105\1\106\1\107" + + "\1\110\1\111\1\112\1\113\1\114\1\115\1\116\1\117" + + "\1\116\1\120\1\121\1\122\1\123\1\124\1\125\1\0" + + "\1\126\1\0\1\127\1\0\1\130\1\131\1\0\1\132" + + "\5\0\1\133\1\0\1\134\2\3\2\0\1\135\1\136" + + "\1\137\1\140\1\141\1\0\1\60\1\142\2\143\1\75" + + "\1\6\1\144\13\6\1\145\4\6\1\146\3\6\1\147" + + "\6\6\1\150\12\6\1\151\1\6\1\152\1\6\1\153" + + "\1\116\1\0\1\132\1\154\1\155\1\0\1\156\2\0" + + "\1\157\1\160\1\0\1\161\1\143\1\75\4\6\1\162" + + "\1\163\2\6\1\164\11\6\1\165\1\166\1\6\1\167" + + "\11\6\1\170\5\6\1\171\1\6\1\0\1\172\1\173" + + "\1\0\1\143\1\75\1\174\1\175\2\6\1\176\1\6" + + "\1\177\1\200\1\6\1\201\1\6\1\202\3\6\1\203" + + "\11\6\1\204\5\6\1\0\1\143\1\75\3\6\1\205" + + "\1\6\1\206\1\207\2\6\1\210\3\6\1\211\3\6" + + "\1\212\4\6\1\213\1\6\1\0\1\143\1\75\1\214" + + "\1\6\1\215\10\6\1\216\1\217\1\6\1\220\1\221" + + "\1\6\1\0\1\143\1\75\1\222\1\223\1\224\3\6" + + "\1\225\3\6\1\226\1\0\1\143\1\75\1\227\1\6" + + "\1\230\1\6\1\231\1\232\1\233\1\143\1\75\1\234" + + "\1\235\6\75"; - private static int [] zzUnpackAction() { - int [] result = new int[426]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[426]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + int j = offset; /* index in unpacked array */ - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d"+ - "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u02ee\0\u0384\0\u03cf\0\u041a"+ - "\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627\0\u0672"+ - "\0\u02ee\0\u02ee\0\u02ee\0\u06bd\0\u02ee\0\u02ee\0\u0708\0\u0753"+ - "\0\u079e\0\u07e9\0\u0834\0\u087f\0\u08ca\0\u0915\0\u0960\0\u09ab"+ - "\0\u09f6\0\u0a41\0\u0a8c\0\u0ad7\0\u0b22\0\u0b6d\0\u0bb8\0\u0c03"+ - "\0\u0c4e\0\u0c99\0\u0ce4\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee"+ - "\0\u02ee\0\u02ee\0\u0d2f\0\u0d7a\0\u0dc5\0\u0e10\0\u02ee\0\u0e5b"+ - "\0\u0ea6\0\u02ee\0\u02ee\0\u0ef1\0\u0f3c\0\u0f87\0\u02ee\0\u0fd2"+ - "\0\u101d\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u1149"+ - "\0\u02ee\0\u1194\0\u02ee\0\u02ee\0\u11df\0\u02ee\0\u122a\0\u1275"+ - "\0\u02ee\0\u12c0\0\u130b\0\u02ee\0\u02ee\0\u1356\0\u02ee\0\u13a1"+ - "\0\u02ee\0\u13ec\0\u1437\0\u02ee\0\u02ee\0\u1482\0\u02ee\0\u02ee"+ - "\0\u14cd\0\u02ee\0\u02ee\0\u1518\0\u1563\0\u15ae\0\u15f9\0\u1644"+ - "\0\u168f\0\u16da\0\u1725\0\u1770\0\u17bb\0\u1806\0\u1851\0\u189c"+ - "\0\u18e7\0\u02ee\0\u02ee\0\u1932\0\u197d\0\u0465\0\u19c8\0\u1a13"+ - "\0\u1a5e\0\u1aa9\0\u1af4\0\u1b3f\0\u1b8a\0\u1bd5\0\u1c20\0\u1c6b"+ - "\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u0465\0\u0465\0\u1de2\0\u1e2d"+ - "\0\u1e78\0\u1ec3\0\u1f0e\0\u0465\0\u1f59\0\u1fa4\0\u1fef\0\u203a"+ - "\0\u2085\0\u20d0\0\u211b\0\u2166\0\u21b1\0\u21fc\0\u2247\0\u02ee"+ - "\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee"+ - "\0\u2292\0\u02ee\0\u22dd\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee"+ - "\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u02ee\0\u02ee"+ - "\0\u1194\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454\0\u249f\0\u24ea"+ - "\0\u2535\0\u02ee\0\u2580\0\u02ee\0\u25cb\0\u2616\0\u02ee\0\u02ee"+ - "\0\u02ee\0\u2661\0\u02ee\0\u26ac\0\u26ac\0\u02ee\0\u26f7\0\u1644"+ - "\0\u2742\0\u278d\0\u0465\0\u27d8\0\u2823\0\u286e\0\u28b9\0\u2904"+ - "\0\u294f\0\u299a\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u0465\0\u2b11"+ - "\0\u2b5c\0\u2ba7\0\u2bf2\0\u0465\0\u2c3d\0\u2c88\0\u2cd3\0\u0465"+ - "\0\u2d1e\0\u2d69\0\u2db4\0\u2dff\0\u2e4a\0\u2e95\0\u0465\0\u2ee0"+ - "\0\u2f2b\0\u2f76\0\u2fc1\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138"+ - "\0\u3183\0\u0465\0\u31ce\0\u0465\0\u3219\0\u0465\0\u02ee\0\u2328"+ - "\0\u02ee\0\u02ee\0\u02ee\0\u3264\0\u02ee\0\u32af\0\u32fa\0\u3345"+ - "\0\u02ee\0\u3390\0\u02ee\0\u33db\0\u3426\0\u3471\0\u34bc\0\u3507"+ - "\0\u3552\0\u0465\0\u0465\0\u359d\0\u35e8\0\u0465\0\u3633\0\u367e"+ - "\0\u36c9\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840\0\u388b\0\u0465"+ - "\0\u0465\0\u38d6\0\u0465\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d"+ - "\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u0465\0\u3bc4\0\u3c0f\0\u3c5a"+ - "\0\u3ca5\0\u3cf0\0\u0465\0\u3d3b\0\u3d86\0\u02ee\0\u02ee\0\u3dd1"+ - "\0\u3e1c\0\u3e67\0\u0465\0\u3eb2\0\u3efd\0\u3f48\0\u0465\0\u3f93"+ - "\0\u0465\0\u0465\0\u3fde\0\u0465\0\u4029\0\u0465\0\u4074\0\u40bf"+ - "\0\u410a\0\u0465\0\u4155\0\u41a0\0\u41eb\0\u4236\0\u4281\0\u42cc"+ - "\0\u4317\0\u4362\0\u43ad\0\u0465\0\u43f8\0\u4443\0\u448e\0\u44d9"+ - "\0\u4524\0\u456f\0\u45ba\0\u4605\0\u4650\0\u469b\0\u46e6\0\u0465"+ - "\0\u4731\0\u0465\0\u0465\0\u477c\0\u47c7\0\u0465\0\u4812\0\u485d"+ - "\0\u48a8\0\u0465\0\u48f3\0\u493e\0\u4989\0\u0465\0\u49d4\0\u4a1f"+ - "\0\u4a6a\0\u4ab5\0\u0465\0\u4b00\0\u4b4b\0\u4b96\0\u4be1\0\u0465"+ - "\0\u4c2c\0\u0465\0\u4c77\0\u4cc2\0\u4d0d\0\u4d58\0\u4da3\0\u4dee"+ - "\0\u4e39\0\u4e84\0\u0465\0\u0465\0\u4ecf\0\u0465\0\u0465\0\u4f1a"+ - "\0\u4f65\0\u4fb0\0\u4ffb\0\u0465\0\u0465\0\u0465\0\u5046\0\u5091"+ - "\0\u50dc\0\u0465\0\u5127\0\u5172\0\u51bd\0\u0465\0\u5208\0\u5253"+ - "\0\u529e\0\u0465\0\u52e9\0\u0465\0\u5334\0\u0465\0\u0465\0\u02ee"+ - "\0\u02ee\0\u537f\0\u0465\0\u0465\0\u53ca\0\u5415\0\u5460\0\u54ab"+ - "\0\u54f6\0\u15ae"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[426]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\13"+ - "\1\22\1\23\1\16\1\24\1\25\1\26\1\27\2\21"+ - "\1\30\1\13\1\31\1\32\4\21\1\33\1\34\1\35"+ - "\1\36\1\37\2\21\1\40\2\30\1\21\1\41\1\42"+ - "\1\13\1\43\1\44\1\45\1\21\1\46\1\47\1\50"+ - "\1\51\1\52\1\53\1\54\1\55\1\21\1\56\1\21"+ - "\1\57\2\21\1\60\1\61\1\62\1\63\1\64\1\65"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\2\0\1\100\1\101\1\102\30\100\1\103"+ - "\12\100\1\104\44\100\1\105\1\101\1\102\31\105\1\103"+ - "\11\105\1\104\44\105\1\13\1\106\1\107\1\110\1\111"+ - "\5\13\1\110\2\13\1\112\3\113\4\13\4\113\5\13"+ - "\3\113\2\13\2\113\2\13\26\113\2\13\1\114\11\13"+ - "\2\0\1\13\1\0\1\13\1\0\27\13\1\115\43\13"+ - "\1\116\11\13\2\0\1\13\1\106\1\107\1\110\6\13"+ - "\1\110\3\13\3\117\2\13\1\120\1\13\4\117\5\13"+ - "\3\117\2\13\2\117\2\13\26\117\2\13\1\121\11\13"+ - "\2\0\1\13\1\0\1\13\1\0\27\13\1\122\43\13"+ - "\1\123\11\13\2\0\1\124\1\106\1\107\1\0\25\124"+ - "\1\125\57\124\2\0\1\126\1\106\1\107\1\0\10\126"+ - "\1\127\74\126\2\0\1\124\1\106\1\107\1\0\5\124"+ - "\1\130\65\124\1\131\11\124\117\0\1\15\113\0\1\16"+ - "\6\0\1\16\104\0\1\132\1\133\24\0\1\134\112\0"+ - "\1\135\66\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\26\21\15\0\1\21\10\0\1\136\1\137"+ - "\7\0\1\140\13\0\1\140\3\0\2\140\32\0\1\141"+ - "\26\0\1\142\4\0\3\143\4\0\4\143\1\0\1\144"+ - "\3\0\3\143\2\0\2\143\2\0\26\143\2\0\1\145"+ - "\45\0\1\146\74\0\1\147\15\0\1\150\75\0\1\151"+ - "\14\0\1\152\76\0\1\153\104\0\1\140\10\0\1\30"+ - "\13\0\1\30\3\0\2\30\2\154\100\0\1\155\70\0"+ - "\1\140\10\0\1\156\13\0\1\157\2\160\1\0\1\161"+ - "\1\162\2\154\54\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\2\21\1\163\3\21\1\164\2\21"+ - "\1\165\1\166\13\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\1\21\1\167\6\21\2\0"+ - "\2\21\1\170\11\21\1\171\11\21\15\0\1\21\32\0"+ - "\1\172\12\0\1\173\53\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\1\21\1\174\24\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\7\21\1\175\2\0\26\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21"+ - "\1\176\20\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\2\21\1\177\3\21"+ - "\1\200\5\21\1\201\11\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\202\2\0"+ - "\10\21\1\203\1\21\1\204\2\21\1\205\10\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\22\21\1\206\3\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\207"+ - "\2\0\2\21\1\210\7\21\1\211\13\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\1\21\1\212\14\21\1\213\1\21\1\214\5\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\3\21\1\215\4\21\2\0\5\21\1\216\1\21"+ - "\1\217\11\21\1\220\4\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21"+ - "\1\221\1\21\1\222\16\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\223\2\0"+ - "\6\21\1\224\11\21\1\225\5\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\11\21\1\226\4\21\1\227\7\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\1\21\1\230\1\231\7\21\1\232\13\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\2\21\1\233\3\21\1\234\17\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21"+ - "\1\235\2\0\26\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\236"+ - "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\2\21\1\237\23\21\15\0"+ - "\1\21\32\0\1\240\51\0\1\241\40\0\1\242\52\0"+ - "\1\243\37\0\1\244\112\0\1\245\60\0\1\100\2\0"+ - "\30\100\1\0\12\100\1\0\44\100\2\0\1\102\110\0"+ - "\1\246\3\0\27\246\1\247\1\250\1\251\2\246\1\252"+ - "\1\251\1\253\3\246\1\254\1\255\1\256\5\246\1\257"+ - "\1\260\31\246\2\0\1\105\2\0\31\105\1\0\11\105"+ - "\1\0\44\105\2\0\1\107\113\0\1\110\6\0\1\110"+ - "\115\0\1\261\105\0\1\262\3\0\1\262\1\0\5\262"+ - "\2\0\4\262\1\0\1\263\2\0\10\262\2\0\26\262"+ - "\16\0\1\264\2\0\30\264\1\265\57\264\10\0\1\266"+ - "\3\0\1\266\1\0\5\266\2\0\4\266\1\0\1\267"+ - "\2\0\10\266\2\0\26\266\33\0\1\270\75\0\1\271"+ - "\2\0\30\271\1\272\1\273\56\271\31\0\1\274\75\0"+ - "\1\275\102\0\1\276\6\0\1\277\2\0\3\300\2\0"+ - "\1\301\1\0\4\300\5\0\3\300\2\0\2\300\2\0"+ - "\26\300\2\0\1\302\13\0\1\132\1\303\1\304\110\132"+ - "\5\305\1\306\105\305\10\0\1\307\123\0\1\140\13\0"+ - "\1\140\3\0\2\140\2\154\100\0\1\310\70\0\1\143"+ - "\3\0\1\143\1\0\5\143\2\0\4\143\4\0\10\143"+ - "\2\0\26\143\50\0\1\311\75\0\1\312\14\0\1\313"+ - "\74\0\1\314\4\0\1\315\13\0\1\315\3\0\2\315"+ - "\2\0\1\314\77\0\1\316\70\0\1\140\10\0\1\156"+ - "\13\0\1\156\3\0\2\156\2\154\56\0\1\140\10\0"+ - "\1\156\13\0\1\157\3\0\1\161\1\162\2\154\65\0"+ - "\1\317\1\0\1\317\3\0\3\317\5\0\1\320\2\0"+ - "\5\317\2\0\1\317\1\0\1\317\1\0\1\317\6\0"+ - "\1\317\40\0\1\140\10\0\1\156\13\0\1\162\3\0"+ - "\2\162\2\154\56\0\1\140\10\0\1\156\13\0\1\321"+ - "\3\0\2\321\2\154\54\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\14\21\1\322\11\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\1\21\1\323\24\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\7\21\1\324\16\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\325"+ - "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\10\21\1\326\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\4\21\1\327\21\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\5\21\1\330\20\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\7\21\1\331\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\10\21\1\332\15\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\5\21\1\333\2\21\1\334\15\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\7\21\1\335\16\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21"+ - "\1\336\23\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\10\21\1\337\15\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\2\21\1\340\23\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\17\21\1\341\6\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21"+ - "\1\342\14\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\7\21\1\343\2\0\26\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\15\21\1\344\10\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\21\21\1\345\4\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\346"+ - "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\12\21\1\347\5\21\1\350"+ - "\5\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\1\21\1\351\7\21\1\352"+ - "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\17\21\1\353\6\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\5\21\1\354\2\21\1\355\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\17\21\1\356\6\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\357"+ - "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\13\21\1\360\12\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\3\21\1\361\4\21\2\0\14\21\1\362\11\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\7\21\1\363\16\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\10\21\1\364\15\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21"+ - "\1\365\14\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\6\21\1\366\2\21"+ - "\1\367\14\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\4\21\1\370\21\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\1\371\25\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\1\21\1\372\24\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\11\21\1\373"+ - "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\10\21\1\374\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\3\21\1\375\4\21\2\0\26\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\25\21\1\376\15\0\1\21\35\0\1\253\3\0\2\253"+ - "\105\0\1\377\3\0\2\377\50\0\1\u0100\2\0\30\u0100"+ - "\1\272\1\0\56\u0100\1\273\2\0\30\273\1\u0101\57\273"+ - "\15\0\1\u0102\112\0\1\u0103\113\0\3\u0104\4\0\4\u0104"+ - "\5\0\3\u0104\2\0\2\u0104\2\0\26\u0104\2\0\1\u0105"+ - "\27\0\1\u0106\7\0\1\u0107\76\0\1\300\3\0\1\300"+ - "\1\0\5\300\2\0\4\300\4\0\10\300\2\0\26\300"+ - "\34\0\3\u0108\4\0\4\u0108\5\0\3\u0108\2\0\2\u0108"+ - "\2\0\26\u0108\2\0\1\u0109\15\0\1\304\110\0\5\305"+ - "\1\u010a\105\305\4\0\1\304\1\306\137\0\1\u010b\101\0"+ - "\1\315\13\0\1\315\3\0\2\315\67\0\1\u010c\1\0"+ - "\1\u010c\3\0\3\u010c\5\0\1\u010c\2\0\5\u010c\2\0"+ - "\1\u010c\1\0\1\u010c\1\0\1\u010c\6\0\1\u010c\40\0"+ - "\1\140\10\0\1\156\13\0\1\u010d\3\0\2\u010d\2\154"+ - "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\5\21\1\u010e\20\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21"+ - "\1\u010f\23\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0110\21\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\7\21\1\u0111\2\0\26\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\16\21\1\u0112\7\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\7\21\1\u0113\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\2\21\1\u0114\23\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\12\21\1\u0115\13\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0116\2\0"+ - "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\4\21\1\u0117\21\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\5\21\1\u0118\2\21\1\u0119\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\5\21\1\u011a\20\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\10\21\1\u011b\15\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\7\21\1\u011c\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\10\21\1\u011d\15\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\1\21\1\u011e\24\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\u011f\2\0"+ - "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\14\21\1\u0120\11\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\7\21\1\u0121\2\0\26\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\6\21"+ - "\1\u0122\17\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\5\21\1\u0123\20\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\7\21\1\u0124\2\0\26\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\10\21\1\u0125\15\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\7\21\1\u0126\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\6\21\1\u0127\5\21\1\u0128\11\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\7\21\1\u0129\2\0\26\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\2\21\1\u012a\23\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\7\21\1\u012b\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\2\21\1\u012c\23\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\16\21\1\u012d\7\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21"+ - "\1\u012e\11\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\10\21\1\u012f\15\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\22\21\1\u0130\3\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\3\21\1\u0131\22\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21"+ - "\1\u0132\11\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\13\21\1\u0133\12\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\11\21\1\u0134\14\21\15\0\1\21"+ - "\1\0\2\u0135\5\0\1\u0104\1\0\1\u0135\1\0\1\u0104"+ - "\1\u0136\5\u0104\2\0\4\u0104\4\0\10\u0104\2\0\26\u0104"+ - "\32\0\1\u0137\123\0\1\u0138\75\0\1\u0108\3\0\1\u0108"+ - "\1\0\5\u0108\2\0\4\u0108\4\0\10\u0108\2\0\26\u0108"+ - "\16\0\4\305\1\304\1\u010a\105\305\17\0\1\u0139\1\0"+ - "\1\u0139\3\0\3\u0139\5\0\1\u0139\2\0\5\u0139\2\0"+ - "\1\u0139\1\0\1\u0139\1\0\1\u0139\6\0\1\u0139\40\0"+ - "\1\140\10\0\1\156\13\0\1\u013a\3\0\2\u013a\2\154"+ - "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21"+ - "\1\u013b\2\0\26\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u013c"+ - "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\10\21\1\u013d\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\7\21\1\u013e\16\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\3\21\1\u013f\22\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0140"+ - "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\16\21\1\u0141\7\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\10\21\1\u0142\15\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\11\21\1\u0143\14\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u0144"+ - "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\11\21\1\u0145\14\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\1\21\1\u0146\24\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\4\21\1\u0147\21\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0148"+ - "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\5\21\1\u0149\20\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\15\21\1\u014a\10\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\6\21\1\u014b\17\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\2\21\1\u014c"+ - "\23\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\1\21\1\u014d\24\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\1\21\1\u014e\24\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u014f"+ - "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\3\21\1\u0150\4\21\2\0\26\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\12\21\1\u0151\13\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\10\21\1\u0152\15\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\21\21"+ - "\1\u0153\4\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\7\21\1\u0154\2\0\26\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\7\21\1\u0155\2\0\26\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21"+ - "\1\u0156\23\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\2\21\1\u0157\23\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\11\21\1\u0158\14\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\7\21\1\u0159\16\21\15\0\1\21\1\0\2\u0135"+ - "\7\0\1\u0135\2\0\1\u0136\123\0\1\u015a\103\0\1\u015b"+ - "\1\0\1\u015b\3\0\3\u015b\5\0\1\u015b\2\0\5\u015b"+ - "\2\0\1\u015b\1\0\1\u015b\1\0\1\u015b\6\0\1\u015b"+ - "\40\0\1\140\10\0\1\156\13\0\1\u015c\3\0\2\u015c"+ - "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\14\21\1\u015d\11\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\11\21\1\u015e\14\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\13\21\1\u015f"+ - "\12\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\7\21\1\u0160\16\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\7\21\1\u0161\16\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\4\21\1\u0162\21\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\16\21\1\u0163"+ - "\7\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\11\21\1\u0164\14\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\17\21\1\u0165\6\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\3\21\1\u0166"+ - "\4\21\2\0\26\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\u0167"+ - "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\3\21\1\u0168\4\21\2\0\7\21\1\u0169"+ - "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\10\21\1\u016a\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\21\21\1\u016b\4\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\11\21\1\u016c\14\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u016d"+ - "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\7\21\1\u016e\2\0\26\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\11\21\1\u016f\14\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\4\21"+ - "\1\u0170\21\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\10\21\1\u0171\15\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\23\21\1\u0172\2\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\4\21\1\u0173\21\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21"+ - "\1\u0174\14\21\15\0\1\21\27\0\1\u0175\102\0\1\u0176"+ - "\1\0\1\u0176\3\0\3\u0176\5\0\1\u0176\2\0\5\u0176"+ - "\2\0\1\u0176\1\0\1\u0176\1\0\1\u0176\6\0\1\u0176"+ - "\40\0\1\140\10\0\1\156\13\0\1\u0177\3\0\2\u0177"+ - "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\20\21\1\u0178\5\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\6\21\1\u0179\17\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u017a"+ - "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\12\21\1\u017b\13\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\13\21\1\u017c\12\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\2\21\1\u017d\23\21\15\0\1\21\6\0\2\21\7\0"+ - "\3\21\3\0\4\21\4\0\10\21\2\0\4\21\1\u017e"+ - "\21\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\2\21\1\u017f\23\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\2\21\1\u0180\23\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0181"+ - "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\7\21\1\u0182\16\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\10\21\1\u0183\15\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\4\21\1\u0184\21\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21"+ - "\1\u0185\15\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\7\21\1\u0186\2\0\26\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\7\21\1\u0187\2\0\26\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21"+ - "\1\u0188\15\21\15\0\1\21\30\0\1\u0189\101\0\1\u018a"+ - "\1\0\1\u018a\3\0\3\u018a\5\0\1\u018a\2\0\5\u018a"+ - "\2\0\1\u018a\1\0\1\u018a\1\0\1\u018a\6\0\1\u018a"+ - "\40\0\1\140\10\0\1\156\13\0\1\u018b\3\0\2\u018b"+ - "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\7\21\1\u018c\16\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u018d"+ - "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\7\21\1\u018e\2\0\26\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\4\21\1\u018f\21\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0190"+ - "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21"+ - "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0191\21\21"+ - "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\10\21\2\0\14\21\1\u0192\11\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\7\21\1\u0193\16\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0194\2\0"+ - "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\7\21\1\u0195\2\0\26\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\20\21\1\u0196\5\21\15\0\1\21\27\0\1\u0197"+ - "\102\0\1\u0198\1\0\1\u0198\3\0\3\u0198\5\0\1\u0198"+ - "\2\0\5\u0198\2\0\1\u0198\1\0\1\u0198\1\0\1\u0198"+ - "\6\0\1\u0198\40\0\1\140\10\0\1\156\13\0\1\u0199"+ - "\3\0\2\u0199\2\154\54\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\7\21\1\u019a\2\0\26\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\6\21\1\u019b\17\21\15\0\1\21\6\0\2\21"+ - "\7\0\3\21\3\0\4\21\4\0\7\21\1\u019c\2\0"+ - "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0"+ - "\4\21\4\0\10\21\2\0\10\21\1\u019d\15\21\15\0"+ - "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0"+ - "\10\21\2\0\13\21\1\u019e\12\21\15\0\1\21\6\0"+ - "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0"+ - "\13\21\1\u019f\12\21\15\0\1\21\24\0\1\u01a0\105\0"+ - "\1\u01a1\1\0\1\u01a1\3\0\3\u01a1\5\0\1\u01a1\2\0"+ - "\5\u01a1\2\0\1\u01a1\1\0\1\u01a1\1\0\1\u01a1\6\0"+ - "\1\u01a1\40\0\1\140\10\0\1\156\13\0\1\u01a2\3\0"+ - "\2\u01a2\2\154\54\0\2\21\7\0\3\21\3\0\4\21"+ - "\4\0\3\21\1\u01a3\4\21\2\0\26\21\15\0\1\21"+ - "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21"+ - "\2\0\5\21\1\u01a4\20\21\15\0\1\21\10\0\1\140"+ - "\10\0\1\156\13\0\1\u01a5\3\0\2\u01a5\2\154\56\0"+ - "\1\140\10\0\1\156\13\0\1\u01a6\3\0\2\u01a6\2\154"+ - "\56\0\1\140\10\0\1\156\13\0\1\u01a7\3\0\2\u01a7"+ - "\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a8\3\0"+ - "\2\u01a8\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a9"+ - "\3\0\2\u01a9\2\154\56\0\1\140\10\0\1\156\13\0"+ - "\1\u01aa\3\0\2\u01aa\2\154\46\0"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d" + + "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u02ee\0\u0384\0\u03cf\0\u041a" + + "\0\u0465\0\u04b0\0\u04fb\0\u0546\0\u0591\0\u05dc\0\u0627\0\u0672" + + "\0\u02ee\0\u02ee\0\u02ee\0\u06bd\0\u02ee\0\u02ee\0\u0708\0\u0753" + + "\0\u079e\0\u07e9\0\u0834\0\u087f\0\u08ca\0\u0915\0\u0960\0\u09ab" + + "\0\u09f6\0\u0a41\0\u0a8c\0\u0ad7\0\u0b22\0\u0b6d\0\u0bb8\0\u0c03" + + "\0\u0c4e\0\u0c99\0\u0ce4\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" + + "\0\u02ee\0\u02ee\0\u0d2f\0\u0d7a\0\u0dc5\0\u0e10\0\u02ee\0\u0e5b" + + "\0\u0ea6\0\u02ee\0\u02ee\0\u0ef1\0\u0f3c\0\u0f87\0\u02ee\0\u0fd2" + + "\0\u101d\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u1149" + + "\0\u02ee\0\u1194\0\u02ee\0\u02ee\0\u11df\0\u02ee\0\u122a\0\u1275" + + "\0\u02ee\0\u12c0\0\u130b\0\u02ee\0\u02ee\0\u1356\0\u02ee\0\u13a1" + + "\0\u02ee\0\u13ec\0\u1437\0\u02ee\0\u02ee\0\u1482\0\u02ee\0\u02ee" + + "\0\u14cd\0\u02ee\0\u02ee\0\u1518\0\u1563\0\u15ae\0\u15f9\0\u1644" + + "\0\u168f\0\u16da\0\u1725\0\u1770\0\u17bb\0\u1806\0\u1851\0\u189c" + + "\0\u18e7\0\u02ee\0\u02ee\0\u1932\0\u197d\0\u0465\0\u19c8\0\u1a13" + + "\0\u1a5e\0\u1aa9\0\u1af4\0\u1b3f\0\u1b8a\0\u1bd5\0\u1c20\0\u1c6b" + + "\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u0465\0\u0465\0\u1de2\0\u1e2d" + + "\0\u1e78\0\u1ec3\0\u1f0e\0\u0465\0\u1f59\0\u1fa4\0\u1fef\0\u203a" + + "\0\u2085\0\u20d0\0\u211b\0\u2166\0\u21b1\0\u21fc\0\u2247\0\u02ee" + + "\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" + + "\0\u2292\0\u02ee\0\u22dd\0\u02ee\0\u02ee\0\u02ee\0\u02ee\0\u02ee" + + "\0\u02ee\0\u1068\0\u02ee\0\u10b3\0\u02ee\0\u10fe\0\u02ee\0\u02ee" + + "\0\u1194\0\u2328\0\u2373\0\u23be\0\u2409\0\u2454\0\u249f\0\u24ea" + + "\0\u2535\0\u02ee\0\u2580\0\u02ee\0\u25cb\0\u2616\0\u02ee\0\u02ee" + + "\0\u02ee\0\u2661\0\u02ee\0\u26ac\0\u26ac\0\u02ee\0\u26f7\0\u1644" + + "\0\u2742\0\u278d\0\u0465\0\u27d8\0\u2823\0\u286e\0\u28b9\0\u2904" + + "\0\u294f\0\u299a\0\u29e5\0\u2a30\0\u2a7b\0\u2ac6\0\u0465\0\u2b11" + + "\0\u2b5c\0\u2ba7\0\u2bf2\0\u0465\0\u2c3d\0\u2c88\0\u2cd3\0\u0465" + + "\0\u2d1e\0\u2d69\0\u2db4\0\u2dff\0\u2e4a\0\u2e95\0\u0465\0\u2ee0" + + "\0\u2f2b\0\u2f76\0\u2fc1\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138" + + "\0\u3183\0\u0465\0\u31ce\0\u0465\0\u3219\0\u0465\0\u02ee\0\u2328" + + "\0\u02ee\0\u02ee\0\u02ee\0\u3264\0\u02ee\0\u32af\0\u32fa\0\u3345" + + "\0\u02ee\0\u3390\0\u02ee\0\u33db\0\u3426\0\u3471\0\u34bc\0\u3507" + + "\0\u3552\0\u0465\0\u0465\0\u359d\0\u35e8\0\u0465\0\u3633\0\u367e" + + "\0\u36c9\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840\0\u388b\0\u0465" + + "\0\u0465\0\u38d6\0\u0465\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d" + + "\0\u3a98\0\u3ae3\0\u3b2e\0\u3b79\0\u0465\0\u3bc4\0\u3c0f\0\u3c5a" + + "\0\u3ca5\0\u3cf0\0\u0465\0\u3d3b\0\u3d86\0\u02ee\0\u02ee\0\u3dd1" + + "\0\u3e1c\0\u3e67\0\u0465\0\u3eb2\0\u3efd\0\u3f48\0\u0465\0\u3f93" + + "\0\u0465\0\u0465\0\u3fde\0\u0465\0\u4029\0\u0465\0\u4074\0\u40bf" + + "\0\u410a\0\u0465\0\u4155\0\u41a0\0\u41eb\0\u4236\0\u4281\0\u42cc" + + "\0\u4317\0\u4362\0\u43ad\0\u0465\0\u43f8\0\u4443\0\u448e\0\u44d9" + + "\0\u4524\0\u456f\0\u45ba\0\u4605\0\u4650\0\u469b\0\u46e6\0\u0465" + + "\0\u4731\0\u0465\0\u0465\0\u477c\0\u47c7\0\u0465\0\u4812\0\u485d" + + "\0\u48a8\0\u0465\0\u48f3\0\u493e\0\u4989\0\u0465\0\u49d4\0\u4a1f" + + "\0\u4a6a\0\u4ab5\0\u0465\0\u4b00\0\u4b4b\0\u4b96\0\u4be1\0\u0465" + + "\0\u4c2c\0\u0465\0\u4c77\0\u4cc2\0\u4d0d\0\u4d58\0\u4da3\0\u4dee" + + "\0\u4e39\0\u4e84\0\u0465\0\u0465\0\u4ecf\0\u0465\0\u0465\0\u4f1a" + + "\0\u4f65\0\u4fb0\0\u4ffb\0\u0465\0\u0465\0\u0465\0\u5046\0\u5091" + + "\0\u50dc\0\u0465\0\u5127\0\u5172\0\u51bd\0\u0465\0\u5208\0\u5253" + + "\0\u529e\0\u0465\0\u52e9\0\u0465\0\u5334\0\u0465\0\u0465\0\u02ee" + + "\0\u02ee\0\u537f\0\u0465\0\u0465\0\u53ca\0\u5415\0\u5460\0\u54ab" + + "\0\u54f6\0\u15ae"; - private static int [] zzUnpackTrans() { - int [] result = new int[21825]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[426]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + int j = offset; /* index in unpacked array */ - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\12\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"+ - "\25\1\7\11\4\1\1\11\2\1\2\11\3\1\1\11"+ - "\2\1\1\11\1\1\1\11\1\1\1\11\2\1\1\11"+ - "\1\1\2\11\1\1\1\11\2\1\1\11\1\1\1\0"+ - "\2\11\1\1\1\11\1\1\1\11\2\1\2\11\1\1"+ - "\2\11\1\1\2\11\1\0\3\1\1\0\11\1\2\11"+ - "\44\1\11\11\1\1\1\11\1\1\6\11\1\0\1\11"+ - "\1\0\1\11\1\0\2\11\1\0\1\1\5\0\1\1"+ - "\1\0\1\11\1\1\1\11\2\0\3\11\1\1\1\11"+ - "\1\0\1\1\1\11\60\1\1\11\1\0\3\11\1\0"+ - "\1\11\2\0\1\1\1\11\1\0\1\11\51\1\1\0"+ - "\2\11\1\0\41\1\1\0\32\1\1\0\23\1\1\0"+ - "\15\1\1\0\10\1\2\11\11\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[426]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\13" + + "\1\22\1\23\1\16\1\24\1\25\1\26\1\27\2\21" + + "\1\30\1\13\1\31\1\32\4\21\1\33\1\34\1\35" + + "\1\36\1\37\2\21\1\40\2\30\1\21\1\41\1\42" + + "\1\13\1\43\1\44\1\45\1\21\1\46\1\47\1\50" + + "\1\51\1\52\1\53\1\54\1\55\1\21\1\56\1\21" + + "\1\57\2\21\1\60\1\61\1\62\1\63\1\64\1\65" + + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75" + + "\1\76\1\77\2\0\1\100\1\101\1\102\30\100\1\103" + + "\12\100\1\104\44\100\1\105\1\101\1\102\31\105\1\103" + + "\11\105\1\104\44\105\1\13\1\106\1\107\1\110\1\111" + + "\5\13\1\110\2\13\1\112\3\113\4\13\4\113\5\13" + + "\3\113\2\13\2\113\2\13\26\113\2\13\1\114\11\13" + + "\2\0\1\13\1\0\1\13\1\0\27\13\1\115\43\13" + + "\1\116\11\13\2\0\1\13\1\106\1\107\1\110\6\13" + + "\1\110\3\13\3\117\2\13\1\120\1\13\4\117\5\13" + + "\3\117\2\13\2\117\2\13\26\117\2\13\1\121\11\13" + + "\2\0\1\13\1\0\1\13\1\0\27\13\1\122\43\13" + + "\1\123\11\13\2\0\1\124\1\106\1\107\1\0\25\124" + + "\1\125\57\124\2\0\1\126\1\106\1\107\1\0\10\126" + + "\1\127\74\126\2\0\1\124\1\106\1\107\1\0\5\124" + + "\1\130\65\124\1\131\11\124\117\0\1\15\113\0\1\16" + + "\6\0\1\16\104\0\1\132\1\133\24\0\1\134\112\0" + + "\1\135\66\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\26\21\15\0\1\21\10\0\1\136\1\137" + + "\7\0\1\140\13\0\1\140\3\0\2\140\32\0\1\141" + + "\26\0\1\142\4\0\3\143\4\0\4\143\1\0\1\144" + + "\3\0\3\143\2\0\2\143\2\0\26\143\2\0\1\145" + + "\45\0\1\146\74\0\1\147\15\0\1\150\75\0\1\151" + + "\14\0\1\152\76\0\1\153\104\0\1\140\10\0\1\30" + + "\13\0\1\30\3\0\2\30\2\154\100\0\1\155\70\0" + + "\1\140\10\0\1\156\13\0\1\157\2\160\1\0\1\161" + + "\1\162\2\154\54\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\2\21\1\163\3\21\1\164\2\21" + + "\1\165\1\166\13\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\1\21\1\167\6\21\2\0" + + "\2\21\1\170\11\21\1\171\11\21\15\0\1\21\32\0" + + "\1\172\12\0\1\173\53\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\1\21\1\174\24\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\7\21\1\175\2\0\26\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21" + + "\1\176\20\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\2\21\1\177\3\21" + + "\1\200\5\21\1\201\11\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\202\2\0" + + "\10\21\1\203\1\21\1\204\2\21\1\205\10\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\22\21\1\206\3\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\207" + + "\2\0\2\21\1\210\7\21\1\211\13\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\1\21\1\212\14\21\1\213\1\21\1\214\5\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\3\21\1\215\4\21\2\0\5\21\1\216\1\21" + + "\1\217\11\21\1\220\4\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\5\21" + + "\1\221\1\21\1\222\16\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\223\2\0" + + "\6\21\1\224\11\21\1\225\5\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\11\21\1\226\4\21\1\227\7\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\1\21\1\230\1\231\7\21\1\232\13\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\2\21\1\233\3\21\1\234\17\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21" + + "\1\235\2\0\26\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\236" + + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\2\21\1\237\23\21\15\0" + + "\1\21\32\0\1\240\51\0\1\241\40\0\1\242\52\0" + + "\1\243\37\0\1\244\112\0\1\245\60\0\1\100\2\0" + + "\30\100\1\0\12\100\1\0\44\100\2\0\1\102\110\0" + + "\1\246\3\0\27\246\1\247\1\250\1\251\2\246\1\252" + + "\1\251\1\253\3\246\1\254\1\255\1\256\5\246\1\257" + + "\1\260\31\246\2\0\1\105\2\0\31\105\1\0\11\105" + + "\1\0\44\105\2\0\1\107\113\0\1\110\6\0\1\110" + + "\115\0\1\261\105\0\1\262\3\0\1\262\1\0\5\262" + + "\2\0\4\262\1\0\1\263\2\0\10\262\2\0\26\262" + + "\16\0\1\264\2\0\30\264\1\265\57\264\10\0\1\266" + + "\3\0\1\266\1\0\5\266\2\0\4\266\1\0\1\267" + + "\2\0\10\266\2\0\26\266\33\0\1\270\75\0\1\271" + + "\2\0\30\271\1\272\1\273\56\271\31\0\1\274\75\0" + + "\1\275\102\0\1\276\6\0\1\277\2\0\3\300\2\0" + + "\1\301\1\0\4\300\5\0\3\300\2\0\2\300\2\0" + + "\26\300\2\0\1\302\13\0\1\132\1\303\1\304\110\132" + + "\5\305\1\306\105\305\10\0\1\307\123\0\1\140\13\0" + + "\1\140\3\0\2\140\2\154\100\0\1\310\70\0\1\143" + + "\3\0\1\143\1\0\5\143\2\0\4\143\4\0\10\143" + + "\2\0\26\143\50\0\1\311\75\0\1\312\14\0\1\313" + + "\74\0\1\314\4\0\1\315\13\0\1\315\3\0\2\315" + + "\2\0\1\314\77\0\1\316\70\0\1\140\10\0\1\156" + + "\13\0\1\156\3\0\2\156\2\154\56\0\1\140\10\0" + + "\1\156\13\0\1\157\3\0\1\161\1\162\2\154\65\0" + + "\1\317\1\0\1\317\3\0\3\317\5\0\1\320\2\0" + + "\5\317\2\0\1\317\1\0\1\317\1\0\1\317\6\0" + + "\1\317\40\0\1\140\10\0\1\156\13\0\1\162\3\0" + + "\2\162\2\154\56\0\1\140\10\0\1\156\13\0\1\321" + + "\3\0\2\321\2\154\54\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\14\21\1\322\11\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\1\21\1\323\24\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\7\21\1\324\16\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\325" + + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\10\21\1\326\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\4\21\1\327\21\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\5\21\1\330\20\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\7\21\1\331\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\10\21\1\332\15\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\5\21\1\333\2\21\1\334\15\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\7\21\1\335\16\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" + + "\1\336\23\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\10\21\1\337\15\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\2\21\1\340\23\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\17\21\1\341\6\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" + + "\1\342\14\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\7\21\1\343\2\0\26\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\15\21\1\344\10\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\21\21\1\345\4\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\346" + + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\12\21\1\347\5\21\1\350" + + "\5\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\1\21\1\351\7\21\1\352" + + "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\17\21\1\353\6\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\5\21\1\354\2\21\1\355\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\17\21\1\356\6\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\357" + + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\13\21\1\360\12\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\3\21\1\361\4\21\2\0\14\21\1\362\11\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\7\21\1\363\16\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\10\21\1\364\15\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" + + "\1\365\14\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\6\21\1\366\2\21" + + "\1\367\14\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\4\21\1\370\21\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\1\371\25\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\1\21\1\372\24\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\11\21\1\373" + + "\14\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\10\21\1\374\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\3\21\1\375\4\21\2\0\26\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\25\21\1\376\15\0\1\21\35\0\1\253\3\0\2\253" + + "\105\0\1\377\3\0\2\377\50\0\1\u0100\2\0\30\u0100" + + "\1\272\1\0\56\u0100\1\273\2\0\30\273\1\u0101\57\273" + + "\15\0\1\u0102\112\0\1\u0103\113\0\3\u0104\4\0\4\u0104" + + "\5\0\3\u0104\2\0\2\u0104\2\0\26\u0104\2\0\1\u0105" + + "\27\0\1\u0106\7\0\1\u0107\76\0\1\300\3\0\1\300" + + "\1\0\5\300\2\0\4\300\4\0\10\300\2\0\26\300" + + "\34\0\3\u0108\4\0\4\u0108\5\0\3\u0108\2\0\2\u0108" + + "\2\0\26\u0108\2\0\1\u0109\15\0\1\304\110\0\5\305" + + "\1\u010a\105\305\4\0\1\304\1\306\137\0\1\u010b\101\0" + + "\1\315\13\0\1\315\3\0\2\315\67\0\1\u010c\1\0" + + "\1\u010c\3\0\3\u010c\5\0\1\u010c\2\0\5\u010c\2\0" + + "\1\u010c\1\0\1\u010c\1\0\1\u010c\6\0\1\u010c\40\0" + + "\1\140\10\0\1\156\13\0\1\u010d\3\0\2\u010d\2\154" + + "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\5\21\1\u010e\20\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" + + "\1\u010f\23\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0110\21\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\7\21\1\u0111\2\0\26\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\16\21\1\u0112\7\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\7\21\1\u0113\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\2\21\1\u0114\23\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\12\21\1\u0115\13\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0116\2\0" + + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\4\21\1\u0117\21\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\5\21\1\u0118\2\21\1\u0119\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\5\21\1\u011a\20\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\10\21\1\u011b\15\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\7\21\1\u011c\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\10\21\1\u011d\15\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\1\21\1\u011e\24\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u011f\2\0" + + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\14\21\1\u0120\11\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\7\21\1\u0121\2\0\26\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\6\21" + + "\1\u0122\17\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\5\21\1\u0123\20\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\7\21\1\u0124\2\0\26\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\10\21\1\u0125\15\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\7\21\1\u0126\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\6\21\1\u0127\5\21\1\u0128\11\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\7\21\1\u0129\2\0\26\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\2\21\1\u012a\23\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\7\21\1\u012b\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\2\21\1\u012c\23\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\16\21\1\u012d\7\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21" + + "\1\u012e\11\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\10\21\1\u012f\15\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\22\21\1\u0130\3\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\3\21\1\u0131\22\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\14\21" + + "\1\u0132\11\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\13\21\1\u0133\12\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\11\21\1\u0134\14\21\15\0\1\21" + + "\1\0\2\u0135\5\0\1\u0104\1\0\1\u0135\1\0\1\u0104" + + "\1\u0136\5\u0104\2\0\4\u0104\4\0\10\u0104\2\0\26\u0104" + + "\32\0\1\u0137\123\0\1\u0138\75\0\1\u0108\3\0\1\u0108" + + "\1\0\5\u0108\2\0\4\u0108\4\0\10\u0108\2\0\26\u0108" + + "\16\0\4\305\1\304\1\u010a\105\305\17\0\1\u0139\1\0" + + "\1\u0139\3\0\3\u0139\5\0\1\u0139\2\0\5\u0139\2\0" + + "\1\u0139\1\0\1\u0139\1\0\1\u0139\6\0\1\u0139\40\0" + + "\1\140\10\0\1\156\13\0\1\u013a\3\0\2\u013a\2\154" + + "\54\0\2\21\7\0\3\21\3\0\4\21\4\0\7\21" + + "\1\u013b\2\0\26\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u013c" + + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\10\21\1\u013d\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\7\21\1\u013e\16\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\3\21\1\u013f\22\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0140" + + "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\16\21\1\u0141\7\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\10\21\1\u0142\15\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\11\21\1\u0143\14\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u0144" + + "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\11\21\1\u0145\14\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\1\21\1\u0146\24\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\4\21\1\u0147\21\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\1\21\1\u0148" + + "\24\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\5\21\1\u0149\20\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\15\21\1\u014a\10\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\6\21\1\u014b\17\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\2\21\1\u014c" + + "\23\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\1\21\1\u014d\24\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\1\21\1\u014e\24\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u014f" + + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\3\21\1\u0150\4\21\2\0\26\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\12\21\1\u0151\13\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\10\21\1\u0152\15\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\21\21" + + "\1\u0153\4\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\7\21\1\u0154\2\0\26\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\7\21\1\u0155\2\0\26\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\2\21" + + "\1\u0156\23\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\2\21\1\u0157\23\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\11\21\1\u0158\14\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\7\21\1\u0159\16\21\15\0\1\21\1\0\2\u0135" + + "\7\0\1\u0135\2\0\1\u0136\123\0\1\u015a\103\0\1\u015b" + + "\1\0\1\u015b\3\0\3\u015b\5\0\1\u015b\2\0\5\u015b" + + "\2\0\1\u015b\1\0\1\u015b\1\0\1\u015b\6\0\1\u015b" + + "\40\0\1\140\10\0\1\156\13\0\1\u015c\3\0\2\u015c" + + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\14\21\1\u015d\11\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\11\21\1\u015e\14\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\13\21\1\u015f" + + "\12\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\7\21\1\u0160\16\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\7\21\1\u0161\16\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\4\21\1\u0162\21\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\16\21\1\u0163" + + "\7\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\11\21\1\u0164\14\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\17\21\1\u0165\6\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\3\21\1\u0166" + + "\4\21\2\0\26\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\7\21\1\u0167" + + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\3\21\1\u0168\4\21\2\0\7\21\1\u0169" + + "\16\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\10\21\1\u016a\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\21\21\1\u016b\4\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\11\21\1\u016c\14\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\14\21\1\u016d" + + "\11\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\7\21\1\u016e\2\0\26\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\11\21\1\u016f\14\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\4\21" + + "\1\u0170\21\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\10\21\1\u0171\15\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\23\21\1\u0172\2\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\4\21\1\u0173\21\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\11\21" + + "\1\u0174\14\21\15\0\1\21\27\0\1\u0175\102\0\1\u0176" + + "\1\0\1\u0176\3\0\3\u0176\5\0\1\u0176\2\0\5\u0176" + + "\2\0\1\u0176\1\0\1\u0176\1\0\1\u0176\6\0\1\u0176" + + "\40\0\1\140\10\0\1\156\13\0\1\u0177\3\0\2\u0177" + + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\20\21\1\u0178\5\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\6\21\1\u0179\17\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\5\21\1\u017a" + + "\20\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\12\21\1\u017b\13\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\13\21\1\u017c\12\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\2\21\1\u017d\23\21\15\0\1\21\6\0\2\21\7\0" + + "\3\21\3\0\4\21\4\0\10\21\2\0\4\21\1\u017e" + + "\21\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\2\21\1\u017f\23\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\2\21\1\u0180\23\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0181" + + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\7\21\1\u0182\16\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\10\21\1\u0183\15\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\4\21\1\u0184\21\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21" + + "\1\u0185\15\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\7\21\1\u0186\2\0\26\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\7\21\1\u0187\2\0\26\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\10\21\2\0\10\21" + + "\1\u0188\15\21\15\0\1\21\30\0\1\u0189\101\0\1\u018a" + + "\1\0\1\u018a\3\0\3\u018a\5\0\1\u018a\2\0\5\u018a" + + "\2\0\1\u018a\1\0\1\u018a\1\0\1\u018a\6\0\1\u018a" + + "\40\0\1\140\10\0\1\156\13\0\1\u018b\3\0\2\u018b" + + "\2\154\54\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\7\21\1\u018c\16\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u018d" + + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\7\21\1\u018e\2\0\26\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\4\21\1\u018f\21\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\7\21\1\u0190" + + "\2\0\26\21\15\0\1\21\6\0\2\21\7\0\3\21" + + "\3\0\4\21\4\0\10\21\2\0\4\21\1\u0191\21\21" + + "\15\0\1\21\6\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\10\21\2\0\14\21\1\u0192\11\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\7\21\1\u0193\16\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u0194\2\0" + + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\7\21\1\u0195\2\0\26\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\20\21\1\u0196\5\21\15\0\1\21\27\0\1\u0197" + + "\102\0\1\u0198\1\0\1\u0198\3\0\3\u0198\5\0\1\u0198" + + "\2\0\5\u0198\2\0\1\u0198\1\0\1\u0198\1\0\1\u0198" + + "\6\0\1\u0198\40\0\1\140\10\0\1\156\13\0\1\u0199" + + "\3\0\2\u0199\2\154\54\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\7\21\1\u019a\2\0\26\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\6\21\1\u019b\17\21\15\0\1\21\6\0\2\21" + + "\7\0\3\21\3\0\4\21\4\0\7\21\1\u019c\2\0" + + "\26\21\15\0\1\21\6\0\2\21\7\0\3\21\3\0" + + "\4\21\4\0\10\21\2\0\10\21\1\u019d\15\21\15\0" + + "\1\21\6\0\2\21\7\0\3\21\3\0\4\21\4\0" + + "\10\21\2\0\13\21\1\u019e\12\21\15\0\1\21\6\0" + + "\2\21\7\0\3\21\3\0\4\21\4\0\10\21\2\0" + + "\13\21\1\u019f\12\21\15\0\1\21\24\0\1\u01a0\105\0" + + "\1\u01a1\1\0\1\u01a1\3\0\3\u01a1\5\0\1\u01a1\2\0" + + "\5\u01a1\2\0\1\u01a1\1\0\1\u01a1\1\0\1\u01a1\6\0" + + "\1\u01a1\40\0\1\140\10\0\1\156\13\0\1\u01a2\3\0" + + "\2\u01a2\2\154\54\0\2\21\7\0\3\21\3\0\4\21" + + "\4\0\3\21\1\u01a3\4\21\2\0\26\21\15\0\1\21" + + "\6\0\2\21\7\0\3\21\3\0\4\21\4\0\10\21" + + "\2\0\5\21\1\u01a4\20\21\15\0\1\21\10\0\1\140" + + "\10\0\1\156\13\0\1\u01a5\3\0\2\u01a5\2\154\56\0" + + "\1\140\10\0\1\156\13\0\1\u01a6\3\0\2\u01a6\2\154" + + "\56\0\1\140\10\0\1\156\13\0\1\u01a7\3\0\2\u01a7" + + "\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a8\3\0" + + "\2\u01a8\2\154\56\0\1\140\10\0\1\156\13\0\1\u01a9" + + "\3\0\2\u01a9\2\154\56\0\1\140\10\0\1\156\13\0" + + "\1\u01aa\3\0\2\u01aa\2\154\46\0"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[21825]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** the textposition at the last accepting state */ - private int zzMarkedPos; + int j = offset; /* index in unpacked array */ - /** the current text position in the buffer */ - private int zzCurrentPos; + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** the number of characters up to the start of the matched text */ - private int yychar; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\12\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11" + + "\25\1\7\11\4\1\1\11\2\1\2\11\3\1\1\11" + + "\2\1\1\11\1\1\1\11\1\1\1\11\2\1\1\11" + + "\1\1\2\11\1\1\1\11\2\1\1\11\1\1\1\0" + + "\2\11\1\1\1\11\1\1\1\11\2\1\2\11\1\1" + + "\2\11\1\1\2\11\1\0\3\1\1\0\11\1\2\11" + + "\44\1\11\11\1\1\1\11\1\1\6\11\1\0\1\11" + + "\1\0\1\11\1\0\2\11\1\0\1\1\5\0\1\1" + + "\1\0\1\11\1\1\1\11\2\0\3\11\1\1\1\11" + + "\1\0\1\1\1\11\60\1\1\11\1\0\3\11\1\0" + + "\1\11\2\0\1\1\1\11\1\0\1\11\51\1\1\0" + + "\2\11\1\0\41\1\1\0\32\1\1\0\23\1\1\0" + + "\15\1\1\0\10\1\2\11\11\1"; - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + private static int[] zzUnpackAttribute() { + int[] result = new int[426]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; /* index in packed string */ - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; + int j = offset; /* index in unpacked array */ - /* user code: */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } + /** + * the input device + */ + private java.io.Reader zzReader; + + /** + * the current state of the DFA + */ + private int zzState; + + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; + + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /* user code: */ private String sourceCode; - public ActionScriptLexer(String sourceCode){ + public ActionScriptLexer(String sourceCode) { this(new StringReader(sourceCode)); - this.sourceCode = sourceCode; + this.sourceCode = sourceCode; } - public void yypushbackstr(String s, int state) - { - sourceCode=s+sourceCode.substring(yychar+yylength()); + public void yypushbackstr(String s, int state) { + sourceCode = s + sourceCode.substring(yychar + yylength()); yyreset(new StringReader(sourceCode)); yybegin(state); } - public void yypushbackstr(String s) - { - yypushbackstr(s,YYINITIAL); + public void yypushbackstr(String s) { + yypushbackstr(s, YYINITIAL); } StringBuffer string = new StringBuffer(); - private static String xmlTagName=""; + private static String xmlTagName = ""; public int yychar() { return yychar; } - private Stack pushedBack=new Stack(); + private Stack pushedBack = new Stack(); public int yyline() { - return yyline+1; + return yyline + 1; } - private List listeners=new ArrayList<>(); + private List listeners = new ArrayList<>(); - public void addListener(LexListener listener){ + public void addListener(LexListener listener) { listeners.add(listener); } - public void removeListener(LexListener listener){ + public void removeListener(LexListener listener) { listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s){ - for(LexListener l:listeners){ + public void informListenersLex(ParsedSymbol s) { + for (LexListener l : listeners) { l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s){ - for(LexListener l:listeners){ + public void informListenersPushBack(ParsedSymbol s) { + for (LexListener l : listeners) { l.onPushBack(s); } } @@ -949,1074 +989,1244 @@ public final class ActionScriptLexer { informListenersPushBack(symb); } ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ - ParsedSymbol ret=null; - if(!pushedBack.isEmpty()){ + + public ParsedSymbol lex() throws java.io.IOException, ParseException { + ParsedSymbol ret = null; + if (!pushedBack.isEmpty()) { ret = last = pushedBack.pop(); - }else{ + } else { ret = last = yylex(); } informListenersLex(ret); return ret; } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader - (in, java.nio.charset.Charset.forName("UTF-8"))); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 2280) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner There is also a java.io.InputStream version of this + * constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; + /** + * Creates a new scanner. There is also java.io.Reader version of this + * constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in, java.nio.charset.Charset.forName("UTF-8"))); } - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x10000]; + int i = 0; /* index in packed string */ - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException, ParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + int j = 0; /* index in unpacked array */ + while (i < 2280) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 158: break; - case 2: - { yyline++; - } - case 159: break; - case 3: - { /*ignore*/ - } - case 160: break; - case 4: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); - } - case 161: break; - case 5: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); - } - case 162: break; - case 6: - { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); - } - case 163: break; - case 7: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); - } - case 164: break; - case 8: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); - } - case 165: break; - case 9: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); - } - case 166: break; - case 10: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); - } - case 167: break; - case 11: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); - } - case 168: break; - case 12: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); - } - case 169: break; - case 13: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); - } - case 170: break; - case 14: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); - } - case 171: break; - case 15: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); - } - case 172: break; - case 16: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); - } - case 173: break; - case 17: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); - } - case 174: break; - case 18: - { string.setLength(0); - yybegin(STRING); - } - case 175: break; - case 19: - { string.setLength(0); - yybegin(CHARLITERAL); - } - case 176: break; - case 20: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); - } - case 177: break; - case 21: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); - } - case 178: break; - case 22: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); - } - case 179: break; - case 23: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); - } - case 180: break; - case 24: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); - } - case 181: break; - case 25: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); - } - case 182: break; - case 26: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); - } - case 183: break; - case 27: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); - } - case 184: break; - case 28: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); - } - case 185: break; - case 29: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); - } - case 186: break; - case 30: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); - } - case 187: break; - case 31: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); - } - case 188: break; - case 32: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); - } - case 189: break; - case 33: - { string.append( yytext() ); - } - case 190: break; - case 34: - { yybegin(YYINITIAL); yyline++; - } - case 191: break; - case 35: - { yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - case 192: break; - case 36: - { string.append( yytext() ); yyline++; - } - case 193: break; - case 37: - { yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 194: break; - case 38: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 195: break; - case 39: - { yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 196: break; - case 40: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 197: break; - case 41: - { yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } - case 198: break; - case 42: - { string.append(yytext()); - } - case 199: break; - case 43: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_VAR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 200: break; - case 44: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); - } - case 201: break; - case 45: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); - } - case 202: break; - case 46: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DESCENDANTS,yytext()); - } - case 203: break; - case 47: - { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); - } - case 204: break; - case 48: - { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); - } - case 205: break; - case 49: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FILTER,yytext()); - } - case 206: break; - case 50: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); - } - case 207: break; - case 51: - { yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 208: break; - case 52: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); - } - case 209: break; - case 53: - { return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 210: break; - case 54: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); - } - case 211: break; - case 55: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); - } - case 212: break; - case 56: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); - } - case 213: break; - case 57: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); - } - case 214: break; - case 58: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); - } - case 215: break; - case 59: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); - } - case 216: break; - case 60: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); - } - case 217: break; - case 61: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); - } - case 218: break; - case 62: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); - } - case 219: break; - case 63: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); - } - case 220: break; - case 64: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); - } - case 221: break; - case 65: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); - } - case 222: break; - case 66: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); - } - case 223: break; - case 67: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); - } - case 224: break; - case 68: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); - } - case 225: break; - case 69: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); - } - case 226: break; - case 70: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); - } - case 227: break; - case 71: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); - } - case 228: break; - case 72: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); - } - case 229: break; - case 73: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); - } - case 230: break; - case 74: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); - } - case 231: break; - case 75: - { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); - } - case 232: break; - case 76: - { string.append( '\"' ); - } - case 233: break; - case 77: - { string.append( '\'' ); - } - case 234: break; - case 78: - { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); - } - case 235: break; - case 79: - { string.append( '\f' ); - } - case 236: break; - case 80: - { string.append( '\\' ); - } - case 237: break; - case 81: - { string.append( '\b' ); - } - case 238: break; - case 82: - { string.append( '\r' ); - } - case 239: break; - case 83: - { string.append( '\n' ); - } - case 240: break; - case 84: - { string.append( '\t' ); - } - case 241: break; - case 85: - { yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTFINISHTAG_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 242: break; - case 86: - { yybegin(XMLOPENTAGATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 243: break; - case 87: - { yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 244: break; - case 88: - { yybegin(XMLINSTRATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 245: break; - case 89: - { yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_END, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 246: break; - case 90: - { yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 247: break; - case 91: - { yybegin(XMLOPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 248: break; - case 92: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 249: break; - case 93: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); - } - case 250: break; - case 94: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); - } - case 251: break; - case 95: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); - } - case 252: break; - case 96: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); - } - case 253: break; - case 97: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); - } - case 254: break; - case 98: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); - } - case 255: break; - case 99: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); - } - case 256: break; - case 100: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); - } - case 257: break; - case 101: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); - } - case 258: break; - case 102: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); - } - case 259: break; - case 103: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); - } - case 260: break; - case 104: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); - } - case 261: break; - case 105: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); - } - case 262: break; - case 106: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); - } - case 263: break; - case 107: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); - } - case 264: break; - case 108: - { string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_CDATA, ret); - } - case 265: break; - case 109: - { string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_COMMENT, ret); - } - case 266: break; - case 110: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 267: break; - case 111: - { yybegin(XMLINSTROPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 268: break; - case 112: - { yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 269: break; - case 113: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); - } - case 270: break; - case 114: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); - } - case 271: break; - case 115: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); - } - case 272: break; - case 116: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); - } - case 273: break; - case 117: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); - } - case 274: break; - case 118: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); - } - case 275: break; - case 119: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); - } - case 276: break; - case 120: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); - } - case 277: break; - case 121: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); - } - case 278: break; - case 122: - { pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHTAG, yytext())); - if(string.length()>0){ - pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 279: break; - case 123: - { String ret=string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); - if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); - } - case 280: break; - case 124: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); - } - case 281: break; - case 125: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); - } - case 282: break; - case 126: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); - } - case 283: break; - case 127: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); - } - case 284: break; - case 128: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); - } - case 285: break; - case 129: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); - } - case 286: break; - case 130: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); - } - case 287: break; - case 131: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); - } - case 288: break; - case 132: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); - } - case 289: break; - case 133: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); - } - case 290: break; - case 134: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); - } - case 291: break; - case 135: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); - } - case 292: break; - case 136: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); - } - case 293: break; - case 137: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); - } - case 294: break; - case 138: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); - } - case 295: break; - case 139: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); - } - case 296: break; - case 140: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); - } - case 297: break; - case 141: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); - } - case 298: break; - case 142: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); - } - case 299: break; - case 143: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); - } - case 300: break; - case 144: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); - } - case 301: break; - case 145: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); - } - case 302: break; - case 146: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); - } - case 303: break; - case 147: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); - } - case 304: break; - case 148: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); - } - case 305: break; - case 149: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); - } - case 306: break; - case 150: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); - } - case 307: break; - case 151: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); - } - case 308: break; - case 152: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); - } - case 309: break; - case 153: - { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); - } - case 310: break; - case 154: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); - } - case 311: break; - case 155: - { String ret=string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA); - if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); - } - case 312: break; - case 156: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); - } - case 313: break; - case 157: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); - } - case 314: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } + return map; } - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length - zzEndRead); + + if (numRead > 0) { + zzEndRead += numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 + return true; + } + + /** + * Closes the input stream. + * + * @throws java.io.IOException + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) { + zzReader.close(); + } + } + + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Returns the current lexical state. + * + * @return + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + /** + * Returns the text matched by the current regular expression. + * + * @return + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } + + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } + + /** + * Returns the length of the matched text region. + * + * @return + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } + + zzMarkedPos -= number; + } + + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + * @throws com.jpexs.decompiler.flash.abc.avm2.parser.ParseException + */ + public ParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar += zzMarkedPosL - zzStartRead; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 158: + break; + case 2: { + yyline++; + } + case 159: + break; + case 3: { /*ignore*/ + + } + case 160: + break; + case 4: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 161: + break; + case 5: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 162: + break; + case 6: { + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 163: + break; + case 7: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 164: + break; + case 8: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 165: + break; + case 9: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 166: + break; + case 10: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 167: + break; + case 11: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 168: + break; + case 12: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 169: + break; + case 13: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); + } + case 170: + break; + case 14: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 171: + break; + case 15: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 172: + break; + case 16: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 173: + break; + case 17: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 174: + break; + case 18: { + string.setLength(0); + yybegin(STRING); + } + case 175: + break; + case 19: { + string.setLength(0); + yybegin(CHARLITERAL); + } + case 176: + break; + case 20: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 177: + break; + case 21: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 178: + break; + case 22: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 179: + break; + case 23: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 180: + break; + case 24: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 181: + break; + case 25: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 182: + break; + case 26: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 183: + break; + case 27: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 184: + break; + case 28: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 185: + break; + case 29: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 186: + break; + case 30: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 187: + break; + case 31: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 188: + break; + case 32: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 189: + break; + case 33: { + string.append(yytext()); + } + case 190: + break; + case 34: { + yybegin(YYINITIAL); + yyline++; + } + case 191: + break; + case 35: { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 192: + break; + case 36: { + string.append(yytext()); + yyline++; + } + case 193: + break; + case 37: { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 194: + break; + case 38: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 195: + break; + case 39: { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 196: + break; + case 40: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 197: + break; + case 41: { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } + case 198: + break; + case 42: { + string.append(yytext()); + } + case 199: + break; + case 43: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 200: + break; + case 44: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 201: + break; + case 45: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 202: + break; + case 46: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); + } + case 203: + break; + case 47: { + return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); + } + case 204: + break; + case 48: { + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + } + case 205: + break; + case 49: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); + } + case 206: + break; + case 50: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 207: + break; + case 51: { + yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + case 208: + break; + case 52: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 209: + break; + case 53: { + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); + } + case 210: + break; + case 54: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 211: + break; + case 55: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 212: + break; + case 56: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 213: + break; + case 57: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 214: + break; + case 58: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + } + case 215: + break; + case 59: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 216: + break; + case 60: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 217: + break; + case 61: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); + } + case 218: + break; + case 62: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 219: + break; + case 63: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + } + case 220: + break; + case 64: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 221: + break; + case 65: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 222: + break; + case 66: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 223: + break; + case 67: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 224: + break; + case 68: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 225: + break; + case 69: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + } + case 226: + break; + case 70: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 227: + break; + case 71: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + } + case 228: + break; + case 72: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + } + case 229: + break; + case 73: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 230: + break; + case 74: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } + case 231: + break; + case 75: { + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 232: + break; + case 76: { + string.append('\"'); + } + case 233: + break; + case 77: { + string.append('\''); + } + case 234: + break; + case 78: { + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); + } + case 235: + break; + case 79: { + string.append('\f'); + } + case 236: + break; + case 80: { + string.append('\\'); + } + case 237: + break; + case 81: { + string.append('\b'); + } + case 238: + break; + case 82: { + string.append('\r'); + } + case 239: + break; + case 83: { + string.append('\n'); + } + case 240: + break; + case 84: { + string.append('\t'); + } + case 241: + break; + case 85: { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 242: + break; + case 86: { + yybegin(XMLOPENTAGATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 243: + break; + case 87: { + yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 244: + break; + case 88: { + yybegin(XMLINSTRATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 245: + break; + case 89: { + yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_END, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 246: + break; + case 90: { + yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 247: + break; + case 91: { + yybegin(XMLOPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 248: + break; + case 92: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 249: + break; + case 93: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 250: + break; + case 94: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 251: + break; + case 95: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + } + case 252: + break; + case 96: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 253: + break; + case 97: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + } + case 254: + break; + case 98: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + } + case 255: + break; + case 99: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); + } + case 256: + break; + case 100: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 257: + break; + case 101: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); + } + case 258: + break; + case 102: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 259: + break; + case 103: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 260: + break; + case 104: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 261: + break; + case 105: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 262: + break; + case 106: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); + } + case 263: + break; + case 107: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); + } + case 264: + break; + case 108: { + string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); + } + case 265: + break; + case 109: { + string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); + } + case 266: + break; + case 110: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 267: + break; + case 111: { + yybegin(XMLINSTROPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 268: + break; + case 112: { + yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 269: + break; + case 113: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 270: + break; + case 114: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); + } + case 271: + break; + case 115: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 272: + break; + case 116: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 273: + break; + case 117: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); + } + case 274: + break; + case 118: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 275: + break; + case 119: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 276: + break; + case 120: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 277: + break; + case 121: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 278: + break; + case 122: { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext())); + if (string.length() > 0) { + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 279: + break; + case 123: { + String ret = string.toString(); + string.setLength(0); + string.append(yytext()); + yybegin(XMLCOMMENT); + if (!ret.isEmpty()) { + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); + } + } + case 280: + break; + case 124: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); + } + case 281: + break; + case 125: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINAL, yytext()); + } + case 282: + break; + case 126: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 283: + break; + case 127: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 284: + break; + case 128: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 285: + break; + case 129: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 286: + break; + case 130: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); + } + case 287: + break; + case 131: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 288: + break; + case 132: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 289: + break; + case 133: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 290: + break; + case 134: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); + } + case 291: + break; + case 135: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 292: + break; + case 136: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 293: + break; + case 137: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 294: + break; + case 138: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); + } + case 295: + break; + case 139: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 296: + break; + case 140: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); + } + case 297: + break; + case 141: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 298: + break; + case 142: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 299: + break; + case 143: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); + } + case 300: + break; + case 144: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 301: + break; + case 145: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 302: + break; + case 146: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 303: + break; + case 147: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 304: + break; + case 148: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); + } + case 305: + break; + case 149: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 306: + break; + case 150: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); + } + case 307: + break; + case 151: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); + } + case 308: + break; + case 152: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 309: + break; + case 153: { + return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); + } + case 310: + break; + case 154: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); + } + case 311: + break; + case 155: { + String ret = string.toString(); + string.setLength(0); + string.append(yytext()); + yybegin(XMLCDATA); + if (!ret.isEmpty()) { + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); + } + } + case 312: + break; + case 156: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); + } + case 313: + break; + case 157: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 314: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java index 0962d9e08..09693876b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java @@ -77,7 +77,6 @@ import com.jpexs.decompiler.flash.abc.avm2.model.operations.URShiftAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.Namespace; -import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.action.swf4.ActionIf; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.tags.ABCContainerTag; @@ -256,7 +255,7 @@ public class ActionScriptParser { String nsprop = null; if (s.type == SymbolType.NAMESPACE_OP) { if (name.contains(".")) { - nsname = name.substring(name.lastIndexOf(".") + 1); + nsname = name.substring(name.lastIndexOf('.') + 1); } else { nsname = name; } @@ -268,7 +267,7 @@ public class ActionScriptParser { lexer.pushback(s); } if (name.contains(".")) { - name = name.substring(0, name.lastIndexOf(".")); + name = name.substring(0, name.lastIndexOf('.')); } else { name = null; } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java index 133595bde..8c1abe180 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java @@ -41,7 +41,7 @@ public class ConstAVM2Item extends AVM2Item { return isStatic; } - public ConstAVM2Item(String customNamespace,boolean isStatic, int namespace, String var, GraphTargetItem type, GraphTargetItem value) { + public ConstAVM2Item(String customNamespace, boolean isStatic, int namespace, String var, GraphTargetItem type, GraphTargetItem value) { super(null, NOPRECEDENCE); this.namespace = namespace; this.value = value; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java index 4cbd0790e..bd0cf93e8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java @@ -42,8 +42,8 @@ import java.util.List; public class ConstructSomethingAVM2Item extends CallAVM2Item { public List openedNamespaces; - - public ConstructSomethingAVM2Item(List openedNamespaces,GraphTargetItem name, List arguments) { + + public ConstructSomethingAVM2Item(List openedNamespaces, GraphTargetItem name, List arguments) { super(name, arguments); this.openedNamespaces = openedNamespaces; } @@ -54,15 +54,15 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { } private int allNsSetWithVec(ABC abc) { - int nssa[] = new int[openedNamespaces.size()+1]; + int nssa[] = new int[openedNamespaces.size() + 1]; for (int i = 0; i < openedNamespaces.size(); i++) { nssa[i] = openedNamespaces.get(i); } - nssa[nssa.length-1] = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("__AS3__.vec", true)), 0, true); + nssa[nssa.length - 1] = abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, abc.constants.getStringId("__AS3__.vec", true)), 0, true); return abc.constants.getNamespaceSetId(new NamespaceSet(nssa), true); - + } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { @@ -72,32 +72,32 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { } if (resname instanceof TypeItem) { TypeItem prop = (TypeItem) resname; - if(!prop.subtypes.isEmpty()){ //It's Vector - TypeName + if (!prop.subtypes.isEmpty()) { //It's Vector - TypeName //int qname = ((AVM2SourceGenerator) generator).resolveType(prop.fullTypeName); - String name = prop.fullTypeName.substring(prop.fullTypeName.lastIndexOf(".")+1); - ABC abc=((AVM2SourceGenerator)generator).abc; - int qname = abc.constants.getMultinameId(new Multiname(Multiname.MULTINAME,abc.constants.getStringId(name,true) , 0,allNsSetWithVec(abc), 0, new ArrayList()), true); - List params=new ArrayList<>(); - for(String p:prop.subtypes){ + String name = prop.fullTypeName.substring(prop.fullTypeName.lastIndexOf('.') + 1); + ABC abc = ((AVM2SourceGenerator) generator).abc; + int qname = abc.constants.getMultinameId(new Multiname(Multiname.MULTINAME, abc.constants.getStringId(name, true), 0, allNsSetWithVec(abc), 0, new ArrayList()), true); + List params = new ArrayList<>(); + for (String p : prop.subtypes) { params.add(((AVM2SourceGenerator) generator).resolveType(p)); } - List ret=new ArrayList<>(); - ret.add(ins(new GetLexIns(),qname)); - for(int p:params){ - ret.add(ins(new GetLexIns(),p)); + List ret = new ArrayList<>(); + ret.add(ins(new GetLexIns(), qname)); + for (int p : params) { + ret.add(ins(new GetLexIns(), p)); } - ret.add(ins(new ApplyTypeIns(),params.size())); + ret.add(ins(new ApplyTypeIns(), params.size())); ret.addAll(toSourceMerge(localData, generator, arguments, - ins(new ConstructIns(),arguments.size()) - )); + ins(new ConstructIns(), arguments.size()) + )); return ret; - - }else{ - int type_index = ((AVM2SourceGenerator) generator).resolveType(resname.toString()); - return toSourceMerge(localData, generator, - new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{type_index, arguments.size()}, new byte[0]), arguments, - new AVM2Instruction(0, new ConstructPropIns(), new int[]{type_index, arguments.size()}, new byte[0]) - ); + + } else { + int type_index = ((AVM2SourceGenerator) generator).resolveType(resname.toString()); + return toSourceMerge(localData, generator, + new AVM2Instruction(0, new FindPropertyStrictIns(), new int[]{type_index, arguments.size()}, new byte[0]), arguments, + new AVM2Instruction(0, new ConstructPropIns(), new int[]{type_index, arguments.size()}, new byte[0]) + ); } } if (resname instanceof NameAVM2Item) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java index 7aca01a65..0188e2f32 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/GetterAVM2Item.java @@ -26,7 +26,7 @@ import java.util.List; public class GetterAVM2Item extends MethodAVM2Item { public GetterAVM2Item(String customNamespace, boolean needsActivation, boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespace, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { - super(customNamespace,needsActivation, hasRest, line, override, isFinal, isStatic, namespace, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); + super(customNamespace, needsActivation, hasRest, line, override, isFinal, isStatic, namespace, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java index c2f310914..d0fa15968 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java @@ -25,7 +25,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIIns import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.IncLocalIIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.IncLocalIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.FindPropertyStrictIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetScopeObjectIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.SetPropertyIns; @@ -37,7 +36,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceSIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertDIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertIIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertSIns; import static com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item.ins; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NanAVM2Item; @@ -221,12 +219,12 @@ public class NameAVM2Item extends AssignableAVM2Item { ins = ins(new CoerceSIns()); break; default: - int type_index = AVM2SourceGenerator.resolveType(type,((AVM2SourceGenerator) generator).abc); + int type_index = AVM2SourceGenerator.resolveType(type, ((AVM2SourceGenerator) generator).abc); ins = ins(new CoerceIns(), type_index); break; } } else { - int type_index = AVM2SourceGenerator.resolveType(type,((AVM2SourceGenerator) generator).abc); + int type_index = AVM2SourceGenerator.resolveType(type, ((AVM2SourceGenerator) generator).abc); ins = ins(new CoerceIns(), type_index); } } @@ -242,14 +240,14 @@ public class NameAVM2Item extends AssignableAVM2Item { } String name = variableName; boolean attr = false; - if(name!=null && name.startsWith("@")){ + if (name != null && name.startsWith("@")) { name = name.substring(1); attr = true; } AVM2SourceGenerator g = (AVM2SourceGenerator) generator; Reference ns_temp = new Reference<>(-1); Reference index_temp = new Reference<>(-1); - Reference ret_temp = new Reference<>(-1); + Reference ret_temp = new Reference<>(-1); if (index != null) { if (assignedValue != null) { @@ -356,8 +354,6 @@ public class NameAVM2Item extends AssignableAVM2Item { */ - - if (index != null) { return toSourceMerge(localData, generator, generateGetLoc(regNumber), generateGetSlot(slotScope, slotNumber), dupSetTemp(localData, generator, name_temp), index, dupSetTemp(localData, generator, index_temp), diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespacedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespacedAVM2Item.java index 363d62701..274329508 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespacedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NamespacedAVM2Item.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -30,7 +29,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.DupIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertDIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.ConvertSIns; -import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import static com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item.ins; import static com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item.dupSetTemp; import static com.jpexs.decompiler.flash.abc.avm2.parser.script.AssignableAVM2Item.getTemp; @@ -73,9 +71,7 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { this.attr = attr; this.openedNamespaces = openedNamespaces; } - - - + private int allNsSet(ABC abc) { int nssa[] = new int[openedNamespaces.size()]; for (int i = 0; i < openedNamespaces.size(); i++) { @@ -83,7 +79,7 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { } return abc.constants.getNamespaceSetId(new NamespaceSet(nssa), true); } - + @Override public AssignableAVM2Item copy() { return new NamespacedAVM2Item(index, ns, name, obj, attr, openedNamespaces, assignedValue); @@ -91,9 +87,9 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { @Override public List toSourceChange(SourceGeneratorLocalData localData, SourceGenerator generator, boolean post, boolean decrement, boolean needsReturn) throws CompilationException { - AVM2SourceGenerator g = (AVM2SourceGenerator)generator; + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; boolean isInteger = returnType().toString().equals("int"); - Reference ns_temp = new Reference<>(-1); + Reference ns_temp = new Reference<>(-1); Reference name_temp = new Reference<>(-1); Reference ret_temp = new Reference<>(-1); if (name == null && index != null) { @@ -115,8 +111,7 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { getTemp(localData, generator, ret_temp), ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)), killTemp(localData, generator, Arrays.asList(ret_temp, name_temp, ns_temp))); - }else - if (name != null && index == null) { + } else if (name != null && index == null) { return toSourceMerge(localData, generator, ns, generateCoerce(generator, new TypeItem("Namespace")), ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), @@ -139,9 +134,7 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.MULTINAMEL, 0, 0, allNsSet(g.abc), 0, new ArrayList()), true)), killTemp(localData, generator, Arrays.asList(ret_temp, name_temp, ns_temp)) ); - } - else - { + } else { return new ArrayList<>(); } } @@ -161,16 +154,15 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { return TypeItem.UNBOUNDED; } - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) throws CompilationException { - AVM2SourceGenerator g = (AVM2SourceGenerator)generator; + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; Reference ns_temp = new Reference<>(-1); Reference index_temp = new Reference<>(-1); Reference ret_temp = new Reference<>(-1); if (name == null) { if (assignedValue != null) { return toSourceMerge(localData, generator, - obj==null?ns:null, obj==null?generateCoerce(generator, new TypeItem("Namespace")):null, obj==null?index:null, ins(new ConvertSIns()), obj!=null?obj:ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + obj == null ? ns : null, obj == null ? generateCoerce(generator, new TypeItem("Namespace")) : null, obj == null ? index : null, ins(new ConvertSIns()), obj != null ? obj : ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), ns, generateCoerce(generator, new TypeItem("Namespace")), index, ins(new ConvertSIns()), assignedValue, needsReturn ? dupSetTemp(localData, generator, ret_temp) : null, ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), @@ -179,34 +171,33 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { ); } else { return toSourceMerge(localData, generator, - obj==null?ns:null, obj==null?generateCoerce(generator, new TypeItem("Namespace")):null, obj==null?index:null, ins(new ConvertSIns()), obj!=null?obj:ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), + obj == null ? ns : null, obj == null ? generateCoerce(generator, new TypeItem("Namespace")) : null, obj == null ? index : null, ins(new ConvertSIns()), obj != null ? obj : ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), ns, generateCoerce(generator, new TypeItem("Namespace")), index, ins(new ConvertSIns()), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.RTQNAMEL, 0, 0, 0, 0, new ArrayList()), true)), needsReturn ? null : ins(new PopIns()), killTemp(localData, generator, Arrays.asList(ns_temp, index_temp, ret_temp)) ); } - }else{ + } else { if (assignedValue != null) { return toSourceMerge(localData, generator, - obj==null?ns:null, obj==null?generateCoerce(generator, new TypeItem("Namespace")):null, obj!=null?obj:ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(attr?Multiname.RTQNAMEA:Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), + obj == null ? ns : null, obj == null ? generateCoerce(generator, new TypeItem("Namespace")) : null, obj != null ? obj : ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(attr ? Multiname.RTQNAMEA : Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), ns, generateCoerce(generator, new TypeItem("Namespace")), assignedValue, needsReturn ? dupSetTemp(localData, generator, ret_temp) : null, - ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(attr?Multiname.RTQNAMEA:Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), + ins(new SetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(attr ? Multiname.RTQNAMEA : Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), needsReturn ? getTemp(localData, generator, ret_temp) : null, killTemp(localData, generator, Arrays.asList(ns_temp, index_temp, ret_temp)) ); } else { return toSourceMerge(localData, generator, - obj==null?ns:null, obj==null?generateCoerce(generator, new TypeItem("Namespace")):null, obj!=null?obj:ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(attr?Multiname.RTQNAMEA:Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), - ns, generateCoerce(generator, new TypeItem("Namespace")), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(attr?Multiname.RTQNAMEA:Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), + obj == null ? ns : null, obj == null ? generateCoerce(generator, new TypeItem("Namespace")) : null, obj != null ? obj : ins(new FindPropertyStrictIns(), g.abc.constants.getMultinameId(new Multiname(attr ? Multiname.RTQNAMEA : Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), + ns, generateCoerce(generator, new TypeItem("Namespace")), ins(new GetPropertyIns(), g.abc.constants.getMultinameId(new Multiname(attr ? Multiname.RTQNAMEA : Multiname.RTQNAME, g.abc.constants.getStringId(name, true), 0, 0, 0, new ArrayList()), true)), needsReturn ? null : ins(new PopIns()), killTemp(localData, generator, Arrays.asList(ns_temp, index_temp, ret_temp)) ); } } } - - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); @@ -217,10 +208,4 @@ public class NamespacedAVM2Item extends AssignableAVM2Item { return toSource(localData, generator, false); } - - - - - - } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java index 316ffda11..bbf98e4ee 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java @@ -64,7 +64,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { private List openedNamespaces; private List callStack; public List scopeStack = new ArrayList(); - + @Override public AssignableAVM2Item copy() { PropertyAVM2Item p = new PropertyAVM2Item(object, propertyName, index, abc, otherABCs, openedNamespaces, callStack); @@ -301,9 +301,9 @@ public class PropertyAVM2Item extends AssignableAVM2Item { if (attr) { pname = pname.substring(1); } - propIndex = abc.constants.getMultinameId(new Multiname(attr ? (pname.equals("") ? Multiname.MULTINAMELA : Multiname.MULTINAMEA) : Multiname.MULTINAME, + propIndex = abc.constants.getMultinameId(new Multiname(attr ? (pname.isEmpty() ? Multiname.MULTINAMELA : Multiname.MULTINAMEA) : Multiname.MULTINAME, abc.constants.getStringId(pname, true), 0, - attr && pname.equals("") ? abc.constants.getNamespaceSetId(new NamespaceSet(new int[]{abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE_INTERNAL, abc.constants.getStringId(localData.pkg, true)), 0, true)}), true) : allNsSet(), 0, new ArrayList()), true); + attr && pname.isEmpty() ? abc.constants.getNamespaceSetId(new NamespaceSet(new int[]{abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE_INTERNAL, abc.constants.getStringId(localData.pkg, true)), 0, true)}), true) : allNsSet(), 0, new ArrayList()), true); propType = "*"; objType = "*"; propValue = null; @@ -545,8 +545,8 @@ public class PropertyAVM2Item extends AssignableAVM2Item { @Override public String toString() { - return ""+object+"."+propertyName; - } + return "" + object + "." + propertyName; + } @Override public boolean hasReturnValue() { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java index e4aad43ab..0c404976d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SetterAVM2Item.java @@ -25,8 +25,8 @@ import java.util.List; */ public class SetterAVM2Item extends MethodAVM2Item { - public SetterAVM2Item(String customNamespace,boolean needsActivation, boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespace, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { - super(customNamespace,needsActivation, hasRest, line, override, isFinal, isStatic, namespace, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); + public SetterAVM2Item(String customNamespace, boolean needsActivation, boolean hasRest, int line, boolean override, boolean isFinal, boolean isStatic, int namespace, String methodName, List paramTypes, List paramNames, List paramValues, List body, List subvariables, GraphTargetItem retType) { + super(customNamespace, needsActivation, hasRest, line, override, isFinal, isStatic, namespace, methodName, paramTypes, paramNames, paramValues, body, subvariables, retType); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java index ab7d438cc..0993722a9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnresolvedAVM2Item.java @@ -40,6 +40,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.Helper; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -86,9 +87,8 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } /*public void setNs(GraphTargetItem ns) { - this.ns = ns; - }*/ - + this.ns = ns; + }*/ public void setRegNumber(int regNumber) { if (resolved instanceof NameAVM2Item) { ((NameAVM2Item) resolved).setRegNumber(regNumber); @@ -114,11 +114,12 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { } return -1; } -/* - public GraphTargetItem getNs() { - return ns; - } -*/ + /* + public GraphTargetItem getNs() { + return ns; + } + */ + public void appendName(String name) { this.name += "." + name; } @@ -157,8 +158,6 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { public void setVariableName(String name) { this.name = name; } - - public UnresolvedAVM2Item(List subtypes, List importedClasses, boolean mustBeType, GraphTargetItem type, int line, String name, GraphTargetItem storeValue, List openedNamespaces) { super(storeValue); @@ -295,14 +294,11 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { List parts = new ArrayList<>(); if (name.contains(".")) { String partsArr[] = name.split("\\."); - for (String p : partsArr) { - parts.add(p); - } + parts.addAll(Arrays.asList(partsArr)); } else { parts.add(name); } - if (scopeStack.isEmpty()) { //Everything is multiname property in with command //search for variable @@ -337,8 +333,8 @@ public class UnresolvedAVM2Item extends AssignableAVM2Item { String impName = imp; String impPkg = ""; if (impName.contains(".")) { - impPkg = impName.substring(0, impName.lastIndexOf(".")); - impName = impName.substring(impName.lastIndexOf(".") + 1); + impPkg = impName.substring(0, impName.lastIndexOf('.')); + impName = impName.substring(impName.lastIndexOf('.') + 1); } if (impName.equals(parts.get(0))) { TypeItem ret = new TypeItem(imp); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLAVM2Item.java index becedea6b..8c73ddf8f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLAVM2Item.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -61,14 +60,12 @@ public class XMLAVM2Item extends AVM2Item { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - AVM2SourceGenerator g=(AVM2SourceGenerator)generator; - return toSourceMerge(localData, generator, - ins(new GetLexIns(),g.abc.constants.getMultinameId(new Multiname(Multiname.QNAME, g.abc.constants.getStringId("XML", true), g.abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE,g.abc.constants.getStringId("", true)), 0, true), 0, 0, new ArrayList()), true)), + AVM2SourceGenerator g = (AVM2SourceGenerator) generator; + return toSourceMerge(localData, generator, + ins(new GetLexIns(), g.abc.constants.getMultinameId(new Multiname(Multiname.QNAME, g.abc.constants.getStringId("XML", true), g.abc.constants.getNamespaceId(new Namespace(Namespace.KIND_PACKAGE, g.abc.constants.getStringId("", true)), 0, true), 0, 0, new ArrayList()), true)), value, - ins(new ConstructIns(),1) - ); + ins(new ConstructIns(), 1) + ); } - - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLFilterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLFilterAVM2Item.java index 2fd41badb..97d26b720 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLFilterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/XMLFilterAVM2Item.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; @@ -32,12 +31,12 @@ import java.util.List; * * @author JPEXS */ -public class XMLFilterAVM2Item extends AVM2Item -{ +public class XMLFilterAVM2Item extends AVM2Item { public List openedNamespaces; public GraphTargetItem object; - public XMLFilterAVM2Item(GraphTargetItem object, GraphTargetItem value,List openedNamespaces) { + + public XMLFilterAVM2Item(GraphTargetItem object, GraphTargetItem value, List openedNamespaces) { super(null, NOPRECEDENCE); this.value = value; this.openedNamespaces = openedNamespaces; @@ -61,8 +60,7 @@ public class XMLFilterAVM2Item extends AVM2Item @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - return ((AVM2SourceGenerator)generator).generate(localData, this); + return ((AVM2SourceGenerator) generator).generate(localData, this); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java index 7f9131cce..a13c7dcf4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java @@ -770,6 +770,5 @@ public class ActionSourceGenerator implements SourceGenerator { //Unsupported in AS1/2 return new ArrayList<>(); } - - + } diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java index d900dc5ea..11570a521 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java @@ -16,8 +16,8 @@ */ package com.jpexs.decompiler.flash.exporters; -import com.jpexs.decompiler.flash.exporters.shape.ShapeExporterBase; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.shape.ShapeExporterBase; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.base.ImageTag; import com.jpexs.decompiler.flash.types.ColorTransform; diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporter.java index fc5875ab9..331583e85 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporter.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.exporters; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.RGBA; import java.awt.Color; import java.io.StringWriter; @@ -104,7 +105,25 @@ public class SVGExporter { Attr attr = _svg.createAttribute("style"); attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); } - + + public void addImage(Matrix transform, RECT boundRect, String href) { + Element image = _svg.createElement("image"); + if (transform != null) { + double translateX = roundPixels400(transform.translateX / SWF.unitDivisor); + double translateY = roundPixels400(transform.translateY / SWF.unitDivisor); + double rotateSkew0 = roundPixels400(transform.rotateSkew0); + double rotateSkew1 = roundPixels400(transform.rotateSkew1); + double scaleX = roundPixels400(transform.scaleX); + double scaleY = roundPixels400(transform.scaleY); + image.setAttribute("transform", "matrix(" + scaleX + ", " + rotateSkew0 + + ", " + rotateSkew1 + ", " + scaleY + ", " + translateX + ", " + translateY + ")"); + image.setAttribute("width", Double.toString(boundRect.getWidth() / (double) SWF.unitDivisor)); + image.setAttribute("height", Double.toString(boundRect.getHeight() / (double) SWF.unitDivisor)); + } + image.setAttribute("xlink:href", href); + _svgG.appendChild(image); + } + protected static double roundPixels20(double pixels) { return Math.round(pixels * 100) / 100.0; } diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporterContext.java b/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporterContext.java index 9cf194129..5c1bc63f1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporterContext.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/SVGExporterContext.java @@ -16,10 +16,20 @@ */ package com.jpexs.decompiler.flash.exporters; +import com.jpexs.decompiler.flash.tags.Tag; +import java.util.HashMap; +import java.util.Map; + /** * * @author JPEXS */ public class SVGExporterContext { - + + public String outDir; + public Map exportedTags = new HashMap<>(); + + public SVGExporterContext(String outDir) { + this.outDir = outDir; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CurvedMorphEdge.java b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CurvedMorphEdge.java index 6c180c061..73e8c9142 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CurvedMorphEdge.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CurvedMorphEdge.java @@ -27,7 +27,7 @@ public class CurvedMorphEdge extends StraightMorphEdge implements IMorphEdge { private final PointInt control; private final PointInt controlEnd; - CurvedMorphEdge(PointInt from, PointInt control, PointInt to, + CurvedMorphEdge(PointInt from, PointInt control, PointInt to, PointInt fromEnd, PointInt controlEnd, PointInt toEnd, int lineStyleIdx, int fillStyleIdx) { super(from, to, fromEnd, toEnd, lineStyleIdx, fillStyleIdx); this.control = control; diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java index 1c4d5083e..40744beb9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java @@ -53,7 +53,7 @@ public abstract class MorphShapeExporterBase implements IMorphShapeExporter { protected List _fillStylesEnd; protected List _lineStylesEnd; - + protected List>> _fillEdgeMaps; protected List>> _lineEdgeMaps; @@ -85,7 +85,7 @@ public abstract class MorphShapeExporterBase implements IMorphShapeExporter { _fillEdgeMaps = new ArrayList<>(); _lineEdgeMaps = new ArrayList<>(); createEdgeMaps(_fillStyles, _lineStyles, _fillStylesEnd, _lineStylesEnd, _fillEdgeMaps, _lineEdgeMaps); - + // Let the doc handler know that a shape export starts beginShape(); // Export fills and strokes for each group separately @@ -123,10 +123,10 @@ public abstract class MorphShapeExporterBase implements IMorphShapeExporter { for (int i = 0; i < records.size(); i++) { SHAPERECORD shapeRecord = records.get(i); SHAPERECORD shapeRecordEnd = recordsEnd.get(i); - if ((shapeRecord instanceof StyleChangeRecord && !(shapeRecordEnd instanceof StyleChangeRecord)) || - (shapeRecord instanceof StraightEdgeRecord && !(shapeRecordEnd instanceof StraightEdgeRecord)) || - (shapeRecord instanceof CurvedEdgeRecord && !(shapeRecordEnd instanceof CurvedEdgeRecord)) || - (shapeRecord instanceof EndShapeRecord && !(shapeRecordEnd instanceof EndShapeRecord))) { + if ((shapeRecord instanceof StyleChangeRecord && !(shapeRecordEnd instanceof StyleChangeRecord)) + || (shapeRecord instanceof StraightEdgeRecord && !(shapeRecordEnd instanceof StraightEdgeRecord)) + || (shapeRecord instanceof CurvedEdgeRecord && !(shapeRecordEnd instanceof CurvedEdgeRecord)) + || (shapeRecord instanceof EndShapeRecord && !(shapeRecordEnd instanceof EndShapeRecord))) { throw new Error("Begin and end shaperecord should have the same type."); } if (shapeRecord instanceof StyleChangeRecord) { @@ -252,7 +252,7 @@ public abstract class MorphShapeExporterBase implements IMorphShapeExporter { } } - protected void processSubPath(List subPath, int lineStyleIdx, int fillStyleIdx0, int fillStyleIdx1, + protected void processSubPath(List subPath, int lineStyleIdx, int fillStyleIdx0, int fillStyleIdx1, Map> currentFillEdgeMap, Map> currentLineEdgeMap) { List path; if (fillStyleIdx0 != 0) { diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java index c81ddda53..fb2de93d2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java @@ -240,7 +240,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { path.appendChild(createAnimateElement("stroke", color.toHexRGB(), colorEnd.toHexRGB())); path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); path.appendChild(createAnimateElement("stroke-width", thickness, thicknessEnd)); - + if (color instanceof RGBA) { RGBA colorA = (RGBA) color; if (colorA.alpha != 255) { @@ -303,7 +303,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { animate.setAttribute("values", startValue + ";" + endValue); return animate; } - + @Override protected void finalizePath() { if (path != null && !"".equals(pathData)) { @@ -350,17 +350,17 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { double b = roundPixels400(matrix.rotateSkew1); double c = roundPixels400(matrix.rotateSkew0); double d = roundPixels400(matrix.scaleY); - double rotate = Math.atan(c / d); + double rotate = Math.atan2(c, d); double scaleX = Math.signum(a) * Math.sqrt(a * a + b * b); double scaleY = Math.signum(d) * Math.sqrt(c * c + d * d); - + double translateXEnd = roundPixels400(matrixEnd.translateX / SWF.unitDivisor); double translateYEnd = roundPixels400(matrixEnd.translateY / SWF.unitDivisor); a = roundPixels400(matrixEnd.scaleX); b = roundPixels400(matrixEnd.rotateSkew1); c = roundPixels400(matrixEnd.rotateSkew0); d = roundPixels400(matrixEnd.scaleY); - double rotateEnd = Math.atan(c / d); + double rotateEnd = Math.atan2(c, d); double scaleXEnd = Math.signum(a) * Math.sqrt(a * a + b * b); double scaleYEnd = Math.signum(d) * Math.sqrt(c * c + d * d); @@ -381,7 +381,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { animateScale.setAttribute("additive", "sum"); animateScale.setAttribute("from", scaleX + " " + scaleY); animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); - + Element animateTranslate = _svg.createElement("animateTransform"); animateTranslate.setAttribute("dur", "2s"); // todo animateTranslate.setAttribute("repeatCount", "indefinite"); @@ -390,7 +390,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { animateTranslate.setAttribute("additive", "sum"); animateTranslate.setAttribute("from", translateX + " " + translateY); animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); - + gradient.appendChild(animateTranslate); gradient.appendChild(animateScale); gradient.appendChild(animateRotate); diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/ShapeExporterBase.java b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/ShapeExporterBase.java index ffe5e2863..e68338e69 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/ShapeExporterBase.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/ShapeExporterBase.java @@ -73,7 +73,7 @@ public abstract class ShapeExporterBase implements IShapeExporter { _fillEdgeMaps = new ArrayList<>(); _lineEdgeMaps = new ArrayList<>(); createEdgeMaps(_fillStyles, _lineStyles, _fillEdgeMaps, _lineEdgeMaps); - + // Let the doc handler know that a shape export starts beginShape(); // Export fills and strokes for each group separately @@ -87,7 +87,7 @@ public abstract class ShapeExporterBase implements IShapeExporter { endShape(); } - protected void createEdgeMaps(List fillStyles, List lineStyles, + protected void createEdgeMaps(List fillStyles, List lineStyles, List>> fillEdgeMaps, List>> lineEdgeMaps) { if (!edgeMapsCreated) { int xPos = 0; @@ -191,7 +191,7 @@ public abstract class ShapeExporterBase implements IShapeExporter { } } - protected void processSubPath(List subPath, int lineStyleIdx, int fillStyleIdx0, int fillStyleIdx1, + protected void processSubPath(List subPath, int lineStyleIdx, int fillStyleIdx0, int fillStyleIdx1, Map> currentFillEdgeMap, Map> currentLineEdgeMap) { List path; if (fillStyleIdx0 != 0) { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index c4c1c9768..7d2a4630e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -939,10 +939,11 @@ public class DefineEditTextTag extends TextTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) { + return ""; + //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - + private FontTag getFontTag() { FontTag font = null; for (Tag tag : swf.tags) { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java index 28cdfd6cf..c19f0312d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java @@ -100,7 +100,7 @@ public class DefineMorphShape2Tag extends CharacterTag implements MorphShapeTag, } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java index 2daa28856..9140651ba 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java @@ -148,7 +148,7 @@ public class DefineMorphShapeTag extends CharacterTag implements MorphShapeTag, } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java index 9223dfa7a..3e4951d79 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java @@ -61,7 +61,7 @@ public class DefineShape2Tag extends ShapeTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SVGShapeExporter exporter = new SVGShapeExporter(swf, getShapes(), rect, new ColorTransform() /*FIXME?*/); exporter.export(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java index 34d0929fe..801af0af0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java @@ -66,7 +66,7 @@ public class DefineShape3Tag extends ShapeTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SVGShapeExporter exporter = new SVGShapeExporter(swf, getShapes(), rect, new ColorTransform() /*FIXME?*/); exporter.export(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape4Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape4Tag.java index 32bbbb4c4..5407c1903 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape4Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShape4Tag.java @@ -69,7 +69,7 @@ public class DefineShape4Tag extends ShapeTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SVGShapeExporter exporter = new SVGShapeExporter(swf, getShapes(), rect, new ColorTransform() /*FIXME?*/); exporter.export(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java index 220941ed9..37540400b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java @@ -94,7 +94,7 @@ public class DefineShapeTag extends ShapeTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { + public String toSVG(SVGExporterContext exporterContext, int level) { ExportRectangle rect = new ExportRectangle(getRect()); SVGShapeExporter exporter = new SVGShapeExporter(swf, getShapes(), rect, new ColorTransform() /*FIXME?*/); exporter.export(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java index 463f100b6..4cb3b9d20 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java @@ -290,10 +290,10 @@ public class DefineSpriteTag extends CharacterTag implements Container, Drawable } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) throws IOException { + return SWF.frameToSvg(getTimeline(), 0, 0, null, 0, exporterContext, getRect(), new ColorTransform(), null, level + 1); } - + @Override public Point getImagePos(int frame) { return new Point(0, 0); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java index df039ba97..1988f479c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java @@ -494,10 +494,11 @@ public class DefineText2Tag extends TextTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) { + return ""; + //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - + @Override public Point getImagePos(int frame) { return new Point(textBounds.Xmin / 20, textBounds.Ymin / 20); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java index a643f9903..ada69e2bd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java @@ -510,8 +510,9 @@ public class DefineTextTag extends TextTag { } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) { + return ""; + //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java index 3e6837049..1176b54e6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java @@ -59,10 +59,11 @@ public abstract class ButtonTag extends CharacterTag implements DrawableTag, Tim } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) { + return ""; + //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - + public DefineButtonSoundTag getSounds() { for (Tag t : swf.tags) { if (t instanceof DefineButtonSoundTag) { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java index b465c7138..c5781386b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.timeline.DepthState; import com.jpexs.decompiler.flash.types.ColorTransform; import com.jpexs.helpers.SerializableImage; import java.awt.Shape; +import java.io.IOException; /** * @@ -32,7 +33,7 @@ public interface DrawableTag extends BoundedTag { public void toImage(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, SerializableImage image, Matrix transformation, ColorTransform colorTransform); - public String toSVG(SVGExporterContext exporterContext); + public String toSVG(SVGExporterContext exporterContext, int level) throws IOException; public Point getImagePos(int frame); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java index 80b59e7ab..441ec4ea0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -260,8 +260,9 @@ public abstract class FontTag extends CharacterTag implements AloneTag, Drawable } @Override - public String toSVG(SVGExporterContext exporterContext) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public String toSVG(SVGExporterContext exporterContext, int level) { + return ""; + //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java index 5055d15b2..27bc079c9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java @@ -41,7 +41,7 @@ public interface MorphShapeTag { public SHAPE getEndEdges(); - public String toSVG(SVGExporterContext exporterContext); + public String toSVG(SVGExporterContext exporterContext, int level); public int getShapeNum(); diff --git a/trunk/src/com/jpexs/decompiler/graph/Graph.java b/trunk/src/com/jpexs/decompiler/graph/Graph.java index b7746342b..a71cd4145 100644 --- a/trunk/src/com/jpexs/decompiler/graph/Graph.java +++ b/trunk/src/com/jpexs/decompiler/graph/Graph.java @@ -426,7 +426,7 @@ public class Graph { System.out.println(el); } System.out.println("");*/ - getPrecontinues(path,localData, null, heads.get(0), allParts, loops, null); + getPrecontinues(path, localData, null, heads.get(0), allParts, loops, null); /*System.err.println(""); for (Loop el : loops) { System.err.println(el); @@ -691,8 +691,8 @@ public class Graph { return loopItem; } - private void getPrecontinues(String path,BaseLocalData localData, GraphPart parent, GraphPart part, List allParts, List loops, List stopPart) throws InterruptedException { - markLevels(path,localData, part, allParts, loops); + private void getPrecontinues(String path, BaseLocalData localData, GraphPart parent, GraphPart part, List allParts, List loops, List stopPart) throws InterruptedException { + markLevels(path, localData, part, allParts, loops); //Note: this also marks part as precontinue when there is if /* while(k<10){ @@ -745,11 +745,11 @@ public class Graph { private void markLevels(String path, BaseLocalData localData, GraphPart part, List allParts, List loops) throws InterruptedException { clearLoops(loops); - markLevels(path,localData, part, allParts, loops, new ArrayList(), 1, new ArrayList(), 0); + markLevels(path, localData, part, allParts, loops, new ArrayList(), 1, new ArrayList(), 0); clearLoops(loops); } - private void markLevels(String path,BaseLocalData localData, GraphPart part, List allParts, List loops, List stopPart, int level, List visited, int recursionLevel) throws InterruptedException { + private void markLevels(String path, BaseLocalData localData, GraphPart part, List allParts, List loops, List stopPart, int level, List visited, int recursionLevel) throws InterruptedException { boolean debugMode = false; if (stopPart == null) { stopPart = new ArrayList<>(); @@ -818,13 +818,13 @@ public class Graph { stopParts2.add(stopPart.get(stopPart.size() - 1)); } if (next != nextParts.get(0)) { - markLevels(path,localData, nextParts.get(0), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); + markLevels(path, localData, nextParts.get(0), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); } if (next != nextParts.get(1)) { - markLevels(path,localData, nextParts.get(1), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); + markLevels(path, localData, nextParts.get(1), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); } if (next != null) { - markLevels(path,localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path, localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } @@ -850,17 +850,17 @@ public class Graph { } } if (next != p) { - markLevels(path,localData, p, allParts, loops, stopPart2, level + 1, visited, recursionLevel + 1); + markLevels(path, localData, p, allParts, loops, stopPart2, level + 1, visited, recursionLevel + 1); vis.add(p); } } if (next != null) { - markLevels(path,localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path, localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } if (nextParts.size() == 1) { - markLevels(path,localData, nextParts.get(0), allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path, localData, nextParts.get(0), allParts, loops, stopPart, level, visited, recursionLevel + 1); } for (GraphPart t : part.throwParts) { @@ -876,14 +876,14 @@ public class Graph { stopPart2 = stopPart; } - markLevels(path,localData, t, allParts, loops, stopPart2, level, visited, recursionLevel + 1); + markLevels(path, localData, t, allParts, loops, stopPart2, level, visited, recursionLevel + 1); } } if (isLoop) { if (currentLoop.loopBreak != null) { currentLoop.phase = 2; - markLevels(path,localData, currentLoop.loopBreak, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path, localData, currentLoop.loopBreak, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } } diff --git a/trunk/src/com/jpexs/decompiler/graph/SourceGenerator.java b/trunk/src/com/jpexs/decompiler/graph/SourceGenerator.java index b24844a76..5c6b9d6bd 100644 --- a/trunk/src/com/jpexs/decompiler/graph/SourceGenerator.java +++ b/trunk/src/com/jpexs/decompiler/graph/SourceGenerator.java @@ -65,6 +65,6 @@ public interface SourceGenerator { public List generate(SourceGeneratorLocalData localData, List commands) throws CompilationException; public List generate(SourceGeneratorLocalData localData, CommaExpressionItem item) throws CompilationException; - + public List generate(SourceGeneratorLocalData localData, TypeItem item) throws CompilationException; } diff --git a/trunk/src/com/jpexs/decompiler/graph/TypeItem.java b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java index db9245195..64c37ab36 100644 --- a/trunk/src/com/jpexs/decompiler/graph/TypeItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java @@ -17,10 +17,6 @@ package com.jpexs.decompiler.graph; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.types.InstanceInfo; -import com.jpexs.decompiler.flash.abc.types.Multiname; -import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.decompiler.graph.model.UnboundedTypeItem; @@ -43,11 +39,11 @@ public class TypeItem extends GraphTargetItem { public String fullTypeName; public List subtypes = new ArrayList<>(); - public TypeItem(String fullTypeName){ - this(fullTypeName,new ArrayList()); + public TypeItem(String fullTypeName) { + this(fullTypeName, new ArrayList()); } - - public TypeItem(String fullTypeName,List subtypes) { + + public TypeItem(String fullTypeName, List subtypes) { super(null, NOPRECEDENCE); this.fullTypeName = fullTypeName; this.subtypes.addAll(subtypes); @@ -93,20 +89,17 @@ public class TypeItem extends GraphTargetItem { @Override public String toString() { - String add=""; - if(!subtypes.isEmpty()){ - add+=".<"; - add+=Helper.joinStrings(subtypes, ","); - add+=">"; + String add = ""; + if (!subtypes.isEmpty()) { + add += ".<"; + add += Helper.joinStrings(subtypes, ","); + add += ">"; } - return fullTypeName+add; + return fullTypeName + add; } - - - @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return generator.generate(localData, this); - } + } }