/*******************************************************************************
 * Copyright (c) 2006, 2018 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Stephan Herrmann - Contribution for
 *								bug 388800 - [1.8] adjust tests to 1.8 JRE
 *								Bug 412203 - [compiler] Internal compiler error: java.lang.IllegalArgumentException: info cannot be null
 *								Bug 400874 - [1.8][compiler] Inference infrastructure should evolve to meet JLS8 18.x (Part G of JSR335 spec)
 *******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;

import java.io.File;
import java.util.Map;

import junit.framework.Test;

import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.ToolFactory;
import org.eclipse.jdt.core.tests.util.Util;
import org.eclipse.jdt.core.util.ClassFileBytesDisassembler;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;

@SuppressWarnings({ "unchecked", "rawtypes" })
public class StackMapAttributeTest extends AbstractRegressionTest {
	public StackMapAttributeTest(String name) {
		super(name);
	}

	public static Class testClass() {
		return StackMapAttributeTest.class;
	}

	// Use this static initializer to specify subset for tests
	// All specified tests which does not belong to the class are skipped...
	static {
//		TESTS_PREFIX = "testBug95521";
//		TESTS_NAMES = new String[] { "testBug412076_" };
//		TESTS_NUMBERS = new int[] { 53 };
//		TESTS_RANGE = new int[] { 23 -1,};
	}
	public static Test suite() {
		return buildMinimalComplianceTestSuite(testClass(), F_1_6);
	}
	public void test001() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	X() {}\n" +
					"	X(double i) {\n" +
					"		this(i > 0 ? null : new Object());\n" +
					"		try {\n" +
					"			foo(6, false);\n" +
					"		} catch(Exception e) {\n" +
					"			e.printStackTrace();\n" +
					"		}\n" +
					"	}\n" +
					"	X(Object o) {}\n" +
					"	int foo(int i, boolean b) {\n" +
					"		try {\n" +
					"			if (b) {\n" +
					"				return i;\n" +
					"			}\n" +
					"			return i + 1;\n" +
					"		} catch(Exception e) {\n" +
					"			return 5;\n" +
					"		}\n" +
					"	}\n" +
					"	public static void main(String[] args) {\n" +
					"		new X().foo(2, false);\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"	}\n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #14 (D)V\n" +
				"  // Stack: 5, Locals: 4\n" +
				"  X(double i);\n" +
				"     0  aload_0 [this]\n" +
				"     1  dload_1 [i]\n" +
				"     2  dconst_0\n" +
				"     3  dcmpl\n" +
				"     4  ifle 11\n" +
				"     7  aconst_null\n" +
				"     8  goto 18\n" +
				"    11  new java.lang.Object [3]\n" +
				"    14  dup\n" +
				"    15  invokespecial java.lang.Object() [8]\n" +
				"    18  invokespecial X(java.lang.Object) [15]\n" +
				"    21  aload_0 [this]\n" +
				"    22  bipush 6\n" +
				"    24  iconst_0\n" +
				"    25  invokevirtual X.foo(int, boolean) : int [18]\n" +
				"    28  pop\n" +
				"    29  goto 37\n" +
				"    32  astore_3 [e]\n" +
				"    33  aload_3 [e]\n" +
				"    34  invokevirtual java.lang.Exception.printStackTrace() : void [22]\n" +
				"    37  return\n" +
				"      Exception Table:\n" +
				"        [pc: 21, pc: 29] -> 32 when : java.lang.Exception\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 4]\n" +
				"        [pc: 21, line: 6]\n" +
				"        [pc: 29, line: 7]\n" +
				"        [pc: 33, line: 8]\n" +
				"        [pc: 37, line: 10]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 38] local: this index: 0 type: X\n" +
				"        [pc: 0, pc: 38] local: i index: 1 type: double\n" +
				"        [pc: 33, pc: 37] local: e index: 3 type: java.lang.Exception\n" +
				"      Stack map table: number of frames 4\n" +
				"        [pc: 11, same_locals_1_stack_item, stack: {uninitialized_this}]\n" +
				"        [pc: 18, full, stack: {uninitialized_this, java.lang.Object}, locals: {uninitialized_this, double}]\n" +
				"        [pc: 32, full, stack: {java.lang.Exception}, locals: {X, double}]\n" +
				"        [pc: 37, same]\n" +
				"  \n" +
				"  // Method descriptor #17 (Ljava/lang/Object;)V\n" +
				"  // Stack: 1, Locals: 2\n" +
				"  X(java.lang.Object o);\n" +
				"    0  aload_0 [this]\n" +
				"    1  invokespecial java.lang.Object() [8]\n" +
				"    4  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 11]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 5] local: this index: 0 type: X\n" +
				"        [pc: 0, pc: 5] local: o index: 1 type: java.lang.Object\n" +
				"  \n" +
				"  // Method descriptor #21 (IZ)I\n" +
				"  // Stack: 2, Locals: 4\n" +
				"  int foo(int i, boolean b);\n" +
				"     0  iload_2 [b]\n" +
				"     1  ifeq 6\n" +
				"     4  iload_1 [i]\n" +
				"     5  ireturn\n" +
				"     6  iload_1 [i]\n" +
				"     7  iconst_1\n" +
				"     8  iadd\n" +
				"     9  ireturn\n" +
				"    10  astore_3 [e]\n" +
				"    11  iconst_5\n" +
				"    12  ireturn\n" +
				"      Exception Table:\n" +
				"        [pc: 0, pc: 5] -> 10 when : java.lang.Exception\n" +
				"        [pc: 6, pc: 9] -> 10 when : java.lang.Exception\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 14]\n" +
				"        [pc: 4, line: 15]\n" +
				"        [pc: 6, line: 17]\n" +
				"        [pc: 10, line: 18]\n" +
				"        [pc: 11, line: 19]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 13] local: this index: 0 type: X\n" +
				"        [pc: 0, pc: 13] local: i index: 1 type: int\n" +
				"        [pc: 0, pc: 13] local: b index: 2 type: boolean\n" +
				"        [pc: 11, pc: 13] local: e index: 3 type: java.lang.Exception\n" +
				"      Stack map table: number of frames 2\n" +
				"        [pc: 6, same]\n" +
				"        [pc: 10, same_locals_1_stack_item, stack: {java.lang.Exception}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	public void test002() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void foo(double d, boolean b) {\n" +
					"		double i;\n" +
					"		try {\n" +
					"			i = 0;\n" +
					"			i++;\n" +
					"			int j = (int) (i - 1);\n" +
					"			if (b) {\n" +
					"				double d1 = 0;\n" +
					"				if (!b) {\n" +
					"					d1 = 0;\n" +
					"				}\n" +
					"				double d2 = d + d1;\n" +
					"			}\n" +
					"			bar(j);\n" +
					"		} catch(NullPointerException e) {\n" +
					"			i = 2;\n" +
					"		} finally {\n" +
					"			i = 1;\n" +
					"		}\n" +
					"		long j = (long) (i + 1);\n" +
					"		int k = (int) j;\n" +
					"		k += j;\n" +
					"	}\n" +
					"	public static void bar(int i) {}\n" +
					"	public static void main(String[] args) {\n" +
					"		foo(0, true);\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"	}\n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 (DZ)V\n" +
				"  // Stack: 4, Locals: 11\n" +
				"  public static void foo(double d, boolean b);\n" +
				"     0  dconst_0\n" +
				"     1  dstore_3 [i]\n" +
				"     2  dload_3 [i]\n" +
				"     3  dconst_1\n" +
				"     4  dadd\n" +
				"     5  dstore_3 [i]\n" +
				"     6  dload_3 [i]\n" +
				"     7  dconst_1\n" +
				"     8  dsub\n" +
				"     9  d2i\n" +
				"    10  istore 5 [j]\n" +
				"    12  iload_2 [b]\n" +
				"    13  ifeq 32\n" +
				"    16  dconst_0\n" +
				"    17  dstore 6 [d1]\n" +
				"    19  iload_2 [b]\n" +
				"    20  ifne 26\n" +
				"    23  dconst_0\n" +
				"    24  dstore 6 [d1]\n" +
				"    26  dload_0 [d]\n" +
				"    27  dload 6 [d1]\n" +
				"    29  dadd\n" +
				"    30  dstore 8\n" +
				"    32  iload 5 [j]\n" +
				"    34  invokestatic X.bar(int) : void [16]\n" +
				"    37  goto 58\n" +
				"    40  astore 5 [e]\n" +
				"    42  ldc2_w <Double 2.0> [20]\n" +
				"    45  dstore_3 [i]\n" +
				"    46  dconst_1\n" +
				"    47  dstore_3 [i]\n" +
				"    48  goto 60\n" +
				"    51  astore 10\n" +
				"    53  dconst_1\n" +
				"    54  dstore_3 [i]\n" +
				"    55  aload 10\n" +
				"    57  athrow\n" +
				"    58  dconst_1\n" +
				"    59  dstore_3 [i]\n" +
				"    60  dload_3 [i]\n" +
				"    61  dconst_1\n" +
				"    62  dadd\n" +
				"    63  d2l\n" +
				"    64  lstore 5 [j]\n" +
				"    66  lload 5 [j]\n" +
				"    68  l2i\n" +
				"    69  istore 7 [k]\n" +
				"    71  iload 7 [k]\n" +
				"    73  i2l\n" +
				"    74  lload 5 [j]\n" +
				"    76  ladd\n" +
				"    77  l2i\n" +
				"    78  istore 7 [k]\n" +
				"    80  return\n" +
				"      Exception Table:\n" +
				"        [pc: 0, pc: 37] -> 40 when : java.lang.NullPointerException\n" +
				"        [pc: 0, pc: 46] -> 51 when : any\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 5]\n" +
				"        [pc: 2, line: 6]\n" +
				"        [pc: 6, line: 7]\n" +
				"        [pc: 12, line: 8]\n" +
				"        [pc: 16, line: 9]\n" +
				"        [pc: 19, line: 10]\n" +
				"        [pc: 23, line: 11]\n" +
				"        [pc: 26, line: 13]\n" +
				"        [pc: 32, line: 15]\n" +
				"        [pc: 37, line: 16]\n" +
				"        [pc: 42, line: 17]\n" +
				"        [pc: 46, line: 19]\n" +
				"        [pc: 51, line: 18]\n" +
				"        [pc: 53, line: 19]\n" +
				"        [pc: 55, line: 20]\n" +
				"        [pc: 58, line: 19]\n" +
				"        [pc: 60, line: 21]\n" +
				"        [pc: 66, line: 22]\n" +
				"        [pc: 71, line: 23]\n" +
				"        [pc: 80, line: 24]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 81] local: d index: 0 type: double\n" +
				"        [pc: 0, pc: 81] local: b index: 2 type: boolean\n" +
				"        [pc: 2, pc: 40] local: i index: 3 type: double\n" +
				"        [pc: 46, pc: 51] local: i index: 3 type: double\n" +
				"        [pc: 55, pc: 81] local: i index: 3 type: double\n" +
				"        [pc: 12, pc: 37] local: j index: 5 type: int\n" +
				"        [pc: 19, pc: 32] local: d1 index: 6 type: double\n" +
				"        [pc: 42, pc: 46] local: e index: 5 type: java.lang.NullPointerException\n" +
				"        [pc: 66, pc: 81] local: j index: 5 type: long\n" +
				"        [pc: 71, pc: 81] local: k index: 7 type: int\n" +
				"      Stack map table: number of frames 6\n" +
				"        [pc: 26, append: {double, int, double}]\n" +
				"        [pc: 32, chop 1 local(s)]\n" +
				"        [pc: 40, full, stack: {java.lang.NullPointerException}, locals: {double, int}]\n" +
				"        [pc: 51, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" +
				"        [pc: 58, append: {double}]\n" +
				"        [pc: 60, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	public void test003() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void foo(boolean b) {\n" +
					"		int i = 0;\n" +
					"		try {\n" +
					"			System.out.println(\"FINALLY\");\n" +
					"			i++;\n" +
					"			int j = i -1;\n" +
					"			bar(j);\n" +
					"		} catch(NullPointerException e) {\n" +
					"			e.printStackTrace();\n" +
					"		} finally {\n" +
					"			System.out.println(\"FINALLY\");\n" +
					"		}\n" +
					"	}\n" +
					"	public static void bar(int i) {}\n" +
					"	\n" +
					"	public static void main(String[] args) {\n" +
					"		foo(true);\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"	}\n" +
					"}",
				},
				"FINALLY\n" +
				"FINALLY\n" +
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 (Z)V\n" +
				"  // Stack: 2, Locals: 4\n" +
				"  public static void foo(boolean b);\n" +
				"     0  iconst_0\n" +
				"     1  istore_1 [i]\n" +
				"     2  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"     5  ldc <String \"FINALLY\"> [22]\n" +
				"     7  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    10  iinc 1 1 [i]\n" +
				"    13  iload_1 [i]\n" +
				"    14  iconst_1\n" +
				"    15  isub\n" +
				"    16  istore_2 [j]\n" +
				"    17  iload_2 [j]\n" +
				"    18  invokestatic X.bar(int) : void [30]\n" +
				"    21  goto 51\n" +
				"    24  astore_2 [e]\n" +
				"    25  aload_2 [e]\n" +
				"    26  invokevirtual java.lang.NullPointerException.printStackTrace() : void [34]\n" +
				"    29  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    32  ldc <String \"FINALLY\"> [22]\n" +
				"    34  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    37  goto 59\n" +
				"    40  astore_3\n" +
				"    41  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    44  ldc <String \"FINALLY\"> [22]\n" +
				"    46  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    49  aload_3\n" +
				"    50  athrow\n" +
				"    51  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    54  ldc <String \"FINALLY\"> [22]\n" +
				"    56  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    59  return\n" +
				"      Exception Table:\n" +
				"        [pc: 2, pc: 21] -> 24 when : java.lang.NullPointerException\n" +
				"        [pc: 2, pc: 29] -> 40 when : any\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 2, line: 5]\n" +
				"        [pc: 10, line: 6]\n" +
				"        [pc: 13, line: 7]\n" +
				"        [pc: 17, line: 8]\n" +
				"        [pc: 21, line: 9]\n" +
				"        [pc: 25, line: 10]\n" +
				"        [pc: 29, line: 12]\n" +
				"        [pc: 40, line: 11]\n" +
				"        [pc: 41, line: 12]\n" +
				"        [pc: 49, line: 13]\n" +
				"        [pc: 51, line: 12]\n" +
				"        [pc: 59, line: 14]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 60] local: b index: 0 type: boolean\n" +
				"        [pc: 2, pc: 60] local: i index: 1 type: int\n" +
				"        [pc: 17, pc: 21] local: j index: 2 type: int\n" +
				"        [pc: 25, pc: 29] local: e index: 2 type: java.lang.NullPointerException\n" +
				"      Stack map table: number of frames 4\n" +
				"        [pc: 24, full, stack: {java.lang.NullPointerException}, locals: {int, int}]\n" +
				"        [pc: 40, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" +
				"        [pc: 51, same]\n" +
				"        [pc: 59, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test004() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void foo(boolean b) {\n" +
					"		C c;\n" +
					"		if (b) {\n" +
					"			c = new C1();\n" +
					"		} else {\n" +
					"			c = new C2();\n" +
					"		}\n" +
					"		System.out.println();\n" +
					"	}\n" +
					"	public static void main(String[] args) {\n" +
					"		foo(true);\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"	}\n" +
					"}\n" +
					"class C {\n" +
					"	void foo() {}\n" +
					"}\n" +
					"class C1 extends C {\n" +
					"}\n" +
					"class C2 extends C {\n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 (Z)V\n" +
				"  // Stack: 2, Locals: 2\n" +
				"  public static void foo(boolean b);\n" +
				"     0  iload_0 [b]\n" +
				"     1  ifeq 15\n" +
				"     4  new C1 [16]\n" +
				"     7  dup\n" +
				"     8  invokespecial C1() [18]\n" +
				"    11  astore_1 [c]\n" +
				"    12  goto 23\n" +
				"    15  new C2 [19]\n" +
				"    18  dup\n" +
				"    19  invokespecial C2() [21]\n" +
				"    22  astore_1 [c]\n" +
				"    23  getstatic java.lang.System.out : java.io.PrintStream [22]\n" +
				"    26  invokevirtual java.io.PrintStream.println() : void [28]\n" +
				"    29  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 4]\n" +
				"        [pc: 4, line: 5]\n" +
				"        [pc: 12, line: 6]\n" +
				"        [pc: 15, line: 7]\n" +
				"        [pc: 23, line: 9]\n" +
				"        [pc: 29, line: 10]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 30] local: b index: 0 type: boolean\n" +
				"        [pc: 12, pc: 15] local: c index: 1 type: C\n" +
				"        [pc: 23, pc: 30] local: c index: 1 type: C\n" +
				"      Stack map table: number of frames 2\n" +
				"        [pc: 15, same]\n" +
				"        [pc: 23, append: {C}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	public void test005() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"  public static void main(String args[]) {\n" +
					"    int i = 0, j, k, l;\n" +
					"    boolean b;\n" +
					"    if (i == 0 && (j = ++i) > 0)\n" +
					"      i += j;\n" +
					"    while (true) {\n" +
					"      k = 3;\n" +
					"      break;\n" +
					"    } \n" +
					"    i -= k;\n" +
					"    b = false && (i = l) > 0;\n" +
					"    if (i > 0)\n" +
					"      l = i;\n" +
					"    else\n" +
					"      l = k;\n" +
					"    j = l;\n" +
					"    if (i != -1 || j != 3 || k != 3 || l != 3)\n" +
					"      System.out.println(\"FAILED\");\n" +
					"    System.out.println(\"SUCCESS\");\n" +
					"  }\n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
				"  // Stack: 2, Locals: 6\n" +
				"  public static void main(java.lang.String[] args);\n" +
				"     0  iconst_0\n" +
				"     1  istore_1 [i]\n" +
				"     2  iload_1 [i]\n" +
				"     3  ifne 19\n" +
				"     6  iinc 1 1 [i]\n" +
				"     9  iload_1 [i]\n" +
				"    10  dup\n" +
				"    11  istore_2 [j]\n" +
				"    12  ifle 19\n" +
				"    15  iload_1 [i]\n" +
				"    16  iload_2 [j]\n" +
				"    17  iadd\n" +
				"    18  istore_1 [i]\n" +
				"    19  iconst_3\n" +
				"    20  istore_3 [k]\n" +
				"    21  iload_1 [i]\n" +
				"    22  iload_3 [k]\n" +
				"    23  isub\n" +
				"    24  istore_1 [i]\n" +
				"    25  iconst_0\n" +
				"    26  istore 5 [b]\n" +
				"    28  iload_1 [i]\n" +
				"    29  ifle 38\n" +
				"    32  iload_1 [i]\n" +
				"    33  istore 4 [l]\n" +
				"    35  goto 41\n" +
				"    38  iload_3 [k]\n" +
				"    39  istore 4 [l]\n" +
				"    41  iload 4 [l]\n" +
				"    43  istore_2 [j]\n" +
				"    44  iload_1 [i]\n" +
				"    45  iconst_m1\n" +
				"    46  if_icmpne 65\n" +
				"    49  iload_2 [j]\n" +
				"    50  iconst_3\n" +
				"    51  if_icmpne 65\n" +
				"    54  iload_3 [k]\n" +
				"    55  iconst_3\n" +
				"    56  if_icmpne 65\n" +
				"    59  iload 4 [l]\n" +
				"    61  iconst_3\n" +
				"    62  if_icmpeq 73\n" +
				"    65  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    68  ldc <String \"FAILED\"> [22]\n" +
				"    70  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    73  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    76  ldc <String \"SUCCESS\"> [30]\n" +
				"    78  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
				"    81  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 2, line: 5]\n" +
				"        [pc: 15, line: 6]\n" +
				"        [pc: 19, line: 8]\n" +
				"        [pc: 21, line: 9]\n" +
				"        [pc: 22, line: 11]\n" +
				"        [pc: 25, line: 12]\n" +
				"        [pc: 28, line: 13]\n" +
				"        [pc: 32, line: 14]\n" +
				"        [pc: 38, line: 16]\n" +
				"        [pc: 41, line: 17]\n" +
				"        [pc: 44, line: 18]\n" +
				"        [pc: 65, line: 19]\n" +
				"        [pc: 73, line: 20]\n" +
				"        [pc: 81, line: 21]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 82] local: args index: 0 type: java.lang.String[]\n" +
				"        [pc: 2, pc: 82] local: i index: 1 type: int\n" +
				"        [pc: 12, pc: 19] local: j index: 2 type: int\n" +
				"        [pc: 44, pc: 82] local: j index: 2 type: int\n" +
				"        [pc: 21, pc: 82] local: k index: 3 type: int\n" +
				"        [pc: 35, pc: 38] local: l index: 4 type: int\n" +
				"        [pc: 41, pc: 82] local: l index: 4 type: int\n" +
				"        [pc: 28, pc: 82] local: b index: 5 type: boolean\n" +
				"      Stack map table: number of frames 5\n" +
				"        [pc: 19, append: {int}]\n" +
				"        [pc: 38, full, stack: {}, locals: {java.lang.String[], int, _, int, _, int}]\n" +
				"        [pc: 41, full, stack: {}, locals: {java.lang.String[], int, _, int, int, int}]\n" +
				"        [pc: 65, full, stack: {}, locals: {java.lang.String[], int, int, int, int, int}]\n" +
				"        [pc: 73, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test006() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	void foo (int n) {\n" +
					"   	synchronized (this) {\n" +
					"       	switch (n) {\n" +
					"       		case 1:\n" +
					"       		throw new NullPointerException();\n" +
					"			}\n" +
					"		}\n" +
					"	}\n" +
					"    public static void main(String args[]) {\n" +
					"    	try {\n" +
					"	    	new X().foo(1);\n" +
					"    	} catch(Exception e) {\n" +
					"	        System.out.println(\"SUCCESS\"); \n" +
					"    	}\n" +
					"    } \n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 (I)V\n" +
				"  // Stack: 2, Locals: 3\n" +
				"  void foo(int n);\n" +
				"     0  aload_0 [this]\n" +
				"     1  dup\n" +
				"     2  astore_2\n" +
				"     3  monitorenter\n" +
				"     4  iload_1 [n]\n" +
				"     5  tableswitch default: 32\n" +
				"          case 1: 24\n" +
				"    24  new java.lang.NullPointerException [16]\n" +
				"    27  dup\n" +
				"    28  invokespecial java.lang.NullPointerException() [18]\n" +
				"    31  athrow\n" +
				"    32  aload_2\n" +
				"    33  monitorexit\n" +
				"    34  goto 40\n" +
				"    37  aload_2\n" +
				"    38  monitorexit\n" +
				"    39  athrow\n" +
				"    40  return\n" +
				"      Exception Table:\n" +
				"        [pc: 4, pc: 34] -> 37 when : any\n" +
				"        [pc: 37, pc: 39] -> 37 when : any\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 4, line: 4]\n" +
				"        [pc: 24, line: 6]\n" +
				"        [pc: 32, line: 3]\n" +
				"        [pc: 40, line: 9]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 41] local: this index: 0 type: X\n" +
				"        [pc: 0, pc: 41] local: n index: 1 type: int\n" +
				"      Stack map table: number of frames 4\n" +
				"        [pc: 24, append: {X}]\n" +
				"        [pc: 32, same]\n" +
				"        [pc: 37, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" +
				"        [pc: 40, chop 1 local(s)]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test007() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	StringBuffer foo2(boolean b) {\n" +
					"		System.out.println(\"foo2\");\n" +
					"		return new StringBuffer(b ? \"true\" : \"false\");\n" +
					"	}\n" +
					"	public static void main(String[] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"	}\n" +
					"}",
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 (Z)Ljava/lang/StringBuffer;\n" +
				"  // Stack: 3, Locals: 2\n" +
				"  java.lang.StringBuffer foo2(boolean b);\n" +
				"     0  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"     3  ldc <String \"foo2\"> [22]\n" +
				"     5  invokevirtual java.io.PrintStream.println(java.lang.String) : void [23]\n" +
				"     8  new java.lang.StringBuffer [29]\n" +
				"    11  dup\n" +
				"    12  iload_1 [b]\n" +
				"    13  ifeq 21\n" +
				"    16  ldc <String \"true\"> [31]\n" +
				"    18  goto 23\n" +
				"    21  ldc <String \"false\"> [33]\n" +
				"    23  invokespecial java.lang.StringBuffer(java.lang.String) [35]\n" +
				"    26  areturn\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 8, line: 4]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 27] local: this index: 0 type: X\n" +
				"        [pc: 0, pc: 27] local: b index: 1 type: boolean\n" +
				"      Stack map table: number of frames 2\n" +
				"        [pc: 21, full, stack: {uninitialized(8), uninitialized(8)}, locals: {X, int}]\n" +
				"        [pc: 23, full, stack: {uninitialized(8), uninitialized(8), java.lang.String}, locals: {X, int}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=141252
	public void test008() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void main(String[] args) {\n" +
					"		int foo = 0;\n" +
					"		String bar = \"zero\";\n" +
					"		System.out.println((foo != 0) ? foo : bar);\n" +
					"	}\n" +
					"	<T extends Comparable<?>> void foo(T foo) {\n" +
					"		T bar = null;\n" +
					"		System.out.println((foo != null) ? foo : bar);\n" +
					"	}	\n" +
					"}\n",
				},
				"zero");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
					"  // Stack: 2, Locals: 3\n" +
					"  public static void main(java.lang.String[] args);\n" +
					"     0  iconst_0\n" +
					"     1  istore_1 [foo]\n" +
					"     2  ldc <String \"zero\"> [16]\n" +
					"     4  astore_2 [bar]\n" +
					"     5  getstatic java.lang.System.out : java.io.PrintStream [18]\n" +
					"     8  iload_1 [foo]\n" +
					"     9  ifeq 19\n" +
					"    12  iload_1 [foo]\n" +
					"    13  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [24]\n" +
					"    16  goto 20\n" +
					"    19  aload_2 [bar]\n" +
					"    20  invokevirtual java.io.PrintStream.println(java.lang.Object) : void [30]\n" +
					"    23  return\n" +
					"      Line numbers:\n" +
					"        [pc: 0, line: 3]\n" +
					"        [pc: 2, line: 4]\n" +
					"        [pc: 5, line: 5]\n" +
					"        [pc: 23, line: 6]\n" +
					"      Local variable table:\n" +
					"        [pc: 0, pc: 24] local: args index: 0 type: java.lang.String[]\n" +
					"        [pc: 2, pc: 24] local: foo index: 1 type: int\n" +
					"        [pc: 5, pc: 24] local: bar index: 2 type: java.lang.String\n" +
					"      Stack map table: number of frames 2\n" +
					"        [pc: 19, full, stack: {java.io.PrintStream}, locals: {java.lang.String[], int, java.lang.String}]\n" +
					(this.complianceLevel >= ClassFileConstants.JDK1_8 ? // in 1.8 the ternary is resolved to its target type j.l.Object
					"        [pc: 20, full, stack: {java.io.PrintStream, java.lang.Object}, locals: {java.lang.String[], int, java.lang.String}]\n" :
					"        [pc: 20, full, stack: {java.io.PrintStream, java.lang.Comparable}, locals: {java.lang.String[], int, java.lang.String}]\n") +
					"  \n" +
					(this.complianceLevel >= ClassFileConstants.JDK1_8 ?
					"  // Method descriptor #46 (Ljava/lang/Comparable;)V\n" :
					"  // Method descriptor #48 (Ljava/lang/Comparable;)V\n") +
					"  // Signature: <T::Ljava/lang/Comparable<*>;>(TT;)V\n" +
					"  // Stack: 2, Locals: 3\n" +
					"  void foo(java.lang.Comparable foo);\n" +
					"     0  aconst_null\n" +
					"     1  astore_2 [bar]\n" +
					"     2  getstatic java.lang.System.out : java.io.PrintStream [18]\n" +
					"     5  aload_1 [foo]\n" +
					"     6  ifnull 13\n" +
					"     9  aload_1 [foo]\n" +
					"    10  goto 14\n" +
					"    13  aload_2 [bar]\n" +
					"    14  invokevirtual java.io.PrintStream.println(java.lang.Object) : void [30]\n" +
					"    17  return\n" +
					"      Line numbers:\n" +
					"        [pc: 0, line: 8]\n" +
					"        [pc: 2, line: 9]\n" +
					"        [pc: 17, line: 10]\n" +
					"      Local variable table:\n" +
					"        [pc: 0, pc: 18] local: this index: 0 type: X\n" +
					"        [pc: 0, pc: 18] local: foo index: 1 type: java.lang.Comparable\n" +
					"        [pc: 2, pc: 18] local: bar index: 2 type: java.lang.Comparable\n" +
					"      Local variable type table:\n" +
					"        [pc: 0, pc: 18] local: foo index: 1 type: T\n" +
					"        [pc: 2, pc: 18] local: bar index: 2 type: T\n" +
					"      Stack map table: number of frames 2\n" +
					"        [pc: 13, full, stack: {java.io.PrintStream}, locals: {X, java.lang.Comparable, java.lang.Comparable}]\n" +
					(this.complianceLevel < ClassFileConstants.JDK1_8 ?
					"        [pc: 14, full, stack: {java.io.PrintStream, java.lang.Comparable}, locals: {X, java.lang.Comparable, java.lang.Comparable}]\n"
					: // in 1.8 the ternary is resolved to its target type j.l.Object
					"        [pc: 14, full, stack: {java.io.PrintStream, java.lang.Object}, locals: {X, java.lang.Comparable, java.lang.Comparable}]\n"
					);

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test009() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	String s;\n" +
					"	X() {\n" +
					"        int i = 0;\n" +
					"        if (s == null) {\n" +
					"        	System.out.print(\"PASSED\");\n" +
					"        } else {\n" +
					"        	System.out.print(\"FAILED\");\n" +
					"        }\n" +
					"        System.out.print(\"DONE\" + i);\n" +
					"	}\n" +
					"    public static void main(String argv[]) {\n" +
					"    	new X();\n" +
					"    }\n" +
					"}",
				},
				"PASSEDDONE0");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #8 ()V\n" +
				"  // Stack: 4, Locals: 2\n" +
				"  X();\n" +
				"     0  aload_0 [this]\n" +
				"     1  invokespecial java.lang.Object() [10]\n" +
				"     4  iconst_0\n" +
				"     5  istore_1 [i]\n" +
				"     6  aload_0 [this]\n" +
				"     7  getfield X.s : java.lang.String [12]\n" +
				"    10  ifnonnull 24\n" +
				"    13  getstatic java.lang.System.out : java.io.PrintStream [14]\n" +
				"    16  ldc <String \"PASSED\"> [20]\n" +
				"    18  invokevirtual java.io.PrintStream.print(java.lang.String) : void [22]\n" +
				"    21  goto 32\n" +
				"    24  getstatic java.lang.System.out : java.io.PrintStream [14]\n" +
				"    27  ldc <String \"FAILED\"> [28]\n" +
				"    29  invokevirtual java.io.PrintStream.print(java.lang.String) : void [22]\n" +
				"    32  getstatic java.lang.System.out : java.io.PrintStream [14]\n" +
				"    35  new java.lang.StringBuilder [30]\n" +
				"    38  dup\n" +
				"    39  ldc <String \"DONE\"> [32]\n" +
				"    41  invokespecial java.lang.StringBuilder(java.lang.String) [34]\n" +
				"    44  iload_1 [i]\n" +
				"    45  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [36]\n" +
				"    48  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [40]\n" +
				"    51  invokevirtual java.io.PrintStream.print(java.lang.String) : void [22]\n" +
				"    54  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 4, line: 4]\n" +
				"        [pc: 6, line: 5]\n" +
				"        [pc: 13, line: 6]\n" +
				"        [pc: 21, line: 7]\n" +
				"        [pc: 24, line: 8]\n" +
				"        [pc: 32, line: 10]\n" +
				"        [pc: 54, line: 11]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 55] local: this index: 0 type: X\n" +
				"        [pc: 6, pc: 55] local: i index: 1 type: int\n" +
				"      Stack map table: number of frames 2\n" +
				"        [pc: 24, full, stack: {}, locals: {X, int}]\n" +
				"        [pc: 32, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test010() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void main(String[] args) {\n" +
					"		int[] tab = new int[0];\n" +
					"		Object o = tab;\n" +
					"		Object o1 = null;\n" +
					"		if (tab.length == 0) {\n" +
					"			System.out.println(tab.getClass());\n" +
					"		}\n" +
					"		o1 = tab.clone();\n" +
					"	}\n" +
					"}",
				},
				"class [I");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
				"  // Stack: 2, Locals: 4\n" +
				"  public static void main(java.lang.String[] args);\n" +
				"     0  iconst_0\n" +
				"     1  newarray int [10]\n" +
				"     3  astore_1 [tab]\n" +
				"     4  aload_1 [tab]\n" +
				"     5  astore_2 [o]\n" +
				"     6  aconst_null\n" +
				"     7  astore_3 [o1]\n" +
				"     8  aload_1 [tab]\n" +
				"     9  arraylength\n" +
				"    10  ifne 23\n" +
				"    13  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
				"    16  aload_1 [tab]\n" +
				"    17  invokevirtual java.lang.Object.getClass() : java.lang.Class [22]\n" +
				"    20  invokevirtual java.io.PrintStream.println(java.lang.Object) : void [26]\n" +
				"    23  aload_1 [tab]\n" +
				"    24  invokevirtual int[].clone() : java.lang.Object [32]\n" +
				"    27  astore_3 [o1]\n" +
				"    28  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 3]\n" +
				"        [pc: 4, line: 4]\n" +
				"        [pc: 6, line: 5]\n" +
				"        [pc: 8, line: 6]\n" +
				"        [pc: 13, line: 7]\n" +
				"        [pc: 23, line: 9]\n" +
				"        [pc: 28, line: 10]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 29] local: args index: 0 type: java.lang.String[]\n" +
				"        [pc: 4, pc: 29] local: tab index: 1 type: int[]\n" +
				"        [pc: 6, pc: 29] local: o index: 2 type: java.lang.Object\n" +
				"        [pc: 8, pc: 29] local: o1 index: 3 type: java.lang.Object\n" +
				"      Stack map table: number of frames 1\n" +
				"        [pc: 23, append: {int[], java.lang.Object, java.lang.Object}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test011() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	Object o;\n" +
					"\n" +
					"	public static void main(String[] args) {\n" +
					"		X x;\n" +
					"		for (int i = 0; i < 10; i++) {\n" +
					"			if (i < 90) {\n" +
					"				x = new X();\n" +
					"				if (i > 4) {\n" +
					"					x.o = new Object();\n" +
					"				} else {\n" +
					"					x.o = \"0\";\n" +
					"				}\n" +
					"				switch (i) {\n" +
					"					case 0:\n" +
					"						if (x.o instanceof String) {\n" +
					"							System.out.print(\"1\");\n" +
					"						}\n" +
					"						break;\n" +
					"					default: {\n" +
					"						Object diff = x.o;\n" +
					"						if (diff != null) {\n" +
					"							System.out.print(\"2\");\n" +
					"						}\n" +
					"					}\n" +
					"				}\n" +
					"			}\n" +
					"		}\n" +
					"	}\n" +
					"}",
				},
				"1222222222");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #17 ([Ljava/lang/String;)V\n" +
				"  // Stack: 3, Locals: 4\n" +
				"  public static void main(java.lang.String[] args);\n" +
				"      0  iconst_0\n" +
				"      1  istore_2 [i]\n" +
				"      2  goto 105\n" +
				"      5  iload_2 [i]\n" +
				"      6  bipush 90\n" +
				"      8  if_icmpge 102\n" +
				"     11  new X [1]\n" +
				"     14  dup\n" +
				"     15  invokespecial X() [18]\n" +
				"     18  astore_1 [x]\n" +
				"     19  iload_2 [i]\n" +
				"     20  iconst_4\n" +
				"     21  if_icmple 38\n" +
				"     24  aload_1 [x]\n" +
				"     25  new java.lang.Object [3]\n" +
				"     28  dup\n" +
				"     29  invokespecial java.lang.Object() [10]\n" +
				"     32  putfield X.o : java.lang.Object [19]\n" +
				"     35  goto 44\n" +
				"     38  aload_1 [x]\n" +
				"     39  ldc <String \"0\"> [21]\n" +
				"     41  putfield X.o : java.lang.Object [19]\n" +
				"     44  iload_2 [i]\n" +
				"     45  tableswitch default: 85\n" +
				"          case 0: 64\n" +
				"     64  aload_1 [x]\n" +
				"     65  getfield X.o : java.lang.Object [19]\n" +
				"     68  instanceof java.lang.String [23]\n" +
				"     71  ifeq 102\n" +
				"     74  getstatic java.lang.System.out : java.io.PrintStream [25]\n" +
				"     77  ldc <String \"1\"> [31]\n" +
				"     79  invokevirtual java.io.PrintStream.print(java.lang.String) : void [33]\n" +
				"     82  goto 102\n" +
				"     85  aload_1 [x]\n" +
				"     86  getfield X.o : java.lang.Object [19]\n" +
				"     89  astore_3 [diff]\n" +
				"     90  aload_3 [diff]\n" +
				"     91  ifnull 102\n" +
				"     94  getstatic java.lang.System.out : java.io.PrintStream [25]\n" +
				"     97  ldc <String \"2\"> [39]\n" +
				"     99  invokevirtual java.io.PrintStream.print(java.lang.String) : void [33]\n" +
				"    102  iinc 2 1 [i]\n" +
				"    105  iload_2 [i]\n" +
				"    106  bipush 10\n" +
				"    108  if_icmplt 5\n" +
				"    111  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 6]\n" +
				"        [pc: 5, line: 7]\n" +
				"        [pc: 11, line: 8]\n" +
				"        [pc: 19, line: 9]\n" +
				"        [pc: 24, line: 10]\n" +
				"        [pc: 35, line: 11]\n" +
				"        [pc: 38, line: 12]\n" +
				"        [pc: 44, line: 14]\n" +
				"        [pc: 64, line: 16]\n" +
				"        [pc: 74, line: 17]\n" +
				"        [pc: 82, line: 19]\n" +
				"        [pc: 85, line: 21]\n" +
				"        [pc: 90, line: 22]\n" +
				"        [pc: 94, line: 23]\n" +
				"        [pc: 102, line: 6]\n" +
				"        [pc: 111, line: 29]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 112] local: args index: 0 type: java.lang.String[]\n" +
				"        [pc: 19, pc: 102] local: x index: 1 type: X\n" +
				"        [pc: 2, pc: 111] local: i index: 2 type: int\n" +
				"        [pc: 90, pc: 102] local: diff index: 3 type: java.lang.Object\n" +
				"      Stack map table: number of frames 7\n" +
				"        [pc: 5, full, stack: {}, locals: {java.lang.String[], _, int}]\n" +
				"        [pc: 38, full, stack: {}, locals: {java.lang.String[], X, int}]\n" +
				"        [pc: 44, same]\n" +
				"        [pc: 64, same]\n" +
				"        [pc: 85, same]\n" +
				"        [pc: 102, full, stack: {}, locals: {java.lang.String[], _, int}]\n" +
				"        [pc: 105, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test012() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"	public static void main(String[] args) {\n" +
					"		X x;\n" +
					"		Object o;\n" +
					"		for (int i = 0; i < 10; i++) {\n" +
					"			if (i < 90) {\n" +
					"				x = new X();\n" +
					"				if (i > 4) {\n" +
					"					o = new Object();\n" +
					"				} else {\n" +
					"					o = null;\n" +
					"				}\n" +
					"				switch (i) {\n" +
					"					case 0:\n" +
					"						if (o instanceof String) {\n" +
					"							System.out.print(\"1\");\n" +
					"							return;\n" +
					"						} else {\n" +
					"							break;\n" +
					"						}\n" +
					"					default: {\n" +
					"						Object diff = o;\n" +
					"						if (diff != null) {\n" +
					"							System.out.print(\"2\");\n" +
					"						}\n" +
					"						break;\n" +
					"					}\n" +
					"				}\n" +
					"				System.out.print(\"3\");\n" +
					"			}\n" +
					"		}\n" +
					"	}\n" +
					"}",
				},
				"333332323232323");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
				"  // Stack: 2, Locals: 5\n" +
				"  public static void main(java.lang.String[] args);\n" +
				"      0  iconst_0\n" +
				"      1  istore_3 [i]\n" +
				"      2  goto 99\n" +
				"      5  iload_3 [i]\n" +
				"      6  bipush 90\n" +
				"      8  if_icmpge 96\n" +
				"     11  new X [1]\n" +
				"     14  dup\n" +
				"     15  invokespecial X() [16]\n" +
				"     18  astore_1 [x]\n" +
				"     19  iload_3 [i]\n" +
				"     20  iconst_4\n" +
				"     21  if_icmple 35\n" +
				"     24  new java.lang.Object [3]\n" +
				"     27  dup\n" +
				"     28  invokespecial java.lang.Object() [8]\n" +
				"     31  astore_2 [o]\n" +
				"     32  goto 37\n" +
				"     35  aconst_null\n" +
				"     36  astore_2 [o]\n" +
				"     37  iload_3 [i]\n" +
				"     38  tableswitch default: 72\n" +
				"          case 0: 56\n" +
				"     56  aload_2 [o]\n" +
				"     57  instanceof java.lang.String [17]\n" +
				"     60  ifeq 88\n" +
				"     63  getstatic java.lang.System.out : java.io.PrintStream [19]\n" +
				"     66  ldc <String \"1\"> [25]\n" +
				"     68  invokevirtual java.io.PrintStream.print(java.lang.String) : void [27]\n" +
				"     71  return\n" +
				"     72  aload_2 [o]\n" +
				"     73  astore 4 [diff]\n" +
				"     75  aload 4 [diff]\n" +
				"     77  ifnull 88\n" +
				"     80  getstatic java.lang.System.out : java.io.PrintStream [19]\n" +
				"     83  ldc <String \"2\"> [33]\n" +
				"     85  invokevirtual java.io.PrintStream.print(java.lang.String) : void [27]\n" +
				"     88  getstatic java.lang.System.out : java.io.PrintStream [19]\n" +
				"     91  ldc <String \"3\"> [35]\n" +
				"     93  invokevirtual java.io.PrintStream.print(java.lang.String) : void [27]\n" +
				"     96  iinc 3 1 [i]\n" +
				"     99  iload_3 [i]\n" +
				"    100  bipush 10\n" +
				"    102  if_icmplt 5\n" +
				"    105  return\n" +
				"      Line numbers:\n" +
				"        [pc: 0, line: 5]\n" +
				"        [pc: 5, line: 6]\n" +
				"        [pc: 11, line: 7]\n" +
				"        [pc: 19, line: 8]\n" +
				"        [pc: 24, line: 9]\n" +
				"        [pc: 32, line: 10]\n" +
				"        [pc: 35, line: 11]\n" +
				"        [pc: 37, line: 13]\n" +
				"        [pc: 56, line: 15]\n" +
				"        [pc: 63, line: 16]\n" +
				"        [pc: 71, line: 17]\n" +
				"        [pc: 72, line: 22]\n" +
				"        [pc: 75, line: 23]\n" +
				"        [pc: 80, line: 24]\n" +
				"        [pc: 88, line: 29]\n" +
				"        [pc: 96, line: 5]\n" +
				"        [pc: 105, line: 32]\n" +
				"      Local variable table:\n" +
				"        [pc: 0, pc: 106] local: args index: 0 type: java.lang.String[]\n" +
				"        [pc: 19, pc: 96] local: x index: 1 type: X\n" +
				"        [pc: 32, pc: 35] local: o index: 2 type: java.lang.Object\n" +
				"        [pc: 37, pc: 96] local: o index: 2 type: java.lang.Object\n" +
				"        [pc: 2, pc: 105] local: i index: 3 type: int\n" +
				"        [pc: 75, pc: 88] local: diff index: 4 type: java.lang.Object\n" +
				"      Stack map table: number of frames 8\n" +
				"        [pc: 5, full, stack: {}, locals: {java.lang.String[], _, _, int}]\n" +
				"        [pc: 35, full, stack: {}, locals: {java.lang.String[], X, _, int}]\n" +
				"        [pc: 37, full, stack: {}, locals: {java.lang.String[], X, java.lang.Object, int}]\n" +
				"        [pc: 56, same]\n" +
				"        [pc: 72, same]\n" +
				"        [pc: 88, same]\n" +
				"        [pc: 96, full, stack: {}, locals: {java.lang.String[], _, _, int}]\n" +
				"        [pc: 99, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	public void test013() throws Exception {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"public class X {\n" +
            		"\n" +
            		"  void foo() {\n" +
            		"      synchronized (this) {\n" +
            		"        int n=0;\n" +
            		"        try {\n" +
            		"           Thread.sleep(n); \n" +
            		"        } catch (Exception e ) {\n" +
            		"        }\n" +
            		"     }\n" +
            		"  }\n" +
            		"  \n" +
            		"  public static void main(String[] args) {}\n" +
            		"}",
            },
			"");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #6 ()V\n" +
			"  // Stack: 2, Locals: 4\n" +
			"  void foo();\n" +
			"     0  aload_0 [this]\n" +
			"     1  dup\n" +
			"     2  astore_1\n" +
			"     3  monitorenter\n" +
			"     4  iconst_0\n" +
			"     5  istore_2 [n]\n" +
			"     6  iload_2 [n]\n" +
			"     7  i2l\n" +
			"     8  invokestatic java.lang.Thread.sleep(long) : void [15]\n" +
			"    11  goto 15\n" +
			"    14  astore_3\n" +
			"    15  aload_1\n" +
			"    16  monitorexit\n" +
			"    17  goto 23\n" +
			"    20  aload_1\n" +
			"    21  monitorexit\n" +
			"    22  athrow\n" +
			"    23  return\n" +
			"      Exception Table:\n" +
			"        [pc: 6, pc: 11] -> 14 when : java.lang.Exception\n" +
			"        [pc: 4, pc: 17] -> 20 when : any\n" +
			"        [pc: 20, pc: 22] -> 20 when : any\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 4]\n" +
			"        [pc: 4, line: 5]\n" +
			"        [pc: 6, line: 7]\n" +
			"        [pc: 11, line: 8]\n" +
			"        [pc: 15, line: 4]\n" +
			"        [pc: 23, line: 11]\n" +
			"      Local variable table:\n" +
			"        [pc: 0, pc: 24] local: this index: 0 type: X\n" +
			"        [pc: 6, pc: 15] local: n index: 2 type: int\n" +
			"      Stack map table: number of frames 4\n" +
			"        [pc: 14, full, stack: {java.lang.Exception}, locals: {X, X, int}]\n" +
			"        [pc: 15, chop 1 local(s)]\n" +
			"        [pc: 20, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" +
			"        [pc: 23, chop 1 local(s)]\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	public void test014() throws Exception {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"public class X {\n" +
            		"    X() {\n" +
            		"		final int i;\n" +
            		"		synchronized (this) {\n" +
            		"		    i = 8;\n" +
            		"		}\n" +
            		"    }  \n" +
            		"  public static void main(String[] args) {}\n" +
            		"}",
            },
			"");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #6 ()V\n" +
			"  // Stack: 2, Locals: 3\n" +
			"  X();\n" +
			"     0  aload_0 [this]\n" +
			"     1  invokespecial java.lang.Object() [8]\n" +
			"     4  aload_0 [this]\n" +
			"     5  dup\n" +
			"     6  astore_2\n" +
			"     7  monitorenter\n" +
			"     8  bipush 8\n" +
			"    10  istore_1 [i]\n" +
			"    11  aload_2\n" +
			"    12  monitorexit\n" +
			"    13  goto 19\n" +
			"    16  aload_2\n" +
			"    17  monitorexit\n" +
			"    18  athrow\n" +
			"    19  return\n" +
			"      Exception Table:\n" +
			"        [pc: 8, pc: 13] -> 16 when : any\n" +
			"        [pc: 16, pc: 18] -> 16 when : any\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 2]\n" +
			"        [pc: 4, line: 4]\n" +
			"        [pc: 8, line: 5]\n" +
			"        [pc: 11, line: 4]\n" +
			"        [pc: 19, line: 7]\n" +
			"      Local variable table:\n" +
			"        [pc: 0, pc: 20] local: this index: 0 type: X\n" +
			"        [pc: 11, pc: 16] local: i index: 1 type: int\n" +
			"        [pc: 19, pc: 20] local: i index: 1 type: int\n" +
			"      Stack map table: number of frames 2\n" +
			"        [pc: 16, full, stack: {java.lang.Throwable}, locals: {X, _, X}]\n" +
			"        [pc: 19, full, stack: {}, locals: {X, int}]\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	public void test015() throws Exception {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"public enum X {\n" +
            		"    a1(1), a2(5), a3(11);\n" +
            		"    int value;\n" +
            		"    X(int a) {\n" +
            		"        value = a;\n" +
            		"    }\n" +
            		"    int value () {\n" +
            		"    	return value;\n" +
            		"    }\n" +
            		"    public static void main(String argv[]) {\n" +
            		"    }\n" +
            		"    public static int foo() {\n" +
            		"        int val;\n" +
            		"        int res = 0;\n" +
            		"        int n = 0;\n" +
            		"        X[] vals = X.values();\n" +
            		"		for (int i = 0, max = vals.length; i < max; i++) {\n" +
            		"			X e = vals[i];\n" +
            		"           if ( n == 1) {\n" +
            		"               continue;\n" +
            		"           }\n" +
            		"           val = e.value();\n" +
            		"			System.out.println(val);\n" +
            		"        }\n" +
            		"        return res;\n" +
            		"    }\n" +
            		"}",
            },
			"");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #40 ()I\n" +
			"  // Stack: 2, Locals: 7\n" +
			"  public static int foo();\n" +
			"     0  iconst_0\n" +
			"     1  istore_1 [res]\n" +
			"     2  iconst_0\n" +
			"     3  istore_2 [n]\n" +
			"     4  invokestatic X.values() : X[] [46]\n" +
			"     7  astore_3 [vals]\n" +
			"     8  iconst_0\n" +
			"     9  istore 4 [i]\n" +
			"    11  aload_3 [vals]\n" +
			"    12  arraylength\n" +
			"    13  istore 5 [max]\n" +
			"    15  goto 48\n" +
			"    18  aload_3 [vals]\n" +
			"    19  iload 4 [i]\n" +
			"    21  aaload\n" +
			"    22  astore 6 [e]\n" +
			"    24  iload_2 [n]\n" +
			"    25  iconst_1\n" +
			"    26  if_icmpne 32\n" +
			"    29  goto 45\n" +
			"    32  aload 6 [e]\n" +
			"    34  invokevirtual X.value() : int [50]\n" +
			"    37  istore_0 [val]\n" +
			"    38  getstatic java.lang.System.out : java.io.PrintStream [52]\n" +
			"    41  iload_0 [val]\n" +
			"    42  invokevirtual java.io.PrintStream.println(int) : void [58]\n" +
			"    45  iinc 4 1 [i]\n" +
			"    48  iload 4 [i]\n" +
			"    50  iload 5 [max]\n" +
			"    52  if_icmplt 18\n" +
			"    55  iload_1 [res]\n" +
			"    56  ireturn\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 14]\n" +
			"        [pc: 2, line: 15]\n" +
			"        [pc: 4, line: 16]\n" +
			"        [pc: 8, line: 17]\n" +
			"        [pc: 18, line: 18]\n" +
			"        [pc: 24, line: 19]\n" +
			"        [pc: 29, line: 20]\n" +
			"        [pc: 32, line: 22]\n" +
			"        [pc: 38, line: 23]\n" +
			"        [pc: 45, line: 17]\n" +
			"        [pc: 55, line: 25]\n" +
			"      Local variable table:\n" +
			"        [pc: 38, pc: 45] local: val index: 0 type: int\n" +
			"        [pc: 2, pc: 57] local: res index: 1 type: int\n" +
			"        [pc: 4, pc: 57] local: n index: 2 type: int\n" +
			"        [pc: 8, pc: 57] local: vals index: 3 type: X[]\n" +
			"        [pc: 11, pc: 55] local: i index: 4 type: int\n" +
			"        [pc: 15, pc: 55] local: max index: 5 type: int\n" +
			"        [pc: 24, pc: 45] local: e index: 6 type: X\n" +
			"      Stack map table: number of frames 4\n" +
			"        [pc: 18, full, stack: {}, locals: {_, int, int, X[], int, int}]\n" +
			"        [pc: 32, append: {X}]\n" +
			"        [pc: 45, chop 1 local(s)]\n" +
			"        [pc: 48, same]\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	public void test016() throws Exception {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"public enum X {\n" +
            		"    a1(1), a2(5), a3(11);\n" +
            		"    int value;\n" +
            		"    X(int a) {\n" +
            		"        value = a;\n" +
            		"    }\n" +
            		"    int value () {\n" +
            		"    	return value;\n" +
            		"    }\n" +
            		"    public static void main(String argv[]) {\n" +
            		"    }\n" +
            		"    public static int foo() {\n" +
            		"        int val;\n" +
            		"        int res = 0;\n" +
            		"        int n = 0;\n" +
            		"        for (X e : X.values()) {\n" +
            		"            if ( n == 1) {\n" +
            		"                continue;\n" +
            		"            }\n" +
            		"            val = e.value();\n" +
            		"			 System.out.println(val);\n" +
            		"        }\n" +
            		"        return res;\n" +
            		"    }\n" +
            		"}",
            },
			"");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #40 ()I\n" +
			"  // Stack: 2, Locals: 7\n" +
			"  public static int foo();\n" +
			"     0  iconst_0\n" +
			"     1  istore_1 [res]\n" +
			"     2  iconst_0\n" +
			"     3  istore_2 [n]\n" +
			"     4  invokestatic X.values() : X[] [46]\n" +
			"     7  dup\n" +
			"     8  astore 6\n" +
			"    10  arraylength\n" +
			"    11  istore 5\n" +
			"    13  iconst_0\n" +
			"    14  istore 4\n" +
			"    16  goto 48\n" +
			"    19  aload 6\n" +
			"    21  iload 4\n" +
			"    23  aaload\n" +
			"    24  astore_3 [e]\n" +
			"    25  iload_2 [n]\n" +
			"    26  iconst_1\n" +
			"    27  if_icmpne 33\n" +
			"    30  goto 45\n" +
			"    33  aload_3 [e]\n" +
			"    34  invokevirtual X.value() : int [50]\n" +
			"    37  istore_0 [val]\n" +
			"    38  getstatic java.lang.System.out : java.io.PrintStream [52]\n" +
			"    41  iload_0 [val]\n" +
			"    42  invokevirtual java.io.PrintStream.println(int) : void [58]\n" +
			"    45  iinc 4 1\n" +
			"    48  iload 4\n" +
			"    50  iload 5\n" +
			"    52  if_icmplt 19\n" +
			"    55  iload_1 [res]\n" +
			"    56  ireturn\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 14]\n" +
			"        [pc: 2, line: 15]\n" +
			"        [pc: 4, line: 16]\n" +
			"        [pc: 25, line: 17]\n" +
			"        [pc: 30, line: 18]\n" +
			"        [pc: 33, line: 20]\n" +
			"        [pc: 38, line: 21]\n" +
			"        [pc: 45, line: 16]\n" +
			"        [pc: 55, line: 23]\n" +
			"      Local variable table:\n" +
			"        [pc: 38, pc: 45] local: val index: 0 type: int\n" +
			"        [pc: 2, pc: 57] local: res index: 1 type: int\n" +
			"        [pc: 4, pc: 57] local: n index: 2 type: int\n" +
			"        [pc: 25, pc: 45] local: e index: 3 type: X\n" +
			"      Stack map table: number of frames 4\n" +
			"        [pc: 19, full, stack: {}, locals: {_, int, int, _, int, int, X[]}]\n" +
			"        [pc: 33, full, stack: {}, locals: {_, int, int, X, int, int, X[]}]\n" +
			"        [pc: 45, full, stack: {}, locals: {_, int, int, _, int, int, X[]}]\n" +
			"        [pc: 48, same]\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	public void test017() throws Exception {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"public class X {\n" +
            		"	public static void main(String argv[]) {\n" +
            		"		int i;\n" +
            		"		\n" +
            		"		switch (i = 0) {\n" +
            		"			case 0 :\n" +
            		"				i = 1;\n" +
            		"				break;\n" +
            		"			default :\n" +
            		"				;\n" +
            		"		}\n" +
            		"		System.out.print(i);\n" +
            		"	}\n" +
            		"}",
            },
			"1");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
			"  // Stack: 2, Locals: 2\n" +
			"  public static void main(java.lang.String[] argv);\n" +
			"     0  iconst_0\n" +
			"     1  dup\n" +
			"     2  istore_1 [i]\n" +
			"     3  tableswitch default: 22\n" +
			"          case 0: 20\n" +
			"    20  iconst_1\n" +
			"    21  istore_1 [i]\n" +
			"    22  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
			"    25  iload_1 [i]\n" +
			"    26  invokevirtual java.io.PrintStream.print(int) : void [22]\n" +
			"    29  return\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 5]\n" +
			"        [pc: 20, line: 7]\n" +
			"        [pc: 22, line: 12]\n" +
			"        [pc: 29, line: 13]\n" +
			"      Local variable table:\n" +
			"        [pc: 0, pc: 30] local: argv index: 0 type: java.lang.String[]\n" +
			"        [pc: 3, pc: 30] local: i index: 1 type: int\n" +
			"      Stack map table: number of frames 2\n" +
			"        [pc: 20, append: {int}]\n" +
			"        [pc: 22, same]\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	public void test018() {
		this.runConformTest(
            new String[] {
            		"X.java",
            		"import java.util.*;\n" +
            		"\n" +
            		"interface Sequence<Value_Type> extends Iterable<Value_Type>{\n" +
            		"\n" +
            		"    Value_Type get(int i);\n" +
            		"    int length();\n" +
            		"    Value_Type set(int i, Value_Type value);\n" +
            		"}\n" +
            		"\n" +
            		"class ArraySequence<Value_Type> implements Sequence<Value_Type> {\n" +
            		"\n" +
            		"    public ArraySequence(int length) {}\n" +
            		"    public Value_Type get(int i) {\n" +
            		"        return null;\n" +
            		"    }\n" +
            		"    public int length() {\n" +
            		"        return 0;\n" +
            		"    }\n" +
            		"    public Value_Type set(int i, Value_Type value) {\n" +
            		"        return value;\n" +
            		"    }\n" +
            		"    public Iterator<Value_Type> iterator() {\n" +
            		"        return null;\n" +
            		"    }\n" +
            		"}\n" +
            		"\n" +
            		"class BirBlock {\n" +
            		"    void setRole(IrBlock.Role role) {}\n" +
            		"}\n" +
            		"\n" +
            		"class CatchChain {\n" +
            		"    int dispatcherAddress() {\n" +
            		"        return 0;\n" +
            		"    }\n" +
            		"}\n" +
            		"\n" +
            		"class ExceptionHandlerInfo {\n" +
            		"    int handlerProgramCounter() {\n" +
            		"        return 0;\n" +
            		"    }\n" +
            		"}\n" +
            		"\n" +
            		"interface IrBlock {\n" +
            		"    enum Role {\n" +
            		"        EXCEPTION_DISPATCHER\n" +
            		"    }\n" +
            		"}\n" +
            		"\n" +
            		"class ClassMethodActor {\n" +
            		"    Sequence<ExceptionHandlerInfo> exceptionHandlerInfos() {\n" +
            		"        return null;\n" +
            		"    }\n" +
            		"}\n" +
            		"\n" +
            		"public class X {\n" +
            		"\n" +
            		"    private Sequence<CatchChain> _catchChains;\n" +
            		"    private ClassMethodActor _classMethodActor;\n" +
            		"\n" +
            		"    public Sequence<BirBlock> getExceptionDispatchers(final BirBlock[] blockMap) {\n" +
            		"        final ArraySequence<BirBlock> dispatchers = new ArraySequence<BirBlock>(_catchChains.length());\n" +
            		"        for (int i = 0; i < _catchChains.length(); i++) {\n" +
            		"            final BirBlock dispatcher = blockMap[_catchChains.get(i).dispatcherAddress()];\n" +
            		"            dispatcher.setRole(IrBlock.Role.EXCEPTION_DISPATCHER);\n" +
            		"            dispatchers.set(i, dispatcher);\n" +
            		"        }\n" +
            		"        for (ExceptionHandlerInfo exceptionHandlerInfo : _classMethodActor.exceptionHandlerInfos()) {\n" +
            		"            blockMap[exceptionHandlerInfo.handlerProgramCounter()].setRole(IrBlock.Role.EXCEPTION_DISPATCHER);\n" +
            		"        }\n" +
            		"        return dispatchers;\n" +
            		"    }\n" +
            		"    public static void main(String[] args) {\n" +
            		"		System.out.print(\"SUCCESS\");\n" +
            		"	}\n" +
            		"}",
            },
			"SUCCESS");
	}

	public void test019() {
		this.runConformTest(
            new String[] {
        		"X.java",
        		"final public class X\n" +
        		"{\n" +
        		"    final class MyClass\n" +
        		"    {\n" +
        		"        void method1(final String s)\n" +
        		"        {\n" +
        		"        }\n" +
        		"    }\n" +
        		"\n" +
        		"    Object method1()\n" +
        		"    {\n" +
        		"        try\n" +
        		"        {\n" +
        		"            final MyClass myClass = null;\n" +
        		"\n" +
        		"            try\n" +
        		"            {\n" +
        		"                return null;\n" +
        		"            }\n" +
        		"            catch (final Throwable ex)\n" +
        		"            {\n" +
        		"                myClass.method1(this == null ? \"\" : \"\");\n" +
        		"            }\n" +
        		"\n" +
        		"            return null;\n" +
        		"        }\n" +
        		"        finally\n" +
        		"        {\n" +
        		"            {\n" +
        		"            }\n" +
        		"        }\n" +
        		"    }\n" +
        		"    public static void main(String[] args) {\n" +
        		"		System.out.print(\"SUCCESS\");\n" +
        		"	}\n" +
        		"}",
            },
			"SUCCESS");
	}
	public void test020() {
		this.runConformTest(
            new String[] {
        		"X.java",
        		"import java.util.*;\n" +
        		"public class X {\n" +
        		"    public static Map make(boolean sorted) {\n" +
        		"        return (sorted) ? new TreeMap() : new HashMap();\n" +
        		"    }\n" +
        		"    public static void main(String[] args) {\n" +
        		"       make(false);\n" +
        		"		System.out.print(\"SUCCESS\");\n" +
        		"    }\n" +
        		"}",
            },
			"SUCCESS");
	}
	// 155423
	public void test021() throws Exception {
		this.runConformTest(
            new String[] {
        		"X.java",
        		"public class X {\n" +
        		"   {\n" +
        		"      if (true) throw new NullPointerException();\n" +
        		"   }\n" +
        		"   X() {\n" +
        		"      System.out.println();\n" +
        		"   }\n" +
        		"}",
            },
			"");

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
		String actualOutput =
			disassembler.disassemble(
                 classFileBytes,
                 "\n",
                 ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
			"  // Method descriptor #6 ()V\n" +
			"  // Stack: 2, Locals: 1\n" +
			"  X();\n" +
			"     0  aload_0 [this]\n" +
			"     1  invokespecial java.lang.Object() [8]\n" +
			"     4  new java.lang.NullPointerException [10]\n" +
			"     7  dup\n" +
			"     8  invokespecial java.lang.NullPointerException() [12]\n" +
			"    11  athrow\n" +
			"      Line numbers:\n" +
			"        [pc: 0, line: 5]\n" +
			"        [pc: 4, line: 3]\n" +
			"      Local variable table:\n" +
			"        [pc: 0, pc: 12] local: this index: 0 type: X\n";

		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	// 157247
	public void test022() {
		this.runConformTest(
            new String[] {
        		"X.java",
        		"public class X {\n" +
        		"	public static void main(String[] args) {\n" +
        		"		String errorMessage;\n" +
        		"		try {\n" +
        		"			foo();\n" +
        		"			errorMessage = \"No exception thrown\";\n" +
        		"		} catch (Exception e) {\n" +
        		"			if (e instanceof NullPointerException) {\n" +
        		"				System.out.println(\"SUCCESS\");\n" +
        		"				return;\n" +
        		"			}\n" +
        		"			errorMessage = \"Exception thrown\" + e;\n" +
        		"		}\n" +
        		"		System.out.println(errorMessage);\n" +
        		"	}\n" +
        		"	public static void foo() {\n" +
        		"		throw new NullPointerException();\n" +
        		"	}\n" +
        		"}",
            },
			"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=162965
	public void test023() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"	public static void main(String[] args) {\n" +
				"		boolean a = true, x;\n" +
				"		if (a ? false : (x = true))\n" +
				"			a = x;\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
			},
			"SUCCESS");
	}

	public void test024() {
		this.runConformTest(
            new String[] {
        		"X.java",
        		"public class X {\n" +
        		"	public static final int MAX_PROPERTIES = 25;\n" +
        		"	public C c = new C();\n" +
        		"	void foo(int i) {\n" +
        		"		final int len = c.foo2();\n" +
        		"		A f = new A(\" Test \", i, 1, MAX_PROPERTIES) {\n" +
        		"			@Override\n" +
        		"			public double bar() {\n" +
        		"				return len;\n" +
        		"			}\n" +
        		"			@Override\n" +
        		"			public String toString() {\n" +
        		"				return \"SUCCESS\";\n" +
        		"			}\n" +
        		"		};\n" +
        		"		System.out.println(f);\n" +
        		"	}\n" +
        		"	public static void main(String[] args) {\n" +
        		"		new X().foo(0);\n" +
        		"	}\n" +
        		"}",
        		"A.java",
        		"class A {\n" +
        		"	A(String s, double d, double d1, double d2) {}\n" +
        		"	public double bar() {\n" +
        		"		return 0.0;\n" +
        		"	}\n" +
        		"}",
        		"C.java",
        		"class C {\n" +
        		"	public int foo2() {\n" +
        		"		return 0;\n" +
        		"	}\n" +
        		"}",
            },
			"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=169596
	public void test025() {
		this.runConformTest(
	        new String[] {
	    		"X.java",
	    		"public class X {\n" +
	    		"	public static void main(String[] args) {\n" +
	    		"		System.out.println(\"SUCCESS\");\n" +
	    		"	}\n" +
	    		"	\n" +
	    		"	void foo(Object[] o) {}\n" +
	    		"\n" +
	    		"	void bar(boolean b) {\n" +
	    		"		foo(new Object[] {\"\", \"\", b ? \"\" : \"\"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ \n" +
	    		"	}\n" +
	    		"}"
	        },
			"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=169017
	public void test026() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"\n" +
				"	public static final Object EXIT_OK = new Object();\n" +
				"	public static final Object EXIT_RELAUNCH = new Object();\n" +
				"	public static final Object EXIT_RESTART = new Object();\n" +
				"	public static final int RETURN_RESTART = 1;\n" +
				"	public static final String PROP_EXIT_CODE = \"\";\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"	private static int createAndRunWorkbench(Display display, IDEWorkbenchAdvisor advisor) {\n" +
				"		return 0;\n" +
				"	}\n" +
				" \n" +
				"    public Object run(Object args) throws Exception {\n" +
				"        Display display = createDisplay();\n" +
				"        try {\n" +
				"            Shell shell = new Shell(display, SWT.ON_TOP);\n" +
				"            try {\n" +
				"                if (!checkInstanceLocation(shell)) {\n" +
				"                    Platform.endSplash();\n" +
				"                    return EXIT_OK;\n" +
				"                }\n" +
				"            } finally {\n" +
				"                if (shell != null) {\n" +
				"					shell.dispose();\n" +
				"				}\n" +
				"            }\n" +
				"            int returnCode = X.createAndRunWorkbench(display,\n" +
				"                    new IDEWorkbenchAdvisor());\n" +
				"            if (returnCode != X.RETURN_RESTART) {\n" +
				"				return EXIT_OK;\n" +
				"			}\n" +
				"            return EXIT_RELAUNCH.equals(Integer.getInteger(PROP_EXIT_CODE)) ? EXIT_RELAUNCH\n" +
				"                    : EXIT_RESTART;\n" +
				"        } finally {\n" +
				"            if (display != null) {\n" +
				"				display.dispose();\n" +
				"			}\n" +
				"        }\n" +
				"    }\n" +
				"	private boolean checkInstanceLocation(Shell shell) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return false;\n" +
				"	}\n" +
				"	private Display createDisplay() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"}",
				"Display.java",
				"class Display {\n" +
				"\n" +
				"	public void dispose() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"}",
				"Shell.java",
				"class Shell {\n" +
				"	public Shell(Display display, int i) {\n" +
				"		// TODO Auto-generated constructor stub\n" +
				"	}\n" +
				"\n" +
				"	public void dispose() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"}",
				"Platform.java",
				"class Platform {\n" +
				"\n" +
				"	public static void endSplash() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"}",
				"SWT.java",
				"class SWT {\n" +
				"	public static final int ON_TOP = 1; \n" +
				"}",
				"IDEWorkbenchAdvisor.java",
				"class IDEWorkbenchAdvisor {\n" +
				"}"
    	},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=169017
	public void test027() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.io.IOException;\n" +
				"import java.io.InputStream;\n" +
				"public class X {\n" +
				"	private static final int BUF_SIZE = 8192;\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"	BundleActivator activator;\n" +
				"	BundleHost bundle;\n" +
				"	public byte[] getBytes() throws IOException {\n" +
				"		InputStream in = getInputStream();\n" +
				"		int length = (int) getSize();\n" +
				"		byte[] classbytes;\n" +
				"		int bytesread = 0;\n" +
				"		int readcount;\n" +
				"		if (Debug.DEBUG && Debug.DEBUG_LOADER)\n" +
				"			Debug.println(\"  about to read \" + length + \" bytes from \" + getName()); //$NON-NLS-1$ //$NON-NLS-2$\n" +
				"		try {\n" +
				"			if (length > 0) {\n" +
				"				classbytes = new byte[length];\n" +
				"				for (; bytesread < length; bytesread += readcount) {\n" +
				"					readcount = in.read(classbytes, bytesread, length - bytesread);\n" +
				"					if (readcount <= 0)\n" +
				"						break;\n" +
				"				}\n" +
				"			} else {\n" +
				"				length = BUF_SIZE;\n" +
				"				classbytes = new byte[length];\n" +
				"				readloop: while (true) {\n" +
				"					for (; bytesread < length; bytesread += readcount) {\n" +
				"						readcount = in.read(classbytes, bytesread, length - bytesread);\n" +
				"						if (readcount <= 0)\n" +
				"							break readloop;\n" +
				"					}\n" +
				"					byte[] oldbytes = classbytes;\n" +
				"					length += BUF_SIZE;\n" +
				"					classbytes = new byte[length];\n" +
				"					System.arraycopy(oldbytes, 0, classbytes, 0, bytesread);\n" +
				"				}\n" +
				"			}\n" +
				"			if (classbytes.length > bytesread) {\n" +
				"				byte[] oldbytes = classbytes;\n" +
				"				classbytes = new byte[bytesread];\n" +
				"				System.arraycopy(oldbytes, 0, classbytes, 0, bytesread);\n" +
				"			}\n" +
				"		} finally {\n" +
				"			try {\n" +
				"				in.close();\n" +
				"			} catch (IOException ee) {\n" +
				"				// ignore\n" +
				"			}\n" +
				"		}\n" +
				"		return classbytes;\n" +
				"	}\n" +
				"	protected void stop(Throwable t) throws BundleException {\n" +
				"			String clazz = \"\";//(activator == null) ? \"\" : activator.getClass().getName(); //$NON-NLS-1$\n" +
				"			throw new BundleException(NLS.bind(Msg.BUNDLE_ACTIVATOR_EXCEPTION, new Object[] {clazz, \"stop\", bundle.getSymbolicName() == null ? \"\" + bundle.getBundleId() : bundle.getSymbolicName()}), t); //$NON-NLS-1$ //$NON-NLS-2$ \n" +
				"	}\n" +
				"	private String getName() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"	private int getSize() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return 0;\n" +
				"	}\n" +
				"	private InputStream getInputStream() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"}",
				"Debug.java",
				"class Debug {\n" +
				"	public static final boolean DEBUG = false;\n" +
				"	public static final boolean DEBUG_LOADER = false;\n" +
				"	public static final boolean DEBUG_GENERAL = false;\n" +
				"	public static void println(String string) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"	public static void printStackTrace(Throwable t) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"}",
				"AccessController.java",
				"class AccessController {\n" +
				"	static void doPrivileged(Object o) {\n" +
				"	}\n" +
				"}",
				"BundleException.java",
				"class BundleException extends Exception {\n" +
				"	private static final long serialVersionUID = 5758882959559471648L;\n" +
				"\n" +
				"	public BundleException(String bind, Throwable t) {\n" +
				"		// TODO Auto-generated constructor stub\n" +
				"	}\n" +
				"}",
				"PrivilegedExceptionAction.java",
				"class PrivilegedExceptionAction {\n" +
				"}",
				"BundleActivator.java",
				"class BundleActivator {\n" +
				"	public void stop(X x) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"}",
				"BundleHost.java",
				"class BundleHost {\n" +
				"	public Object getSymbolicName() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"	public String getBundleId() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"}",
				"NLS.java",
				"class NLS {\n" +
				"	public static String bind(String bundleActivatorException, Object[] objects) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"}",
				"PrivilegedActionException.java",
				"class PrivilegedActionException extends Exception {\n" +
				"	private static final long serialVersionUID = 3919969055057660822L;\n" +
				"	public Throwable getException() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"}",
				"Msg.java",
				"class Msg {\n" +
				"	public static final String BUNDLE_ACTIVATOR_EXCEPTION = \"\";\n" +
				"}"
    	},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=169017
	public void test028() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.io.StringReader;\n" +
				"\n" +
				"public class X {\n" +
				"	public void loadVariablesAndContainers() {\n" +
				"		// backward compatibility, consider persistent property	\n" +
				"		String qName = \"1\";\n" +
				"		String xmlString = \"2\";\n" +
				"		\n" +
				"		try {\n" +
				"			if (xmlString != null){\n" +
				"				StringReader reader = new StringReader(xmlString);\n" +
				"				Object o;\n" +
				"				try {\n" +
				"					StringBuffer buffer = null;\n" +
				"					o = new Object();\n" +
				"				} catch(RuntimeException e) {\n" +
				"					return;\n" +
				"				} catch(Exception e){\n" +
				"					return;\n" +
				"				} finally {\n" +
				"					reader.close();\n" +
				"				}\n" +
				"				System.out.println(reader);\n" +
				"			}\n" +
				"		} catch(Exception e){\n" +
				"			// problem loading xml file: nothing we can do\n" +
				"		} finally {\n" +
				"			if (xmlString != null){\n" +
				"				System.out.println(xmlString);\n" +
				"			}\n" +
				"		}\n" +
				"	}\n" +
				"\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"}"
		},
		"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=171472
	public void test029() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"\n" +
				"	public Object foo() {\n" +
				"		Object status;\n" +
				"		try {\n" +
				"			status= bar();\n" +
				"		} catch (RuntimeException x) {\n" +
				"			status= foo2(x);\n" +
				"		} finally {\n" +
				"			System.out.println();\n" +
				"		}\n" +
				"		return status;\n" +
				"	}\n" +
				"	public Object bar() {\n" +
				"		return null;\n" +
				"	}\n" +
				"	public Object foo2(Exception e) {\n" +
				"		return null;\n" +
				"	}\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"}"
		},
		"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=171472
	public void test030() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.util.Collections;\n" +
				"import java.util.List;\n" +
				"public class X {\n" +
				"\n" +
				"	private static final String COMPUTE_COMPLETION_PROPOSALS= \"computeCompletionProposals()\"; //$NON-NLS-1$\n" +
				"	private Object fLastError;\n" +
				"	private boolean fIsReportingDelay;\n" +
				"	private CompletionProposalComputerRegistry fRegistry;\n" +
				"	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {\n" +
				"		if (!isEnabled())\n" +
				"			return Collections.EMPTY_LIST;\n" +
				"\n" +
				"		IStatus status;\n" +
				"		try {\n" +
				"			IJavaCompletionProposalComputer computer= getComputer();\n" +
				"			if (computer == null) // not active yet\n" +
				"				return Collections.EMPTY_LIST;\n" +
				"			\n" +
				"			try {\n" +
				"				PerformanceStats stats= startMeter(context, computer);\n" +
				"				List proposals= computer.computeCompletionProposals(context, monitor);\n" +
				"				stopMeter(stats, COMPUTE_COMPLETION_PROPOSALS);\n" +
				"				\n" +
				"				if (proposals != null) {\n" +
				"					fLastError= computer.getErrorMessage();\n" +
				"					return proposals;\n" +
				"				}\n" +
				"			} finally {\n" +
				"				fIsReportingDelay= true;\n" +
				"			}\n" +
				"			status= createAPIViolationStatus(COMPUTE_COMPLETION_PROPOSALS);\n" +
				"		} catch (InvalidRegistryObjectException x) {\n" +
				"			status= createExceptionStatus(x);\n" +
				"		} catch (CoreException x) {\n" +
				"			status= createExceptionStatus(x);\n" +
				"		} catch (RuntimeException x) {\n" +
				"			status= createExceptionStatus(x);\n" +
				"		} finally {\n" +
				"			monitor.done();\n" +
				"		}\n" +
				"\n" +
				"		fRegistry.informUser(this, status);\n" +
				"\n" +
				"		return Collections.EMPTY_LIST;\n" +
				"	}\n" +
				"\n" +
				"	private IStatus createExceptionStatus(Exception x) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"\n" +
				"	private IStatus createAPIViolationStatus(String computeCompletionProposals) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"\n" +
				"	private void stopMeter(PerformanceStats stats, String computeCompletionProposals) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		\n" +
				"	}\n" +
				"\n" +
				"	private PerformanceStats startMeter(ContentAssistInvocationContext context, IJavaCompletionProposalComputer computer) {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"\n" +
				"	private IJavaCompletionProposalComputer getComputer() throws CoreException, InvalidRegistryObjectException {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return null;\n" +
				"	}\n" +
				"\n" +
				"	private boolean isEnabled() {\n" +
				"		// TODO Auto-generated method stub\n" +
				"		return false;\n" +
				"	}\n" +
				"	\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
				"IProgressMonitor.java",
				"interface IProgressMonitor {\n" +
				"	void done();\n" +
				"}",
				"ContentAssistInvocationContext.java",
				"class ContentAssistInvocationContext {\n" +
				"}",
				"IStatus.java",
				"interface IStatus {}",
				"IJavaCompletionProposalComputer.java",
				"import java.util.List;\n" +
				"interface IJavaCompletionProposalComputer {\n" +
				"	List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor);\n" +
				"	Object getErrorMessage();\n" +
				"}",
				"PerformanceStats.java",
				"class PerformanceStats {}",
				"CompletionProposalComputerRegistry.java",
				"class CompletionProposalComputerRegistry {\n" +
				"	public void informUser(X x, IStatus status) {\n" +
				"	}\n" +
				"}",
				"InvalidRegistryObjectException.java",
				"class InvalidRegistryObjectException extends Exception {\n" +
				"	private static final long serialVersionUID = 8943194846421947853L;\n" +
				"}",
				"CoreException.java",
				"class CoreException extends Exception {\n" +
				"	private static final long serialVersionUID = 3996792687633449517L;\n" +
				"}"
		},
		"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=168665
	public void test031() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"	String s;\n" +
				"	X() {\n" +
				"		this.s = \"\";\n" +
				"	}\n" +
				"	X(String s, double d, double d2, double i) {\n" +
				"		this.s = s;\n" +
				"	}\n" +
				"	public static final int CONST = 1;\n" +
				"	public int foo() {\n" +
				"		return 0;\n" +
				"	}\n" +
				"	public double value(double d1) {\n" +
				"		return d1;\n" +
				"	}\n" +
				"	public void bar(int start) {\n" +
				"		final int len = foo();\n" +
				"		X x = new X(\"SUCCESS\", start, 1, CONST) {\n" +
				"			@Override\n" +
				"			public double value(double newValue) {\n" +
				"				return len;\n" +
				"			}\n" +
				"		};\n" +
				"		System.out.println(x);\n" +
				"	}\n" +
				"	public static void main(String[] args) {\n" +
				"		new X().bar(1);\n" +
				"	}\n" +
				"	public String toString() {\n" +
				"		return this.s;\n" +
				"	}\n" +
				"}",
			},
			"SUCCESS");
	}
	public void test032() {
		this.runConformTest(
				new String[] {
						"X.java",
						"import java.util.*;\n" +
						"public class X {\n" +
						"    public static void main(String[] args) {\n" +
						"		int i = args.length;\n" +
						"       X[] array = new X[] { i == 0 ? null : null };\n" +
						"		System.out.print(\"SUCCESS\" + array.length);\n" +
						"    }\n" +
						"}",
				},
		"SUCCESS1");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=184102
	public void test033() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public enum X {\n" +
				"	C { @Override public boolean test() { return true; } };\n" +
				"	static {\n" +
				"		for (int i = 0; i < 1; i++) {}\n" +
				"	}\n" +
				"	public boolean test() {\n" +
				"	return false;\n" +
				"	}\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
			},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=184102
	public void test034() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public enum X {\n" +
				"	C;\n" +
				"	static {\n" +
				"		for (int i = 0; i < 1; i++) {}\n" +
				"	}\n" +
				"	public boolean test() {\n" +
				"	return false;\n" +
				"	}\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
			},
		"SUCCESS");
	}

	// add more bytecode coverage: fneg, lneg, dneg, dstore_0, f2l, fstore_0, fstore_2, lstore_0 and saload
	public void test035() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"	static double foo() {\n" +
				"		double d = 3.0;\n" +
				"		d = -d;\n" +
				"		return d > 1.0 ? d : -d;\n" +
				"	}\n" +
				"\n" +
				"	static float foo2() {\n" +
				"		float f = 3.0f;\n" +
				"		int i = 0;\n" +
				"		float f2 = f+ i;\n" +
				"		long l = (long) f;\n" +
				"		l += f2;\n" +
				"		return i == 0 ? f : -f + (float) l;\n" +
				"	}\n" +
				"\n" +
				"	static long foo3() {\n" +
				"		long l = Long.MAX_VALUE - 3;\n" +
				"		boolean b = true;\n" +
				"		return b ? l : -l;\n" +
				"	}\n" +
				"	\n" +
				"	static short foo4() {\n" +
				"		short[] tab = new short[] { 1, 2, 3 };\n" +
				"		return tab.length == 3 ? tab[2] : (tab.length == 2 ? tab[1] : tab[0]);\n" +
				"	}\n" +
				"\n" +
				"	public static void main(String args[]) {\n" +
				"		foo();\n" +
				"		foo2();\n" +
				"		foo3();\n" +
				"		foo4();\n" +
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
			},
		"SUCCESS");
	}

	// fix verify error
	public void test036() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.util.Map;\n" +
				"import java.util.Set;\n" +
				"\n" +
				"public class X {\n" +
				"	public static void main(String[] args) {\n" +
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" +
				"	public void foo(Object o, boolean b) {\n" +
				"		String[] models = new String[] {};\n" +
				"		Map map = null;\n" +
				"		Set set  = null;\n" +
				"		for (int n = 0; n < models.length; n++) {	bar(models[n]); }\n" +
				"		foo2(new Object(),\n" +
				"				set,\n" +
				"				map,\n" +
				"				!b);\n" +
				"	}\n" +
				"	void bar(String s) {}\n" +
				"	void foo2(Object o, Object s, Object m, boolean b) {}\n" +
				"}",
			},
		"SUCCESS");
	}
	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=236336
	public void test037() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public static void main(String[] args) {\n" + 
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" + 
				"	String field;\n" + 
				"	String field2;\n" + 
				"	public void foo(int index, Object[] objs, Object[] objs2) {\n" + 
				"		String methodName = \"foo\";\n" + 
				"		int i = -1;\n" + 
				"		try {\n" + 
				"			switch (index) {\n" + 
				"				case 1130: {\n" + 
				"					int j = ((Integer) objs[0]).intValue();\n" + 
				"					int k = ((Integer) objs[0]).intValue();\n" + 
				"					{\n" + 
				"						String s = field;\n" + 
				"						String s2 = field2;\n" + 
				"						synchronized (s2) {\n" + 
				"							String s3 = s2;\n" + 
				"							try {\n" + 
				"								System.out.println(s);\n" + 
				"								System.out.println(s2);\n" + 
				"								System.out.println(s3);\n" + 
				"							} finally {\n" + 
				"								s2.toString();\n" + 
				"							}\n" + 
				"						}\n" + 
				"						}\n" + 
				"				}\n" + 
				"				break;\n" + 
				"				case 0 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 2 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 3 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 4 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 5 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 6 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 7 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 8 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 9 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 10 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 11 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 12 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 13 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 14 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 15 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 16 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 17 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 18 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 19 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 20 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 21 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 22 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 23 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 24 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 25 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 26 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 27 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 28 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 29 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 30 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 31 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 32 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 33 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 34 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 35 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 36 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 37 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 38 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 39 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 40 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 41 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 42 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 43 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 44 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 45 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 46 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 47 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 48 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 49 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 50 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 51 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 52 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 53 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 54 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 55 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 56 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 57 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 58 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 59 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 60 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 61 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 62 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 63 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 64 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 65 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 66 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 67 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 68 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 69 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 70 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 71 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 72 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 73 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 74 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 75 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 76 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 77 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 78 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 79 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 80 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 81 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 82 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 83 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 84 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 85 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 86 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 87 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 88 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 89 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 90 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 91 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 92 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 93 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 94 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 95 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 96 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 97 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 98 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 99 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 100 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 101 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 102 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 103 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 104 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 105 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 106 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 107 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 108 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 109 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 110 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 111 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 112 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 113 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 114 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 115 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 116 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 117 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 118 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 119 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 120 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 121 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 122 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 123 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 124 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 125 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 126 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 127 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 128 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 129 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 130 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 131 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 132 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 133 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 134 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 135 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 136 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 137 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 138 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 139 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 140 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 141 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 142 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 143 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 144 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 145 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 146 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 147 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 148 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 149 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 150 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 151 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 152 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 153 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 154 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 155 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 156 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 157 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 158 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 159 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 160 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 161 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 162 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 163 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 164 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 165 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 166 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 167 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 168 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 169 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 170 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 171 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 172 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 173 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 174 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 175 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 176 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 177 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 178 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 179 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 180 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 181 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 182 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 183 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 184 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 185 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 186 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 187 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 188 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 189 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 190 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 191 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 192 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 193 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 194 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 195 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 196 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 197 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 198 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 199 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 200 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 201 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 202 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 203 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 204 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 205 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 206 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 207 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 208 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 209 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 210 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 211 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 212 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 213 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 214 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 215 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 216 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 217 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 218 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 219 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 220 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 221 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 222 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 223 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 224 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 225 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 226 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 227 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 228 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 229 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 230 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 231 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 232 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 233 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 234 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 235 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 236 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 237 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 238 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 239 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 240 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 241 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 242 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 243 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 244 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 245 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 246 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 247 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 248 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 249 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 250 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 251 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 252 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 253 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 254 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 255 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 256 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 257 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 258 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 259 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 260 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 261 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 262 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 263 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 264 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 265 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 266 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 267 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 268 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 269 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 270 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 271 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 272 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 273 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 274 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 275 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 276 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 277 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 278 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 279 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 280 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 281 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 282 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 283 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 284 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 285 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 286 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 287 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 288 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 289 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 290 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 291 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 292 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 293 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 294 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 295 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 296 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 297 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 298 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 299 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 300 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 301 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 302 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 303 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 304 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 305 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 306 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 307 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 308 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 309 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 310 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 311 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 312 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 313 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 314 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 315 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 316 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 317 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 318 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 319 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 320 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 321 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 322 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 323 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 324 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 325 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 326 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 327 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 328 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 329 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 330 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 331 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 332 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 333 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 334 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 335 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 336 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 337 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 338 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 339 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 340 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 341 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 342 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 343 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 344 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 345 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 346 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 347 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 348 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 349 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 350 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 351 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 352 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 353 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 354 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 355 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 356 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 357 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 358 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 359 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 360 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 361 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 362 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 363 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 364 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 365 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 366 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 367 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 368 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 369 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 370 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 371 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 372 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 373 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 374 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 375 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 376 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 377 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 378 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 379 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 380 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 381 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 382 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 383 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 384 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 385 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 386 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 387 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 388 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 389 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 390 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 391 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 392 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 393 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 394 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 395 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 396 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 397 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 398 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 399 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 400 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 401 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 402 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 403 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 404 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 405 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 406 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 407 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 408 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 409 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 410 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 411 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 412 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 413 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 414 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 415 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 416 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 417 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 418 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 419 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 420 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 421 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 422 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 423 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 424 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 425 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 426 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 427 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 428 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 429 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 430 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 431 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 432 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 433 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 434 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 435 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 436 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 437 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 438 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 439 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 440 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 441 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 442 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 443 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 444 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 445 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 446 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 447 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 448 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 449 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 450 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 451 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 452 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 453 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 454 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 455 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 456 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 457 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 458 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 459 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 460 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 461 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 462 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 463 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 464 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 465 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 466 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 467 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 468 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 469 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 470 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 471 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 472 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 473 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 474 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 475 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 476 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 477 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 478 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 479 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 480 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 481 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 482 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 483 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 484 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 485 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 486 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 487 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 488 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 489 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 490 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 491 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 492 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 493 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 494 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 495 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 496 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 497 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 498 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 499 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 500 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 501 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 502 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 503 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 504 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 505 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 506 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 507 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 508 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 509 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 510 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 511 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 512 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 513 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 514 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 515 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 516 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 517 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 518 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 519 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 520 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 521 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 522 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 523 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 524 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 525 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 526 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 527 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 528 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 529 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 530 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 531 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 532 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 533 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 534 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 535 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 536 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 537 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 538 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 539 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 540 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 541 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 542 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 543 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 544 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 545 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 546 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 547 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 548 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 549 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 550 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 551 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 552 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 553 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 554 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 555 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 556 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 557 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 558 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 559 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 560 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 561 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 562 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 563 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 564 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 565 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 566 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 567 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 568 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 569 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 570 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 571 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 572 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 573 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 574 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 575 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 576 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 577 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 578 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 579 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 580 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 581 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 582 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 583 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 584 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 585 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 586 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 587 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 588 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 589 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 590 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 591 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 592 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 593 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 594 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 595 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 596 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 597 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 598 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 599 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 600 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 601 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 602 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 603 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 604 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 605 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 606 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 607 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 608 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 609 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 610 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 611 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 612 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 613 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 614 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 615 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 616 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 617 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 618 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 619 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 620 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 621 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 622 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 623 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 624 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 625 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 626 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 627 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 628 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 629 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 630 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 631 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 632 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 633 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 634 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 635 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 636 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 637 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 638 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 639 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 640 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 641 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 642 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 643 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 644 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 645 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 646 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 647 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 648 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 649 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 650 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 651 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 652 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 653 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 654 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 655 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 656 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 657 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 658 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 659 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 660 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 661 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 662 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 663 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 664 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 665 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 666 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 667 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 668 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 669 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 670 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 671 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 672 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 673 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 674 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 675 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 676 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 677 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 678 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 679 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 680 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 681 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 682 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 683 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 684 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 685 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 686 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 687 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 688 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 689 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 690 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 691 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 692 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 693 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 694 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 695 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 696 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 697 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 698 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 699 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 700 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 701 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 702 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 703 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 704 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 705 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 706 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 707 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 708 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 709 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 710 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 711 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 712 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 713 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 714 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 715 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 716 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 717 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 718 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 719 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 720 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 721 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 722 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 723 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 724 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 725 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 726 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 727 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 728 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 729 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 730 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 731 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 732 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 733 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 734 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 735 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 736 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 737 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 738 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 739 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 740 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 741 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 742 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 743 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 744 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 745 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 746 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 747 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 748 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 749 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 750 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 751 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 752 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 753 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 754 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 755 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 756 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 757 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 758 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 759 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 760 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 761 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 762 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 763 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 764 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 765 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 766 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 767 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 768 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 769 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 770 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 771 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 772 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 773 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 774 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 775 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 776 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 777 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 778 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 779 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 780 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 781 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 782 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 783 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 784 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 785 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 786 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 787 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 788 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 789 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 790 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 791 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 792 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 793 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 794 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 795 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 796 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 797 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 798 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 799 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 800 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 801 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 802 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 803 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 804 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 805 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 806 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 807 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 808 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 809 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 810 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 811 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 812 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 813 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 814 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 815 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 816 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 817 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 818 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 819 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 820 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 821 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 822 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 823 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 824 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 825 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 826 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 827 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 828 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 829 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 830 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 831 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 832 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 833 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 834 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 835 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 836 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 837 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 838 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 839 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 840 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 841 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 842 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 843 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 844 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 845 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 846 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 847 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 848 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 849 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 850 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 851 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 852 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 853 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 854 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 855 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 856 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 857 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 858 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 859 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 860 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 861 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 862 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 863 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 864 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 865 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 866 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 867 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 868 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 869 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 870 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 871 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 872 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 873 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 874 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 875 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 876 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 877 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 878 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 879 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 880 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 881 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 882 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 883 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 884 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 885 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 886 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 887 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 888 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 889 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 890 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 891 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 892 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 893 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 894 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 895 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 896 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 897 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 898 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 899 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 900 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 901 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 902 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 903 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 904 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 905 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 906 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 907 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 908 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 909 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 910 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 911 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 912 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 913 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 914 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 915 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 916 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 917 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 918 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 919 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 920 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 921 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 922 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 923 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 924 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 925 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 926 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 927 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 928 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 929 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 930 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 931 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 932 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 933 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 934 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 935 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 936 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 937 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 938 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 939 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 940 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 941 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 942 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 943 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 944 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 945 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 946 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 947 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 948 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 949 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 950 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 951 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 952 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 953 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 954 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 955 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 956 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 957 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 958 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 959 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 960 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 961 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 962 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 963 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 964 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 965 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 966 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 967 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 968 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 969 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 970 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 971 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 972 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 973 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 974 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 975 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 976 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 977 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 978 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 979 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 980 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 981 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 982 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 983 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 984 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 985 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 986 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 987 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 988 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 989 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 990 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 991 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 992 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 993 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 994 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 995 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 996 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 997 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 998 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 999 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1000 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1001 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1002 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1003 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1004 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1005 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1006 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1007 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1008 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1009 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1010 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1011 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1012 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1013 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1014 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1015 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1016 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1017 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1018 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1019 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1020 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1021 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1022 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1023 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1024 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1025 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1026 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1027 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1028 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1029 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1030 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1031 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1032 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1033 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1034 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1035 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1036 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1037 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1038 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1039 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1040 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1041 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1042 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1043 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1044 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1045 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1046 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1047 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1048 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1049 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1050 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1051 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1052 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1053 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1054 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1055 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1056 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1057 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1058 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1059 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1060 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1061 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1062 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1063 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1064 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1065 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1066 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1067 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1068 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1069 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1070 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1071 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1072 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1073 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1074 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1075 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1076 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1077 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1078 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1079 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1080 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1081 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1082 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1083 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1084 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1085 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1086 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1087 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1088 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1089 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1090 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1091 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1092 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1093 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1094 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1095 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1096 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1097 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1098 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1099 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1100 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1101 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1102 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1103 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1104 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1105 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1106 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1107 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1108 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1109 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1110 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1111 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1112 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1113 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1114 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1115 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1116 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1117 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1118 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1119 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1120 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1121 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1122 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1123 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1124 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1125 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1126 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1127 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1128 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" + 
				"				case 1129 :\n" + 
				"					System.out.println(methodName + i);\n" + 
				"				break;\n" +
				"			}\n" +
				"		} catch(Exception e) {\n" +
				"			e.printStackTrace();\n" +
				"		}\n" +
				"	}" +
				"}",
			},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=238923
	public void test038() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	{\n" + 
				"		for (boolean b : new boolean[] {}) {}\n" + 
				"	}\n" +
				"	public X() {}\n" +
				"	public X(boolean b) {}\n" +
				"	public static void main(String[] args) {\n" + 
				"		System.out.print(\"SUCCESS\");\n" +
				"	}\n" + 
				"}",
			},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=237931
	public void test039() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public String[][] foo(String s) {\n" + 
				"		return\n" + 
				"			new String[][] { {\" \", s != null ? s : \"\" },\n" + 
				"				{\" \", s != null ? s : \"\" },\n" + 
				"				{\" \", s != null ? s : \"\" },\n" + 
				"				{\" \", s != null ? s : \"\" } };\n" + 
				"	}\n" + 
				"	public static void main(String[] args) {\n" + 
				"		System.out.println(\"SUCCESS\");\n" + 
				"	}\n" + 
				"}",
			},
		"SUCCESS");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=251539
	public void test040() throws Exception {
		this.runConformTest(
			new String[] {
				"I.java",
				"public interface I {\n" + 
				"\n" + 
				"	public Object foo();\n" + 
				"\n" + 
				"	public static class B implements I {\n" + 
				"		public Object foo() {\n" + 
				"			return X.myI.foo();\n" + 
				"		}\n" + 
				"	}\n" + 
				"}",
				"X.java",
				"public class X {\n" + 
				"	public static final I myI = new I.B() {\n" + 
				"		int a = 0;\n" + 
				"		int b = 1;\n" + 
				"	};\n" + 
				"\n" + 
				"	private Object bar2() {\n" + 
				"		return null;\n" + 
				"	}\n" + 
				"	private Object bar() {\n" + 
				"		Object o = bar2();\n" + 
				"		if (o != null) {\n" + 
				"			o.toString();\n" + 
				"		}\n" + 
				"		return null;\n" + 
				"	}\n" + 
				"\n" + 
				"}",
			},
		"");
		String expectedOutput =
			"  // Method descriptor #23 ()Ljava/lang/Object;\n" + 
			"  // Stack: 1, Locals: 2\n" + 
			"  private java.lang.Object bar();\n" + 
			"     0  aload_0 [this]\n" + 
			"     1  " + 
			(isMinimumCompliant(ClassFileConstants.JDK11) ? "invokevirtual" : "invokespecial") +
			" X.bar2() : java.lang.Object [25]\n" + 
			"     4  astore_1 [o]\n" + 
			"     5  aload_1 [o]\n" + 
			"     6  ifnull 14\n" + 
			"     9  aload_1 [o]\n" + 
			"    10  invokevirtual java.lang.Object.toString() : java.lang.String [27]\n" + 
			"    13  pop\n" + 
			"    14  aconst_null\n" + 
			"    15  areturn\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 11]\n" + 
			"        [pc: 5, line: 12]\n" + 
			"        [pc: 9, line: 13]\n" + 
			"        [pc: 14, line: 15]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 0, pc: 16] local: this index: 0 type: X\n" + 
			"        [pc: 5, pc: 16] local: o index: 1 type: java.lang.Object\n" + 
			"      Stack map table: number of frames 1\n" + 
			"        [pc: 14, append: {java.lang.Object}]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=251539
	public void test041() throws Exception {
		this.runConformTest(
			new String[] {
				"I.java",
				"public interface I {\n" + 
				"\n" + 
				"	public Object foo();\n" + 
				"\n" + 
				"	public static class B implements I {\n" + 
				"		public Object foo() {\n" + 
				"			return String.valueOf(X.myI.foo()) + String.valueOf(X.myU.foo());\n" + 
				"		}\n" + 
				"	}\n" + 
				"}",
				"X.java",
				"public class X {\n" + 
				"	public static final I myI = new I.B() {\n" + 
				"		int a = 0;\n" + 
				"		int b = 1;\n" + 
				"	};\n" + 
				"	public static final I myU = new I.B() {\n" + 
				"		int a = 0;\n" + 
				"		int b = 1;\n" + 
				"		int c = 2;\n" + 
				"	};\n" +
				"	private Object bar2() {\n" + 
				"		return null;\n" + 
				"	}\n" + 
				"	private Object bar() {\n" + 
				"		Object o = bar2();\n" + 
				"		if (o != null) {\n" + 
				"			o.toString();\n" + 
				"		}\n" + 
				"		return null;\n" + 
				"	}\n" + 
				"}",
			},
		"");
	
		String expectedOutput =
			"  // Method descriptor #29 ()Ljava/lang/Object;\n" + 
			"  // Stack: 1, Locals: 2\n" + 
			"  private java.lang.Object bar();\n" + 
			"     0  aload_0 [this]\n" + 
			"     1  " + 
			(isMinimumCompliant(ClassFileConstants.JDK11) ? "invokevirtual" : "invokespecial") +
			" X.bar2() : java.lang.Object [31]\n" + 
			"     4  astore_1 [o]\n" + 
			"     5  aload_1 [o]\n" + 
			"     6  ifnull 14\n" + 
			"     9  aload_1 [o]\n" + 
			"    10  invokevirtual java.lang.Object.toString() : java.lang.String [33]\n" + 
			"    13  pop\n" + 
			"    14  aconst_null\n" + 
			"    15  areturn\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 15]\n" + 
			"        [pc: 5, line: 16]\n" + 
			"        [pc: 9, line: 17]\n" + 
			"        [pc: 14, line: 19]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 0, pc: 16] local: this index: 0 type: X\n" + 
			"        [pc: 5, pc: 16] local: o index: 1 type: java.lang.Object\n" + 
			"      Stack map table: number of frames 1\n" + 
			"        [pc: 14, append: {java.lang.Object}]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=260031
	public void test042() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	private static void foo(Class<?> c, int n) { }\n" + 
				"	public static void main(String... args) {\n" + 
				"		foo(Integer.class, (args == null ? -1 : 1));\n" + 
				"	}\n" + 
				"}",
			},
		"");
	
		String expectedOutput =
			"  // Stack: 2, Locals: 1\n" + 
			"  public static void main(java.lang.String... args);\n" + 
			"     0  ldc <Class java.lang.Integer> [26]\n" + 
			"     2  aload_0 [args]\n" + 
			"     3  ifnonnull 10\n" + 
			"     6  iconst_m1\n" + 
			"     7  goto 11\n" + 
			"    10  iconst_1\n" + 
			"    11  invokestatic X.foo(java.lang.Class, int) : void [28]\n" + 
			"    14  return\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 4]\n" + 
			"        [pc: 14, line: 5]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 0, pc: 15] local: args index: 0 type: java.lang.String[]\n" + 
			"      Stack map table: number of frames 2\n" + 
			"        [pc: 10, same_locals_1_stack_item, stack: {java.lang.Class}]\n" + 
			"        [pc: 11, full, stack: {java.lang.Class, int}, locals: {java.lang.String[]}]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183
	public void test043() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public static void main(String[] args) {\n" + 
				"		System.out.println(\"ok\");\n" + 
				"	}\n" + 
				"	private static int willNotVerify() {\n" + 
				"		int limit = 100;\n" + 
				"		int match;\n" + 
				"		int result = 200;\n" + 
				"		do {\n" + 
				"			if (limit > 0) {\n" + 
				"				continue;\n" + 
				"			}\n" + 
				"			match = 0;\n" + 
				"			while (++match < 100) {\n" + 
				"				System.out.println();\n" + 
				"			}\n" + 
				"		} while (--limit != 0);\n" + 
				"		return result;\n" + 
				"	}\n" + 
				"}",
			},
		"ok");
	
		String expectedOutput =
			"  // Method descriptor #33 ()I\n" + 
			"  // Stack: 2, Locals: 3\n" + 
			"  private static int willNotVerify();\n" + 
			"     0  bipush 100\n" + 
			"     2  istore_0 [limit]\n" + 
			"     3  sipush 200\n" + 
			"     6  istore_2 [result]\n" + 
			"     7  iload_0 [limit]\n" + 
			"     8  ifle 14\n" + 
			"    11  goto 34\n" + 
			"    14  iconst_0\n" + 
			"    15  istore_1 [match]\n" + 
			"    16  goto 25\n" + 
			"    19  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
			"    22  invokevirtual java.io.PrintStream.println() : void [34]\n" + 
			"    25  iinc 1 1 [match]\n" + 
			"    28  iload_1 [match]\n" + 
			"    29  bipush 100\n" + 
			"    31  if_icmplt 19\n" + 
			"    34  iinc 0 -1 [limit]\n" + 
			"    37  iload_0 [limit]\n" + 
			"    38  ifne 7\n" + 
			"    41  iload_2 [result]\n" + 
			"    42  ireturn\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 6]\n" + 
			"        [pc: 3, line: 8]\n" + 
			"        [pc: 7, line: 10]\n" + 
			"        [pc: 11, line: 11]\n" + 
			"        [pc: 14, line: 13]\n" + 
			"        [pc: 16, line: 14]\n" + 
			"        [pc: 19, line: 15]\n" + 
			"        [pc: 25, line: 14]\n" + 
			"        [pc: 34, line: 17]\n" + 
			"        [pc: 41, line: 18]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 3, pc: 43] local: limit index: 0 type: int\n" + 
			"        [pc: 16, pc: 34] local: match index: 1 type: int\n" + 
			"        [pc: 7, pc: 43] local: result index: 2 type: int\n" + 
			"      Stack map table: number of frames 5\n" + 
			"        [pc: 7, full, stack: {}, locals: {int, _, int}]\n" + 
			"        [pc: 14, same]\n" + 
			"        [pc: 19, full, stack: {}, locals: {int, int, int}]\n" + 
			"        [pc: 25, same]\n" + 
			"        [pc: 34, full, stack: {}, locals: {int, _, int}]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}
	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183
	public void test044() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public static void main(String[] args) {\n" + 
				"		System.out.println(\"ok\");\n" + 
				"	}\n" + 
				"	private static int willNotVerify() {\n" + 
				"		int limit = 100;\n" + 
				"		int match;\n" + 
				"		int result = 200;\n" + 
				"		do {\n" + 
				"			if (limit > 0) {\n" + 
				"				continue;\n" + 
				"			}\n" + 
				"			match = 0;\n" + 
				"			while (++match < 100) {\n" + 
				"				// empty\n" + 
				"			}\n" + 
				"		} while (--limit != 0);\n" + 
				"		return result;\n" + 
				"	}\n" + 
				"}",
			},
		"ok");
	
		String expectedOutput =
			"  // Method descriptor #33 ()I\n" + 
			"  // Stack: 2, Locals: 3\n" + 
			"  private static int willNotVerify();\n" + 
			"     0  bipush 100\n" + 
			"     2  istore_0 [limit]\n" + 
			"     3  sipush 200\n" + 
			"     6  istore_2 [result]\n" + 
			"     7  iload_0 [limit]\n" + 
			"     8  ifle 14\n" + 
			"    11  goto 25\n" + 
			"    14  iconst_0\n" + 
			"    15  istore_1 [match]\n" + 
			"    16  iinc 1 1 [match]\n" + 
			"    19  iload_1 [match]\n" + 
			"    20  bipush 100\n" + 
			"    22  if_icmplt 16\n" + 
			"    25  iinc 0 -1 [limit]\n" + 
			"    28  iload_0 [limit]\n" + 
			"    29  ifne 7\n" + 
			"    32  iload_2 [result]\n" + 
			"    33  ireturn\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 6]\n" + 
			"        [pc: 3, line: 8]\n" + 
			"        [pc: 7, line: 10]\n" + 
			"        [pc: 11, line: 11]\n" + 
			"        [pc: 14, line: 13]\n" + 
			"        [pc: 16, line: 14]\n" + 
			"        [pc: 25, line: 17]\n" + 
			"        [pc: 32, line: 18]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 3, pc: 34] local: limit index: 0 type: int\n" + 
			"        [pc: 16, pc: 25] local: match index: 1 type: int\n" + 
			"        [pc: 7, pc: 34] local: result index: 2 type: int\n" + 
			"      Stack map table: number of frames 4\n" + 
			"        [pc: 7, full, stack: {}, locals: {int, _, int}]\n" + 
			"        [pc: 14, same]\n" + 
			"        [pc: 16, full, stack: {}, locals: {int, int, int}]\n" + 
			"        [pc: 25, full, stack: {}, locals: {int, _, int}]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183
	public void test045() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public static void main(String args[]) {\n" + 
				"		int i;\n" + 
				"		do {\n" + 
				"		} while ((i = 2) < 0);\n" + 
				"		if (i != 2) {\n" + 
				"			System.out.println(\"FAILED\");\n" + 
				"		} else {\n" + 
				"			System.out.println(\"SUCCESS\");\n" + 
				"		}\n" + 
				"	}\n" + 
				"}",
			},
		"SUCCESS");
	
		String expectedOutput =
			"  // Method descriptor #15 ([Ljava/lang/String;)V\n" + 
			"  // Stack: 2, Locals: 2\n" + 
			"  public static void main(java.lang.String[] args);\n" + 
			"     0  iconst_2\n" + 
			"     1  dup\n" + 
			"     2  istore_1 [i]\n" + 
			"     3  iflt 0\n" + 
			"     6  iload_1 [i]\n" + 
			"     7  iconst_2\n" + 
			"     8  if_icmpeq 22\n" + 
			"    11  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
			"    14  ldc <String \"FAILED\"> [22]\n" + 
			"    16  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" + 
			"    19  goto 30\n" + 
			"    22  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
			"    25  ldc <String \"SUCCESS\"> [30]\n" + 
			"    27  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" + 
			"    30  return\n" + 
			"      Line numbers:\n" + 
			"        [pc: 0, line: 5]\n" + 
			"        [pc: 3, line: 4]\n" + 
			"        [pc: 6, line: 6]\n" + 
			"        [pc: 11, line: 7]\n" + 
			"        [pc: 19, line: 8]\n" + 
			"        [pc: 22, line: 9]\n" + 
			"        [pc: 30, line: 11]\n" + 
			"      Local variable table:\n" + 
			"        [pc: 0, pc: 31] local: args index: 0 type: java.lang.String[]\n" + 
			"        [pc: 3, pc: 31] local: i index: 1 type: int\n" + 
			"      Stack map table: number of frames 3\n" + 
			"        [pc: 0, same]\n" + 
			"        [pc: 22, append: {int}]\n" + 
			"        [pc: 30, same]\n";
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
	}
	// 298250
	public void test046() {
		Map customOptions = getCompilerOptions();
		customOptions.put(JavaCore.COMPILER_PB_UNUSED_PRIVATE_MEMBER, JavaCore.IGNORE);
		this.runNegativeTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	class E1 extends RuntimeException {\n" + 
				"		private static final long serialVersionUID = 1L;\n" + 
				"	}\n" + 
				"	static Object bar() {\n" + 
				"		return new Object() {\n" + 
				"			public void foo() {\n" + 
				"				if (condition())\n" + 
				"					throw new E1();\n" + 
				"			}\n" + 
				"		};\n" + 
				"	}\n" + 
				"	static boolean condition() {\n" + 
				"		return false;\n" + 
				"	}\n" + 
				"	public static void main(String[] args) {\n" + 
				"	}\n" + 
				"}\n" + 
				"",
			},
			"----------\n" + 
			"1. ERROR in X.java (at line 9)\n" + 
			"	throw new E1();\n" + 
			"	      ^^^^^^^^\n" + 
			"No enclosing instance of type X is accessible. Must qualify the allocation with an enclosing instance of type X (e.g. x.new A() where x is an instance of X).\n" + 
			"----------\n",
			null,
			true,
			customOptions);
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324848
	public void test047() {
		this.runNegativeTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	public static void test() {\n" + 
				"		final boolean x = true;\n" + 
				"		new Runnable() {\n" + 
				"			@Override\n" + 
				"			public void run() {\n" + 
				"				synchronized (X.this) {\n" + 
				"					System.out.println(x);\n" + 
				"				}\n" + 
				"			}\n" + 
				"		};\n" + 
				"	}\n" + 
				"}"
			},
			"----------\n" + 
			"1. ERROR in X.java (at line 7)\n" + 
			"	synchronized (X.this) {\n" + 
			"	              ^^^^^^\n" + 
			"No enclosing instance of the type X is accessible in scope\n" + 
			"----------\n");
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=351653
	public void test048() {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"    public static void main(String[] p) {\n" +
				"        int i;\n" +
				"        try {\n" +
				"          if (p == null || p == null)\n" +
				"            return;\n" +
				"          i = 0;\n" +
				"        } finally {\n" +
				"            i = 0;\n" +
				"        }\n" +
				"    }\n" +
				"}\n"
			},
			"");
	}
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=351653
	public void test049() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.io.IOException;\n" + 
				"import java.io.InputStream;\n" + 
				"\n" + 
				"public class X implements Runnable {\n" + 
				"\n" + 
				"	private boolean contentEquals(final String src, final String tar)\n" + 
				"			throws IOException {\n" + 
				"		if (src == null && tar == null) {\n" + 
				"			return true;\n" + 
				"		}\n" + 
				"		if (!isFile(src) || !isFile(tar))\n" + 
				"			throw new IOException(\"cannot compare non-files\");\n" + 
				"		if (size(src) != size(tar))\n" + 
				"			return false;\n" + 
				"		final byte[] baSrc = new byte[8192];\n" + 
				"		final byte[] baTar = new byte[baSrc.length];\n" + 
				"		int lrSrc;\n" + 
				"		int lrTar;\n" + 
				"		InputStream isSrc = null;\n" + 
				"		InputStream isTar = null;\n" + 
				"		try {\n" + 
				"			isSrc = newInputStream(src);\n" + 
				"			if (isSrc == null)\n" + 
				"				return false;\n" + 
				"			isTar = newInputStream(tar);\n" + 
				"			if (isTar == null)\n" + 
				"				return false;\n" + 
				"			do {\n" + 
				"				lrSrc = isSrc.read(baSrc);\n" + 
				"				lrTar = isTar.read(baTar);\n" + 
				"				if (lrSrc != lrTar)\n" + 
				"					return false;\n" + 
				"				for (int i = 0; i < lrSrc; i++)\n" + 
				"					if (baSrc[i] != baTar[i])\n" + 
				"						return false;\n" + 
				"			} while ((lrSrc >= 0) && (lrSrc == lrTar));\n" + 
				"		} finally {\n" + 
				"			try {\n" + 
				"				close(isSrc);\n" + 
				"			} finally {\n" + 
				"				close(isTar);\n" + 
				"			}\n" + 
				"		}\n" + 
				"		return true;\n" + 
				"	}\n" + 
				"	private void close(final InputStream isSrc) {\n" + 
				"	}\n" + 
				"	private boolean isFile(final String src) {\n" + 
				"		return false;\n" + 
				"	}\n" + 
				"	public void run() {\n" + 
				"		try {\n" + 
				"			System.out.println(contentEquals(null, null));\n" + 
				"		} catch (final IOException e) {\n" + 
				"			e.printStackTrace();\n" + 
				"		}\n" + 
				"	}\n" +
				"	static InputStream newInputStream(String path) {\n" +
				"		return null;\n" +
				"	}\n" + 
				"	static int size(String path) {\n" +
				"		return 0;\n" +
				"	}\n" + 
				"	public static void main(final String[] args) {\n" + 
				"		new X().run();\n" + 
				"	}\n" + 
				"}"
			},
			"true");
	}
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=352145
	public void test050() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.io.File;\n" + 
				"import java.io.FileFilter;\n" + 
				"import java.io.FileNotFoundException;\n" + 
				"import java.io.IOException;\n" + 
				"import java.util.ArrayList;\n" + 
				"import java.util.List;\n" + 
				"\n" + 
				"public class X {\n" + 
				"\n" + 
				"	public static final List<File> copyDir(List<File> lf,\n" + 
				"			final boolean overwrite, final boolean recursive,\n" + 
				"			final boolean returnSrc, final File src, final File tar,\n" + 
				"			final FileFilter filter) throws IOException {\n" + 
				"		if (!src.isDirectory())\n" + 
				"			throw new FileNotFoundException(\"not a directory: \" + src);\n" + 
				"		if (!tar.isDirectory())\n" + 
				"			throw new FileNotFoundException(\"not a directory: \" + tar);\n" + 
				"		final File[] fa = src.listFiles();\n" + 
				"		if (fa == null)\n" + 
				"			throw new FileNotFoundException(\"directory not accessible: \" + src);\n" + 
				"		if (lf == null)\n" + 
				"			lf = new ArrayList<File>(fa.length);\n" + 
				"		for (final File f : fa) {\n" + 
				"			final File right = new File(tar, f.getName());\n" + 
				"			if (f.isDirectory()) {\n" + 
				"				if (recursive && filter.accept(f)) {\n" + 
				"					if (!right.exists())\n" + 
				"						right.mkdir();\n" + 
				"					copyDir(lf, overwrite, recursive, returnSrc, f, right,\n" + 
				"							filter);\n" + 
				"				}\n" + 
				"			} else {\n" + 
				"				if (overwrite || (!right.exists() && filter.accept(f))) {\n" + 
				"					lf.add(returnSrc ? f : right);\n" + 
				"				}\n" + 
				"			}\n" + 
				"		}\n" + 
				"		return lf;\n" + 
				"	}\n" + 
				"\n" + 
				"	public static void main(final String[] args) {\n" + 
				"		System.out.println(\"SUCCESS\");\n" + 
				"	}\n" + 
				"\n" + 
				"}"
			},
			"SUCCESS");
	}
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=352145
	public void test051() {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.io.File;\n" + 
				"import java.io.IOException;\n" + 
				"import java.util.List;\n" + 
				"\n" + 
				"public class X {\n" + 
				"\n" + 
				"	public static final List<File> copyDir(int j, List<File> lf,\n" + 
				"			final boolean returnSrc, final File[] fa) throws IOException {\n" + 
				"		if (lf == null)\n" + 
				"			lf = null;\n" + 
				"		for (int i = 0, max = fa.length; i < max; i++) {\n" + 
				"			final File f = fa[i];\n" + 
				"			final File right = new File(f.getName());\n" + 
				"			if (f.isDirectory()) {\n" + 
				"			} else {\n" + 
				"				lf.add(returnSrc ? f : right);\n" + 
				"			}\n" + 
				"		}\n" + 
				"		return lf;\n" + 
				"	}\n" + 
				"\n" + 
				"	public static void main(final String[] args) {\n" + 
				"		System.out.println(\"SUCCESS\");\n" + 
				"	}\n" + 
				"\n" + 
				"}"
			},
			"SUCCESS");
	}
	public void test052() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"	X(int i) {}\n" +
				"	void foo() {}\n" +
				"	public static void main(String[] args) {\n" +
				"		new X(args.length == 2 ? 1 : 2).foo();\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"	}\n" +
				"}",
			},
			"SUCCESS");
	}
	// 352665
	public void test053() {
		Map customOptions = getCompilerOptions();
		customOptions.put(JavaCore.COMPILER_PB_UNUSED_PRIVATE_MEMBER, JavaCore.IGNORE);
		customOptions.put(JavaCore.COMPILER_PB_SYNTHETIC_ACCESS_EMULATION, JavaCore.IGNORE);
		this.runNegativeTest(
			new String[] {
				"X.java",
				"public class X {\n" + 
				"	static {\n" + 
				"		for(int i = 0; i < 10; i++){\n" + 
				"			A a = new A();\n" + 
				"			a.foo();\n" + 
				"		}\n" + 
				"	}\n" + 
				"	private class A {\n" + 
				"		private A() {\n" + 
				"		}\n" + 
				"		void foo() {}\n" + 
				"	}\n" + 
				"}",
			},
			"----------\n" + 
			"1. ERROR in X.java (at line 4)\n" + 
			"	A a = new A();\n" + 
			"	      ^^^^^^^\n" + 
			"No enclosing instance of type X is accessible. Must qualify the allocation with an enclosing instance of type X (e.g. x.new A() where x is an instance of X).\n" + 
			"----------\n",
			null,
			true,
			customOptions);
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=354052
	public void test054() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"public static void foo() {\n" +
			    "     X z;\n" +
			    "     while ((z = getObject()) != null) {\n" +
			    "         z.bar();\n" +
			    "     }\n" +
			    "	  System.out.println(\"SUCCESS\");\n" +
			    " }\n" +
			    " public void bar() {}\n" +
			    " public static X getObject() {\n" +
			    "     return null;\n" +
			    " }\n" +
				"   public static void main(String[] args) {\n"+
				"       new X().foo();\n"+
				"   }\n"+
				"}",
			},
			"SUCCESS");
	}
	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=359495
	public void testBug359495a() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"import java.util.List;\n" +
					"import java.util.concurrent.locks.Lock;\n" +
					"import java.util.Arrays;\n" +
					"import java.util.concurrent.locks.ReentrantLock;\n" +
					"public class X {\n" +
					"	public static void main(String[] args) {\n" +
					"		final Lock lock = new ReentrantLock();\n" +
					"		final List<String> strings = Arrays.asList(args);\n" +
					"		lock.lock();\n" +
					"		try{\n" +
					"			for (final String string:strings){\n" +
					"				return;\n" +
					"			}\n" +
					"			return;\n" +
					"		} finally {\n" +
					"			lock.unlock();\n" +
					"		}" +
					"	}\n" +
					"}",
				},
				"");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #15 ([Ljava/lang/String;)V\n" + 
					"  // Stack: 2, Locals: 6\n" + 
					"  public static void main(java.lang.String[] args);\n" + 
					"     0  new java.util.concurrent.locks.ReentrantLock [16]\n" + 
					"     3  dup\n" + 
					"     4  invokespecial java.util.concurrent.locks.ReentrantLock() [18]\n" + 
					"     7  astore_1 [lock]\n" + 
					"     8  aload_0 [args]\n" + 
					"     9  invokestatic java.util.Arrays.asList(java.lang.Object[]) : java.util.List [19]\n" + 
					"    12  astore_2 [strings]\n" + 
					"    13  aload_1 [lock]\n" + 
					"    14  invokeinterface java.util.concurrent.locks.Lock.lock() : void [25] [nargs: 1]\n" + 
					"    19  aload_2 [strings]\n" + 
					"    20  invokeinterface java.util.List.iterator() : java.util.Iterator [30] [nargs: 1]\n" + 
					"    25  astore 4\n" + 
					"    27  aload 4\n" + 
					"    29  invokeinterface java.util.Iterator.hasNext() : boolean [36] [nargs: 1]\n" + 
					"    34  ifeq 55\n" + 
					"    37  aload 4\n" + 
					"    39  invokeinterface java.util.Iterator.next() : java.lang.Object [42] [nargs: 1]\n" + 
					"    44  checkcast java.lang.String [46]\n" + 
					"    47  astore_3 [string]\n" + 
					"    48  aload_1 [lock]\n" + 
					"    49  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [48] [nargs: 1]\n" + 
					"    54  return\n" + 
					"    55  aload_1 [lock]\n" + 
					"    56  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [48] [nargs: 1]\n" + 
					"    61  return\n" + 
					"    62  astore 5\n" + 
					"    64  aload_1 [lock]\n" + 
					"    65  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [48] [nargs: 1]\n" + 
					"    70  aload 5\n" + 
					"    72  athrow\n" + 
					"      Exception Table:\n" + 
					"        [pc: 19, pc: 48] -> 62 when : any\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 7]\n" + 
					"        [pc: 8, line: 8]\n" + 
					"        [pc: 13, line: 9]\n" + 
					"        [pc: 19, line: 11]\n" + 
					"        [pc: 48, line: 16]\n" + 
					"        [pc: 54, line: 12]\n" + 
					"        [pc: 55, line: 16]\n" + 
					"        [pc: 61, line: 14]\n" + 
					"        [pc: 62, line: 15]\n" + 
					"        [pc: 64, line: 16]\n" + 
					"        [pc: 70, line: 17]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 73] local: args index: 0 type: java.lang.String[]\n" + 
					"        [pc: 8, pc: 73] local: lock index: 1 type: java.util.concurrent.locks.Lock\n" + 
					"        [pc: 13, pc: 73] local: strings index: 2 type: java.util.List\n" + 
					"        [pc: 48, pc: 55] local: string index: 3 type: java.lang.String\n" + 
					"      Local variable type table:\n" + 
					"        [pc: 13, pc: 73] local: strings index: 2 type: java.util.List<java.lang.String>\n" + 
					"      Stack map table: number of frames 2\n" + 
					"        [pc: 55, append: {java.util.concurrent.locks.Lock, java.util.List}]\n" + 
					"        [pc: 62, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" ;

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=359495
	public void testBug359495b() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"import java.util.List;\n" +
					"import java.util.Iterator;\n" +
					"import java.util.concurrent.locks.Lock;\n" +
					"import java.util.Arrays;\n" +
					"import java.util.concurrent.locks.ReentrantLock;\n" +
					"public class X {\n" +
					"	public static void main(String[] args) {\n" +
					"		final Lock lock = new ReentrantLock();\n" +
					"		final List<String> strings = Arrays.asList(args);\n" +
					"		lock.lock();\n" +
					"		try{\n" +
					"			for (Iterator i = strings.iterator(); i.hasNext();){\n" +
					"				return;\n" +
					"			}\n" +
					"			return;\n" +
					"		} finally {\n" +
					"			lock.unlock();\n" +
					"		}" +
					"	}\n" +
					"}",
				},
				"");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #15 ([Ljava/lang/String;)V\n" + 
					"  // Stack: 2, Locals: 5\n" + 
					"  public static void main(java.lang.String[] args);\n" + 
					"     0  new java.util.concurrent.locks.ReentrantLock [16]\n" + 
					"     3  dup\n" + 
					"     4  invokespecial java.util.concurrent.locks.ReentrantLock() [18]\n" + 
					"     7  astore_1 [lock]\n" + 
					"     8  aload_0 [args]\n" + 
					"     9  invokestatic java.util.Arrays.asList(java.lang.Object[]) : java.util.List [19]\n" + 
					"    12  astore_2 [strings]\n" + 
					"    13  aload_1 [lock]\n" + 
					"    14  invokeinterface java.util.concurrent.locks.Lock.lock() : void [25] [nargs: 1]\n" + 
					"    19  aload_2 [strings]\n" + 
					"    20  invokeinterface java.util.List.iterator() : java.util.Iterator [30] [nargs: 1]\n" + 
					"    25  astore_3 [i]\n" + 
					"    26  aload_3 [i]\n" + 
					"    27  invokeinterface java.util.Iterator.hasNext() : boolean [36] [nargs: 1]\n" + 
					"    32  ifeq 42\n" + 
					"    35  aload_1 [lock]\n" + 
					"    36  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [42] [nargs: 1]\n" + 
					"    41  return\n" + 
					"    42  aload_1 [lock]\n" + 
					"    43  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [42] [nargs: 1]\n" + 
					"    48  return\n" + 
					"    49  astore 4\n" + 
					"    51  aload_1 [lock]\n" + 
					"    52  invokeinterface java.util.concurrent.locks.Lock.unlock() : void [42] [nargs: 1]\n" + 
					"    57  aload 4\n" + 
					"    59  athrow\n" + 
					"      Exception Table:\n" + 
					"        [pc: 19, pc: 35] -> 49 when : any\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 8]\n" + 
					"        [pc: 8, line: 9]\n" + 
					"        [pc: 13, line: 10]\n" + 
					"        [pc: 19, line: 12]\n" + 
					"        [pc: 35, line: 17]\n" + 
					"        [pc: 41, line: 13]\n" + 
					"        [pc: 42, line: 17]\n" + 
					"        [pc: 48, line: 15]\n" + 
					"        [pc: 49, line: 16]\n" + 
					"        [pc: 51, line: 17]\n" + 
					"        [pc: 57, line: 18]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 60] local: args index: 0 type: java.lang.String[]\n" + 
					"        [pc: 8, pc: 60] local: lock index: 1 type: java.util.concurrent.locks.Lock\n" + 
					"        [pc: 13, pc: 60] local: strings index: 2 type: java.util.List\n" + 
					"        [pc: 26, pc: 42] local: i index: 3 type: java.util.Iterator\n" + 
					"      Local variable type table:\n" + 
					"        [pc: 13, pc: 60] local: strings index: 2 type: java.util.List<java.lang.String>\n" + 
					"      Stack map table: number of frames 2\n" + 
					"        [pc: 42, append: {java.util.concurrent.locks.Lock, java.util.List}]\n" + 
					"        [pc: 49, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=362591
	public void test055() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" + 
					"	public static void main(String[] args) {\n" + 
					"		testError(3, 4, \"d\");\n" + 
					"	}\n" + 
					"	public static void testError(Number n0, Number n1, String refValue) {\n" + 
					"		Number result = refValue.equals(\"ttt\") ? n0 : (n1 == null ? null : n1.intValue());\n" + 
					"		System.out.println(String.valueOf(result));\n" + 
					"	}\n" + 
					"}",
				},
				"4");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
				"  // Method descriptor #27 (Ljava/lang/Number;Ljava/lang/Number;Ljava/lang/String;)V\n" + 
				"  // Stack: 2, Locals: 4\n" + 
				"  public static void testError(java.lang.Number n0, java.lang.Number n1, java.lang.String refValue);\n" + 
				"     0  aload_2 [refValue]\n" + 
				"     1  ldc <String \"ttt\"> [30]\n" + 
				"     3  invokevirtual java.lang.String.equals(java.lang.Object) : boolean [32]\n" + 
				"     6  ifeq 13\n" + 
				"     9  aload_0 [n0]\n" + 
				"    10  goto 28\n" + 
				"    13  aload_1 [n1]\n" + 
				"    14  ifnonnull 21\n" + 
				"    17  aconst_null\n" + 
				"    18  goto 28\n" + 
				"    21  aload_1 [n1]\n" + 
				"    22  invokevirtual java.lang.Number.intValue() : int [38]\n" + 
				"    25  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [16]\n" + 
				"    28  astore_3 [result]\n" + 
				"    29  getstatic java.lang.System.out : java.io.PrintStream [44]\n" + 
				"    32  aload_3 [result]\n" + 
				"    33  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [50]\n" + 
				"    36  invokevirtual java.io.PrintStream.println(java.lang.String) : void [53]\n" + 
				"    39  return\n" + 
				"      Line numbers:\n" + 
				"        [pc: 0, line: 6]\n" + 
				"        [pc: 29, line: 7]\n" + 
				"        [pc: 39, line: 8]\n" + 
				"      Local variable table:\n" + 
				"        [pc: 0, pc: 40] local: n0 index: 0 type: java.lang.Number\n" + 
				"        [pc: 0, pc: 40] local: n1 index: 1 type: java.lang.Number\n" + 
				"        [pc: 0, pc: 40] local: refValue index: 2 type: java.lang.String\n" + 
				"        [pc: 29, pc: 40] local: result index: 3 type: java.lang.Number\n" + 
				"      Stack map table: number of frames 3\n" + 
				"        [pc: 13, same]\n" + 
				"        [pc: 21, same]\n" + 
				"        [pc: 28, same_locals_1_stack_item, stack: {java.lang.Number}]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	
	public void test055a() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public static void main(String[] args) {\n" +
					"        Object o = args != null ? args : (args == null ? null : args.length);\n" +
					"    }\n" +
					"}\n",
				},
				"");
	}
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=366999
	public void test056() throws Exception {
		if (this.complianceLevel < ClassFileConstants.JDK1_7) return;
		this.runConformTest(
				new String[] {
					"X.java",
					"import java.io.BufferedReader;\n" + 
					"import java.io.Closeable;\n" + 
					"import java.io.File;\n" + 
					"import java.io.FileReader;\n" + 
					"import java.io.IOException;\n" + 
					"\n" + 
					"public class X {\n" + 
					"\n" + 
					"	static class C implements Closeable {\n" + 
					"		@Override\n" + 
					"		public void close() throws IOException {\n" + 
					"			//\n" + 
					"		}\n" + 
					"	}\n" + 
					"\n" + 
					"	int run() throws IOException {\n" + 
					"		int lcnt = 0;\n" + 
					"		try (C c = new C();) {\n" + 
					"			try (final BufferedReader br = new BufferedReader(new FileReader(\n" + 
					"					new File(\"logging.properties\")))) {\n" + 
					"				String s = null;\n" + 
					"				while ((s = br.readLine()) != null)\n" + 
					"					lcnt++;\n" + 
					"				return lcnt;\n" + 
					"			}\n" + 
					"		} finally {\n" + 
					"			System.out.println(\"read \" + lcnt + \" lines\");\n" + 
					"		}\n" + 
					"	}\n" + 
					"\n" + 
					"	public static void main(final String[] args) throws IOException {\n" + 
					"		System.out.println(\"SUCCESS\");\n" + 
					"	}\n" + 
					"}",
				},
				"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test057() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            for (;;) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n",
				},
				"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test058() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            for (;true;) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
				"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test059() throws Exception {
		this.runNegativeTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            for (;false;) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
					"----------\n" + 
					"1. WARNING in X.java (at line 4)\n" + 
					"	label1: do {\n" + 
					"	^^^^^^\n" + 
					"The label label1 is never explicitly referenced\n" + 
					"----------\n" + 
					"2. ERROR in X.java (at line 5)\n" + 
					"	for (;false;) {\n" + 
					"                s = \"\";\n" + 
					"                if (s == null) \n" + 
					"                    continue label1;\n" + 
					"            }\n" + 
					"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
					"Unreachable code\n" + 
					"----------\n" + 
					"3. ERROR in X.java (at line 10)\n" + 
					"	} while (s != null);\n" + 
					"	         ^\n" + 
					"The local variable s may not have been initialized\n" + 
						"----------\n");
	}	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test060() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            for (; 5 < 10;) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
				"SUCCESS");
	}	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test061() throws Exception {
		this.runNegativeTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        int five = 5, ten = 10;\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            for (; five < ten;) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
					"----------\n" + 
					"1. WARNING in X.java (at line 9)\n" + 
					"	continue label1;\n" + 
					"	^^^^^^^^^^^^^^^^\n" + 
					"Dead code\n" + 
					"----------\n" + 
					"2. ERROR in X.java (at line 11)\n" + 
					"	} while (s != null);\n" + 
					"	         ^\n" + 
					"The local variable s may not have been initialized\n" + 
					"----------\n");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test062() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"    public void run() {\n" +
				"        final int five = 5, ten = 10;\n" +
				"        String s;\n" +
				"        label1: do {\n" +
				"            for (; five < ten;) {\n" +
				"                s = \"\";\n" +
				"                if (s == null) \n" +
				"                    continue label1;\n" +
				"            }\n" +
				"        } while (s != null);\n" +
				"}\n" +
				"    public static void main(String [] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"    }\n" +
				"}\n"				},
			"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test063() throws Exception {
		this.runNegativeTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"    public void run() {\n" +
				"        final int five = 5, ten = 10;\n" +
				"        String s;\n" +
				"        label1: do {\n" +
				"            for (; five > ten;) {\n" +
				"                s = \"\";\n" +
				"                if (s == null) \n" +
				"                    continue label1;\n" +
				"            }\n" +
				"        } while (s != null);\n" +
				"}\n" +
				"    public static void main(String [] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"    }\n" +
				"}\n"				},
				"----------\n" + 
				"1. WARNING in X.java (at line 5)\n" + 
				"	label1: do {\n" + 
				"	^^^^^^\n" + 
				"The label label1 is never explicitly referenced\n" + 
				"----------\n" + 
				"2. ERROR in X.java (at line 6)\n" + 
				"	for (; five > ten;) {\n" + 
				"                s = \"\";\n" + 
				"                if (s == null) \n" + 
				"                    continue label1;\n" + 
				"            }\n" + 
				"	                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
				"Unreachable code\n" + 
				"----------\n" + 
				"3. ERROR in X.java (at line 11)\n" + 
				"	} while (s != null);\n" + 
				"	         ^\n" + 
				"The local variable s may not have been initialized\n" + 
				"----------\n");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test064() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            while (true) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n",
				},
				"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test065() throws Exception {
		this.runNegativeTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            while (false) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
					"----------\n" + 
					"1. WARNING in X.java (at line 4)\n" + 
					"	label1: do {\n" + 
					"	^^^^^^\n" + 
					"The label label1 is never explicitly referenced\n" + 
					"----------\n" + 
					"2. ERROR in X.java (at line 5)\n" + 
					"	while (false) {\n" + 
					"                s = \"\";\n" + 
					"                if (s == null) \n" + 
					"                    continue label1;\n" + 
					"            }\n" + 
					"	              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
					"Unreachable code\n" + 
					"----------\n" + 
					"3. ERROR in X.java (at line 10)\n" + 
					"	} while (s != null);\n" + 
					"	         ^\n" + 
					"The local variable s may not have been initialized\n" + 
					"----------\n");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test066() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            while(5 < 10) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
				"SUCCESS");
	}	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test067() throws Exception {
		this.runNegativeTest(
				new String[] {
					"X.java",
					"public class X {\n" +
					"    public void run() {\n" +
					"        int five = 5, ten = 10;\n" +
					"        String s;\n" +
					"        label1: do {\n" +
					"            while (five < ten) {\n" +
					"                s = \"\";\n" +
					"                if (s == null) \n" +
					"                    continue label1;\n" +
					"            }\n" +
					"        } while (s != null);\n" +
					"}\n" +
					"    public static void main(String [] args) {\n" +
					"		System.out.println(\"SUCCESS\");\n" +
					"    }\n" +
					"}\n"				},
					"----------\n" + 
					"1. WARNING in X.java (at line 9)\n" + 
					"	continue label1;\n" + 
					"	^^^^^^^^^^^^^^^^\n" + 
					"Dead code\n" + 
					"----------\n" + 
					"2. ERROR in X.java (at line 11)\n" + 
					"	} while (s != null);\n" + 
					"	         ^\n" + 
					"The local variable s may not have been initialized\n" + 
					"----------\n");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test068() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"    public void run() {\n" +
				"        final int five = 5, ten = 10;\n" +
				"        String s;\n" +
				"        label1: do {\n" +
				"            while (five < ten) {\n" +
				"                s = \"\";\n" +
				"                if (s == null) \n" +
				"                    continue label1;\n" +
				"            }\n" +
				"        } while (s != null);\n" +
				"}\n" +
				"    public static void main(String [] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"    }\n" +
				"}\n"				},
			"SUCCESS");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test069() throws Exception {
		this.runNegativeTest(
			new String[] {
				"X.java",
				"public class X {\n" +
				"    public void run() {\n" +
				"        final int five = 5, ten = 10;\n" +
				"        String s;\n" +
				"        label1: do {\n" +
				"            while (five > ten) {\n" +
				"                s = \"\";\n" +
				"                if (s == null) \n" +
				"                    continue label1;\n" +
				"            }\n" +
				"        } while (s != null);\n" +
				"}\n" +
				"    public static void main(String [] args) {\n" +
				"		System.out.println(\"SUCCESS\");\n" +
				"    }\n" +
				"}\n"				},
				"----------\n" + 
				"1. WARNING in X.java (at line 5)\n" + 
				"	label1: do {\n" + 
				"	^^^^^^\n" + 
				"The label label1 is never explicitly referenced\n" + 
				"----------\n" + 
				"2. ERROR in X.java (at line 6)\n" + 
				"	while (five > ten) {\n" + 
				"                s = \"\";\n" + 
				"                if (s == null) \n" + 
				"                    continue label1;\n" + 
				"            }\n" + 
				"	                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
				"Unreachable code\n" + 
				"----------\n" + 
				"3. ERROR in X.java (at line 11)\n" + 
				"	} while (s != null);\n" + 
				"	         ^\n" + 
				"The local variable s may not have been initialized\n" + 
				"----------\n");
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023
	public void test070() throws Exception {
		this.runConformTest(
			new String[] {
				"X.java",
				"import java.util.ArrayList;\n" +
				"import java.util.Arrays;\n" +
				"import java.util.Iterator;\n" +
				"import java.util.List;\n" +
				"import java.util.Properties;\n" +
				"import org.w3c.dom.*;\n" +
				"public class X extends Object {\n" +
				"        public static void main(String [] args) {\n" +
				"            System.out.println (\"SUCCESS\");\n" +
				"        }\n" +
				"	private static class Handler extends Object {\n" +
				"		public int getStuff() {\n" +
				"			return 1;\n" +
				"		}\n" +
				"		public void handle(Element element) {\n" +
				"			Properties properties = new Properties();\n" +
				"			NamedNodeMap atts = element.getAttributes();\n" +
				"			if (atts != null) {\n" +
				"				for (int a = 0; a < atts.getLength(); a++) {\n" +
				"					Node att = atts.item(a);\n" +
				"					String name = att.getNodeName();\n" +
				"					String value = att.getNodeValue();\n" +
				"					if (\"foo\".equals(name)) {\n" +
				"						name = value;\n" +
				"					} else {\n" +
				"						if (!\"bar\".equals(name))\n" +
				"							continue;\n" +
				"						name = value;\n" +
				"					}\n" +
				"					properties.put(name, value);\n" +
				"				}\n" +
				"			}\n" +
				"			label0: do {\n" +
				"				Node node;\n" +
				"				String nodeName;\n" +
				"				label1: do {\n" +
				"					for (Iterator i = (new ArrayList(1)).iterator(); i\n" +
				"							.hasNext(); members.add(equals(node))) {\n" +
				"						node = (Node) i.next();\n" +
				"						nodeName = \"\" + equals(node.getNodeName());\n" +
				"						if (!\"foo\".equals(nodeName))\n" +
				"							continue label1;\n" +
				"					}\n" +
				"					break label0;\n" +
				"				} while (!\"bar\".equals(nodeName));\n" +
				"				Iterator i = (new ArrayList(1)).iterator();\n" +
				"				while (i.hasNext()) {\n" +
				"					Node n = (Node) i.next();\n" +
				"					String name = toString() + n.getNodeName();\n" +
				"					if (\"wtf\".equals(name)) {\n" +
				"						String propertyName = (toString() + n.getAttributes()\n" +
				"								.getNamedItem(\"broken\")).trim();\n" +
				"						String value = toString() + n;\n" +
				"						properties.put(propertyName, value);\n" +
				"					}\n" +
				"				}\n" +
				"			} while (true);\n" +
				"			propertiesBuilder.equals(properties);\n" +
				"			builder.equals(propertiesBuilder.hashCode());\n" +
				"			builder.equals(members);\n" +
				"		}\n" +
				"		private final Object c;\n" +
				"		private Object builder;\n" +
				"		private List members;\n" +
				"		private Object propertiesBuilder;\n" +
				"		public Handler(Object c) {\n" +
				"			this.c = c;\n" +
				"			builder = Arrays.asList(Object.class);\n" +
				"			builder.equals(\"foo\");\n" +
				"			builder.equals(\"bar\");\n" +
				"			members = new ArrayList();\n" +
				"			propertiesBuilder = Arrays.asList(Object.class);\n" +
				"			Object beanDefinition = propertiesBuilder.toString();\n" +
				"			Object holder = new String(\"stirng\");\n" +
				"			Arrays.asList(holder, c.toString());\n" +
				"		}\n" +
				"	}\n" +
				"	public X() {\n" +
				"	}\n" +
				"	protected Object parseInternal(Element element, Object c) {\n" +
				"		Handler h = new Handler(c);\n" +
				"		h.handle(element);\n" +
				"		return h.getStuff();\n" +
				"	}\n" +
				"}\n"
				},
				"SUCCESS");
	}
	
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380313
	// Verify the generated code does not have same branch target for the 2 return statements
	public void testBug380313() throws Exception {
		this.runConformTest(
				new String[] {
						"X.java",
						"public class X {\n" +
						"public void foo() throws Exception {\n" + 
						"        int i = 1;\n" + 
						"        try {\n" + 
						"            if (i == 1) {\n" + 
						"                int n = bar();\n" + 
						"                if (n == 35)\n" + 
						"                   return;\n" + 
						"            } else {\n" + 
						"                throw new Exception();\n" + 
						"            }\n" + 
						"            if (i == 0)\n" + 
						"               return;\n" + 
						"        } finally {\n" + 
						"            bar();\n" + 
						"        }\n" + 
						"    }\n" + 
						"\n" + 
						"    private int bar() {\n" + 
						"        return 0;\n" + 
						"    }\n" + 
						"\n" + 
						"    public static void main(String[] args) {\n" +
						"		System.out.println(\"SUCCESS\");\n" + 
						"    }\n" +
						"}\n"
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String xBarCall = isMinimumCompliant(ClassFileConstants.JDK11) ?
					"invokevirtual X.bar() : int [18]\n" : "invokespecial X.bar() : int [18]\n";
			String expectedOutput =
					"  // Method descriptor #6 ()V\n" + 
					"  // Stack: 2, Locals: 4\n" + 
					"  public void foo() throws java.lang.Exception;\n" + 
					"     0  iconst_1\n" + 
					"     1  istore_1 [i]\n" + 
					"     2  iload_1 [i]\n" + 
					"     3  iconst_1\n" + 
					"     4  if_icmpne 24\n" + 
					"     7  aload_0 [this]\n" + 
					"     8  " + xBarCall + 
					"    11  istore_2 [n]\n" + 
					"    12  iload_2 [n]\n" + 
					"    13  bipush 35\n" + 
					"    15  if_icmpne 32\n" + 
					"    18  aload_0 [this]\n" + 
					"    19  " + xBarCall + 
					"    22  pop\n" + 
					"    23  return\n" + 
					"    24  new java.lang.Exception [16]\n" + 
					"    27  dup\n" + 
					"    28  invokespecial java.lang.Exception() [22]\n" + 
					"    31  athrow\n" + 
					"    32  iload_1 [i]\n" + 
					"    33  ifne 50\n" + 
					"    36  aload_0 [this]\n" + 
					"    37  " + xBarCall + 
					"    40  pop\n" + 
					"    41  return\n" + 
					"    42  astore_3\n" + 
					"    43  aload_0 [this]\n" + 
					"    44  " + xBarCall + 
					"    47  pop\n" + 
					"    48  aload_3\n" + 
					"    49  athrow\n" + 
					"    50  aload_0 [this]\n" + 
					"    51  " + xBarCall + 
					"    54  pop\n" + 
					"    55  return\n" + 
					"      Exception Table:\n" + 
					"        [pc: 2, pc: 18] -> 42 when : any\n" + 
					"        [pc: 24, pc: 36] -> 42 when : any\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 3]\n" + 
					"        [pc: 2, line: 5]\n" + 
					"        [pc: 7, line: 6]\n" + 
					"        [pc: 12, line: 7]\n" + 
					"        [pc: 18, line: 15]\n" + 
					"        [pc: 23, line: 8]\n" + 
					"        [pc: 24, line: 10]\n" + 
					"        [pc: 32, line: 12]\n" + 
					"        [pc: 36, line: 15]\n" + 
					"        [pc: 41, line: 13]\n" + 
					"        [pc: 42, line: 14]\n" + 
					"        [pc: 43, line: 15]\n" + 
					"        [pc: 48, line: 16]\n" + 
					"        [pc: 50, line: 15]\n" + 
					"        [pc: 55, line: 17]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 56] local: this index: 0 type: X\n" + 
					"        [pc: 2, pc: 56] local: i index: 1 type: int\n" + 
					"        [pc: 12, pc: 24] local: n index: 2 type: int\n" + 
					"      Stack map table: number of frames 4\n" + 
					"        [pc: 24, append: {int}]\n" + 
					"        [pc: 32, same]\n" + 
					"        [pc: 42, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
					"        [pc: 50, same]\n";
			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380313
	// Verify the generated code does not have same branch target for the 2 return statements
	public void testBug380313b() throws Exception {
		if (this.complianceLevel < ClassFileConstants.JDK1_7)
			return;
		this.runConformTest(
				new String[] {
						"X.java",
						"import java.io.FileInputStream;\n" +
						"import java.io.IOException;\n" +
						"public class X {\n" +
						"public void foo() throws Exception {\n" + 
						"        int i = 1;\n" + 
						"        try {\n" + 
						"            try (FileInputStream fis = new FileInputStream(\"\")) {\n" +
						"				 if (i == 2)" + 
						"                	return;\n" + 
						" 			 }\n" + 
						"            if (i == 35) \n" + 
						"                return;\n" + 
						"        } catch(IOException e) {\n" + 
						"            bar();\n" + 
						"        } finally {\n" + 
						"            bar();\n" + 
						"        }\n" + 
						"    }\n" + 
						"\n" + 
						"    private int bar() {\n" + 
						"        return 0;\n" + 
						"    }\n" + 
						"\n" + 
						"    public static void main(String[] args) {\n" +
						"		System.out.println(\"SUCCESS\");\n" + 
						"    }\n" +
						"}\n"
					}, 
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String xBarCall = (isMinimumCompliant(ClassFileConstants.JDK11) ?
					"invokevirtual" : "invokespecial") + " X.bar() : int [28]\n";
			String expectedOutput =
					"  // Method descriptor #6 ()V\n" + 
					"  // Stack: 3, Locals: 6\n" + 
					"  public void foo() throws java.lang.Exception;\n" + 
					"      0  iconst_1\n" + 
					"      1  istore_1 [i]\n" + 
					"      2  aconst_null\n" + 
					"      3  astore_2\n" + 
					"      4  aconst_null\n" + 
					"      5  astore_3\n" + 
					"      6  new java.io.FileInputStream [18]\n" + 
					"      9  dup\n" + 
					"     10  ldc <String \"\"> [20]\n" + 
					"     12  invokespecial java.io.FileInputStream(java.lang.String) [22]\n" + 
					"     15  astore 4 [fis]\n" + 
					"     17  iload_1 [i]\n" + 
					"     18  iconst_2\n" + 
					"     19  if_icmpne 38\n" + 
					"     22  aload 4 [fis]\n" + 
					"     24  ifnull 32\n" + 
					"     27  aload 4 [fis]\n" + 
					"     29  invokevirtual java.io.FileInputStream.close() : void [25]\n" + 
					"     32  aload_0 [this]\n" + // return 1
					"     33  " + xBarCall + 
					"     36  pop\n" + 
					"     37  return\n" + 
					"     38  aload 4 [fis]\n" + 
					"     40  ifnull 86\n" + 
					"     43  aload 4 [fis]\n" + 
					"     45  invokevirtual java.io.FileInputStream.close() : void [25]\n" + 
					"     48  goto 86\n" + 
					"     51  astore_2\n" + 
					"     52  aload 4 [fis]\n" + 
					"     54  ifnull 62\n" + 
					"     57  aload 4 [fis]\n" + 
					"     59  invokevirtual java.io.FileInputStream.close() : void [25]\n" + 
					"     62  aload_2\n" + 
					"     63  athrow\n" + 
					"     64  astore_3\n" + 
					"     65  aload_2\n" + 
					"     66  ifnonnull 74\n" + 
					"     69  aload_3\n" + 
					"     70  astore_2\n" + 
					"     71  goto 84\n" + 
					"     74  aload_2\n" + 
					"     75  aload_3\n" + 
					"     76  if_acmpeq 84\n" + 
					"     79  aload_2\n" + 
					"     80  aload_3\n" + 
					"     81  invokevirtual java.lang.Throwable.addSuppressed(java.lang.Throwable) : void [32]\n" + 
					"     84  aload_2\n" + 
					"     85  athrow\n" + 
					"     86  iload_1 [i]\n" + 
					"     87  bipush 35\n" + 
					"     89  if_icmpne 122\n" + 
					"     92  aload_0 [this]\n" + 	// return 2
					"     93  " + xBarCall + 
					"     96  pop\n" + 
					"     97  return\n" + 
					"     98  astore_2 [e]\n" + 
					"     99  aload_0 [this]\n" + 
					"    100  " + xBarCall + 
					"    103  pop\n" + 
					"    104  aload_0 [this]\n" + 
					"    105  " + xBarCall + 
					"    108  pop\n" + 
					"    109  goto 127\n" + 
					"    112  astore 5\n" + 
					"    114  aload_0 [this]\n" + 
					"    115  " + xBarCall + 
					"    118  pop\n" + 
					"    119  aload 5\n" + 
					"    121  athrow\n" + 
					"    122  aload_0 [this]\n" + 
					"    123  " + xBarCall + 
					"    126  pop\n" + 
					"    127  return\n" + 
					"      Exception Table:\n" + 
					"        [pc: 17, pc: 22] -> 51 when : any\n" + 
					"        [pc: 6, pc: 32] -> 64 when : any\n" +
					"        [pc: 38, pc: 64] -> 64 when : any\n" +
					"        [pc: 2, pc: 32] -> 98 when : java.io.IOException\n" + 
					"        [pc: 38, pc: 92] -> 98 when : java.io.IOException\n" + 
					"        [pc: 2, pc: 32] -> 112 when : any\n" + 
					"        [pc: 38, pc: 92] -> 112 when : any\n" + 
					"        [pc: 98, pc: 104] -> 112 when : any\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 5]\n" + 
					"        [pc: 2, line: 7]\n" + 
					"        [pc: 17, line: 8]\n" + 
					"        [pc: 22, line: 9]\n" + 
					"        [pc: 32, line: 15]\n" + 
					"        [pc: 37, line: 8]\n" + 
					"        [pc: 38, line: 9]\n" + 
					"        [pc: 86, line: 10]\n" + 
					"        [pc: 92, line: 15]\n" + 
					"        [pc: 97, line: 11]\n" + 
					"        [pc: 98, line: 12]\n" + 
					"        [pc: 99, line: 13]\n" + 
					"        [pc: 104, line: 15]\n" + 
					"        [pc: 112, line: 14]\n" + 
					"        [pc: 114, line: 15]\n" + 
					"        [pc: 119, line: 16]\n" + 
					"        [pc: 122, line: 15]\n" + 
					"        [pc: 127, line: 17]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 128] local: this index: 0 type: X\n" + 
					"        [pc: 2, pc: 128] local: i index: 1 type: int\n" + 
					"        [pc: 17, pc: 62] local: fis index: 4 type: java.io.FileInputStream\n" + 
					"        [pc: 99, pc: 104] local: e index: 2 type: java.io.IOException\n" + 
					"      Stack map table: number of frames 12\n" + 
					"        [pc: 32, full, stack: {}, locals: {X, int, java.lang.Throwable, java.lang.Throwable, java.io.FileInputStream}]\n" + 
					"        [pc: 38, same]\n" + 
					"        [pc: 51, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
					"        [pc: 62, chop 1 local(s)]\n" + 
					"        [pc: 64, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
					"        [pc: 74, same]\n" + 
					"        [pc: 84, same]\n" + 
					"        [pc: 86, chop 2 local(s)]\n" + 
					"        [pc: 98, same_locals_1_stack_item, stack: {java.io.IOException}]\n" + 
					"        [pc: 112, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
					"        [pc: 122, same]\n" + 
					"        [pc: 127, same]\n";
			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
	// Verify the reduced range of locals.
	public void testBug380927() throws Exception {
		this.runConformTest(
				new String[] {
						"X.java",
						"public class X {\n" +
						"    public final static Object f() {\n" +
						"        final Object a = null;\n" +
						"        Object b;\n" +
						"        label: do {\n" +
						"            switch (0) {\n" +
						"            case 1: {\n" +
						"                b = a;\n" +
						"            }\n" +
						"                break;\n" +
						"            default:\n" +
						"                break label;\n" +
						"            }\n" +
						"        } while (true);\n" +
						"        return a;\n" +
						"    }\n" +
						"    public static void main(final String[] args) {\n" +
						"        f();\n" +
						"        System.out.println(\"SUCCESS\");\n" +
						"    }\n" +
						"}\n"
				},
				"SUCCESS");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #15 ()Ljava/lang/Object;\n" + 
					"  // Stack: 1, Locals: 2\n" + 
					"  public static final java.lang.Object f();\n" + 
					"     0  aconst_null\n" + 
					"     1  astore_0 [a]\n" + 
					"     2  iconst_0\n" + 
					"     3  tableswitch default: 25\n" + 
					"          case 1: 20\n" + 
					"    20  aload_0 [a]\n" + 
					"    21  astore_1 [b]\n" + 
					"    22  goto 2\n" + 
					"    25  aload_0 [a]\n" + 
					"    26  areturn\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 3]\n" + 
					"        [pc: 2, line: 6]\n" + 
					"        [pc: 20, line: 8]\n" + 
					"        [pc: 22, line: 10]\n" + 
					"        [pc: 25, line: 15]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 2, pc: 27] local: a index: 0 type: java.lang.Object\n" + 
					"        [pc: 22, pc: 25] local: b index: 1 type: java.lang.Object\n" + 
					"      Stack map table: number of frames 3\n" + 
					"        [pc: 2, append: {java.lang.Object}]\n" + 
					"        [pc: 20, same]\n" + 
					"        [pc: 25, same]\n" + 
					"  \n"; 
			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	// from https://bugs.eclipse.org/bugs/show_bug.cgi?id=385593#c1
	public void test385593_1() throws Exception {
		this.runConformTest(
			new String[] {
					"stackmap/StackMapTableFormatError.java",
					"package stackmap;\n" + 
					"\n" + 
					"import java.util.Collection;\n" + 
					"import java.util.Collections;\n" + 
					"\n" + 
					"/**\n" + 
					" * If compiled with Eclipse (compiler target >= 1.6) this snippet causes the\n" + 
					" * error \"java.lang.ClassFormatError: StackMapTable format error: bad\n" + 
					" * verification type\" when executed with JaCoCo code coverage. JaCoCo seems to\n" + 
					" * get confused by unexpected stackmap frames generated by ECJ.\n" + 
					" */\n" + 
					"public class StackMapTableFormatError {\n" + 
					"\n" + 
					"	public static Object exec(Collection<Object> set, Object a,\n" + 
					"			boolean b) {\n" + 
					"		for (Object e : set) {\n" + 
					"			if (a != null && (e == null || b)) {\n" + 
					"				continue;\n" + 
					"			}\n" + 
					"			return null;\n" + 
					"		}\n" + 
					"		return null;\n" + 
					"	}\n" + 
					"	\n" + 
					"	public static void main(String[] args) {\n" + 
					"		exec(Collections.emptySet(), null, false);\n" + 
					"	}\n" + 
					"\n" + 
					"}\n"
			});

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR+File.separator+"stackmap"+File.separator+"StackMapTableFormatError.class"));
		String actualOutput =
			disassembler.disassemble(
				classFileBytes,
				"\n",
				ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
				"  // Method descriptor #15 (Ljava/util/Collection;Ljava/lang/Object;Z)Ljava/lang/Object;\n" + 
				"  // Signature: (Ljava/util/Collection<Ljava/lang/Object;>;Ljava/lang/Object;Z)Ljava/lang/Object;\n" + 
				"  // Stack: 1, Locals: 5\n" + 
				"  public static java.lang.Object exec(java.util.Collection set, java.lang.Object a, boolean b);\n" + 
				"     0  aload_0 [set]\n" + 
				"     1  invokeinterface java.util.Collection.iterator() : java.util.Iterator [18] [nargs: 1]\n" + 
				"     6  astore 4\n" + 
				"     8  goto 36\n" + 
				"    11  aload 4\n" + 
				"    13  invokeinterface java.util.Iterator.next() : java.lang.Object [24] [nargs: 1]\n" + 
				"    18  astore_3 [e]\n" + 
				"    19  aload_1 [a]\n" + 
				"    20  ifnull 34\n" + 
				"    23  aload_3 [e]\n" + 
				"    24  ifnull 36\n" + 
				"    27  iload_2 [b]\n" + 
				"    28  ifeq 34\n" + 
				"    31  goto 36\n" + 
				"    34  aconst_null\n" + 
				"    35  areturn\n" + 
				"    36  aload 4\n" + 
				"    38  invokeinterface java.util.Iterator.hasNext() : boolean [30] [nargs: 1]\n" + 
				"    43  ifne 11\n" + 
				"    46  aconst_null\n" + 
				"    47  areturn\n" + 
				"      Line numbers:\n" + 
				"        [pc: 0, line: 16]\n" + 
				"        [pc: 19, line: 17]\n" + 
				"        [pc: 31, line: 18]\n" + 
				"        [pc: 34, line: 20]\n" + 
				"        [pc: 36, line: 16]\n" + 
				"        [pc: 46, line: 22]\n" + 
				"      Local variable table:\n" + 
				"        [pc: 0, pc: 48] local: set index: 0 type: java.util.Collection\n" + 
				"        [pc: 0, pc: 48] local: a index: 1 type: java.lang.Object\n" + 
				"        [pc: 0, pc: 48] local: b index: 2 type: boolean\n" + 
				"        [pc: 19, pc: 36] local: e index: 3 type: java.lang.Object\n" + 
				"      Local variable type table:\n" + 
				"        [pc: 0, pc: 48] local: set index: 0 type: java.util.Collection<java.lang.Object>\n" + 
				"      Stack map table: number of frames 3\n" + 
				"        [pc: 11, full, stack: {}, locals: {java.util.Collection, java.lang.Object, int, _, java.util.Iterator}]\n" + 
				"        [pc: 34, full, stack: {}, locals: {java.util.Collection, java.lang.Object, int, java.lang.Object, java.util.Iterator}]\n" + 
				"        [pc: 36, full, stack: {}, locals: {java.util.Collection, java.lang.Object, int, _, java.util.Iterator}]"; 
		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}

	// from https://bugs.eclipse.org/bugs/show_bug.cgi?id=385593#c11
	public void test385593_2() throws Exception {
		this.runConformTest(
			new String[] {
					"snippet/X.java",
					"package snippet;\n" + 
					"\n" + 
					"\n" + 
					"public class X { \n" + 
					"	private void foo(boolean delete) { \n" + 
					"		 \n" + 
					"		String s = bar(); \n" + 
					"		StringBuffer buffer =new StringBuffer(); \n" + 
					"		 \n" + 
					"		try { \n" + 
					"			 \n" + 
					"			String[] datas = new String[] { \"\" }; \n" + 
					"			Object[] data= new Object[] { s }; \n" + 
					"			try { \n" + 
					"				buffer.append(datas).append(data); \n" + 
					"			} catch (Exception e) { \n" + 
					"				if (e != null) \n" + 
					"					throw e; \n" + 
					"				return; \n" + 
					"			} \n" + 
					"				 \n" + 
					"			if (delete) \n" + 
					"				buffer.delete(0, buffer.length()); \n" + 
					"			 \n" + 
					"		} catch (Exception x) { \n" + 
					"		} finally { \n" + 
					"			buffer = null; \n" + 
					"		} \n" + 
					"	} \n" + 
					"	 \n" + 
					"	String bar() { \n" + 
					"		return \"\"; \n" + 
					"	} \n" + 
					"	 \n" + 
					"	public static void main(String[] args) { \n" + 
					"		new X().foo(false); \n" + 
					"		System.out.println(\"SUCCESS\"); \n" + 
					"	} \n" + 
					"}\n"
			});

		ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
		byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR+File.separator+"snippet"+File.separator+"X.class"));
		String actualOutput =
			disassembler.disassemble(
				classFileBytes,
				"\n",
				ClassFileBytesDisassembler.DETAILED);

		String expectedOutput =
				"Stack map table: number of frames 7\n" + 
				"        [pc: 49, full, stack: {java.lang.Exception}, locals: {snippet.X, int, java.lang.String, java.lang.StringBuffer, java.lang.String[], java.lang.Object[]}]\n" + 
				"        [pc: 59, append: {java.lang.Exception}]\n" + 
				"        [pc: 62, chop 1 local(s)]\n" + 
				"        [pc: 79, full, stack: {java.lang.Exception}, locals: {snippet.X, int, java.lang.String, java.lang.StringBuffer}]\n" + 
				"        [pc: 86, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
				"        [pc: 93, same]\n" + 
				"        [pc: 95, same]\n"; 
		
		int index = actualOutput.indexOf(expectedOutput);
		if (index == -1 || expectedOutput.length() == 0) {
			System.out.println(Util.displayString(actualOutput, 2));
		}
		if (index == -1) {
			assertEquals("Wrong contents", expectedOutput, actualOutput);
		}
	}
	// from https://bugs.eclipse.org/bugs/show_bug.cgi?id=394718
	public void test394718() throws Exception {
		this.runConformTest(
			new String[] {
					"X.java",
					"public class X\n" + 
					"{\n" + 
					"	public static Boolean test() throws Exception\n" + 
					"	{\n" + 
					"		try\n" + 
					"		{\n" + 
					"			for (int i = 0; i < 1; i++)\n" + 
					"			{\n" + 
					"				long status = System.currentTimeMillis();\n" + 
					"				if (status < 0)\n" + 
					"					return false;\n" + 
					"				if (status == 1)\n" + 
					"					return false;\n" + 
					"			}\n" + 
					"			\n" + 
					"			return false;\n" + 
					"		}\n" + 
					"		finally\n" + 
					"		{\n" + 
					"			System.currentTimeMillis();\n" + 
					"		}\n" + 
					"	}\n" + 
					"	\n" + 
					"	public static void main(String[] args) throws Exception\n" + 
					"	{\n" + 
					"		System.out.print(\"Starting\");\n" + 
					"		test();\n" + 
					"		System.out.println(\"Done\");\n" + 
					"	}\n" + 
					"}"
			},
			"StartingDone");
	}
	
	// https://bugs.eclipse.org/412203
	public void testBug412203_a() throws Exception {
		if (this.complianceLevel < ClassFileConstants.JDK1_7) return; // using <>
		Map options = getCompilerOptions();
		options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
		options.put(JavaCore.COMPILER_PB_NULL_REFERENCE, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.WARNING);
		options.put(JavaCore.COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS, JavaCore.ENABLED);
		this.runConformTest(
				new String[] {
					"X2.java",
					"import java.util.*;\n" + 
					"\n" + 
					"import org.eclipse.jdt.annotation.NonNullByDefault;\n" + 
					"\n" + 
					"class Y {\n" + 
					"	public Y() { }\n" + 
					"}\n" + 
					"\n" + 
					"@NonNullByDefault\n" + 
					"abstract class X1 {\n" + 
					"\n" + 
					"	private Object a;\n" + 
					"	private Object b;\n" + 
					"	private Object c;\n" + 
					"	private Object d;\n" + 
					"	private Object e;\n" + 
					"	private Object f;\n" + 
					"\n" + 
					"	protected Object name;\n" + 
					"\n" + 
					"	@SuppressWarnings(\"null\")\n" + 
					"	protected X1() {\n" + 
					"		super ();\n" + 
					"	}\n" + 
					"\n" + 
					"}\n" + 
					"public class X2 extends X1 {\n" + 
					"\n" + 
					"\n" + 
					"	public static final int ID = 4711;\n" + 
					"\n" + 
					"	private Object x;\n" + 
					"	private Object y;\n" + 
					"	private Object z;\n" + 
					"\n" + 
					"	private Runnable runable = new Runnable () {\n" + 
					"		@Override\n" + 
					"		public void run () {\n" + 
					"			// whatever\n" + 
					"		}\n" + 
					"	};\n" + 
					"\n" + 
					"	private void init () {\n" + 
					"		final Object selector = new Object ();\n" + 
					"		this.name = new Object ();\n" + 
					"		LinkedList<Character> invalidCharactersList = new LinkedList<> ();\n" + 
					"		char[] invalidCharacters = new char[invalidCharactersList.size ()];\n" + 
					"		for (int i = 0; i < invalidCharacters.length; i++) {\n" + 
					"			invalidCharacters[i] = invalidCharactersList.get (i).charValue ();\n" + 
					"		}\n" + 
					"		Y inputVerifier = new Y();\n" + 
					"	}\n" + 
					"\n" + 
					"}\n",
				},
				"",
				getLibsWithNullAnnotations(ClassFileConstants.JDK1_7),
				true/*flush*/,
				null/*vmArgs*/,
				options,
				null/*requestor*/,
				true/*skipJavac*/);

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X2.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #16 ()V\n" + 
					"  // Stack: 4, Locals: 5\n" + 
					"  private void init();\n" + 
					"     0  new java.lang.Object [32]\n" + 
					"     3  dup\n" + 
					"     4  invokespecial java.lang.Object() [34]\n" + 
					"     7  astore_1 [selector]\n" + 
					"     8  aload_0 [this]\n" + 
					"     9  new java.lang.Object [32]\n" + 
					"    12  dup\n" + 
					"    13  invokespecial java.lang.Object() [34]\n" + 
					"    16  putfield X2.name : java.lang.Object [35]\n" + 
					"    19  new java.util.LinkedList [38]\n" + 
					"    22  dup\n" + 
					"    23  invokespecial java.util.LinkedList() [40]\n" + 
					"    26  astore_2 [invalidCharactersList]\n" + 
					"    27  aload_2 [invalidCharactersList]\n" + 
					"    28  invokevirtual java.util.LinkedList.size() : int [41]\n" + 
					"    31  newarray char [5]\n" + 
					"    33  astore_3 [invalidCharacters]\n" + 
					"    34  iconst_0\n" + 
					"    35  istore 4 [i]\n" + 
					"    37  goto 59\n" + 
					"    40  aload_3 [invalidCharacters]\n" + 
					"    41  iload 4 [i]\n" + 
					"    43  aload_2 [invalidCharactersList]\n" + 
					"    44  iload 4 [i]\n" + 
					"    46  invokevirtual java.util.LinkedList.get(int) : java.lang.Object [45]\n" + 
					"    49  checkcast java.lang.Character [49]\n" + 
					"    52  invokevirtual java.lang.Character.charValue() : char [51]\n" + 
					"    55  castore\n" + 
					"    56  iinc 4 1 [i]\n" + 
					"    59  iload 4 [i]\n" + 
					"    61  aload_3 [invalidCharacters]\n" + 
					"    62  arraylength\n" + 
					"    63  if_icmplt 40\n" + 
					"    66  new Y [55]\n" + 
					"    69  dup\n" + 
					"    70  invokespecial Y() [57]\n" + 
					"    73  astore 4 [inputVerifier]\n" + 
					"    75  return\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 44]\n" + 
					"        [pc: 8, line: 45]\n" + 
					"        [pc: 19, line: 46]\n" + 
					"        [pc: 27, line: 47]\n" + 
					"        [pc: 34, line: 48]\n" + 
					"        [pc: 40, line: 49]\n" + 
					"        [pc: 56, line: 48]\n" + 
					"        [pc: 66, line: 51]\n" + 
					"        [pc: 75, line: 52]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 76] local: this index: 0 type: X2\n" + 
					"        [pc: 8, pc: 76] local: selector index: 1 type: java.lang.Object\n" + 
					"        [pc: 27, pc: 76] local: invalidCharactersList index: 2 type: java.util.LinkedList\n" + 
					"        [pc: 34, pc: 76] local: invalidCharacters index: 3 type: char[]\n" + 
					"        [pc: 37, pc: 66] local: i index: 4 type: int\n" + 
					"        [pc: 75, pc: 76] local: inputVerifier index: 4 type: Y\n" + 
					"      Local variable type table:\n" + 
					"        [pc: 27, pc: 76] local: invalidCharactersList index: 2 type: java.util.LinkedList<java.lang.Character>\n" + 
					"      Stack map table: number of frames 2\n" + 
					"        [pc: 40, full, stack: {}, locals: {X2, java.lang.Object, java.util.LinkedList, char[], int}]\n" + 
					"        [pc: 59, same]\n";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	// https://bugs.eclipse.org/412203
	// yet simplified version - using FieldReference
	public void testBug412203_b() throws Exception {
		Map options = getCompilerOptions();
		options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
		options.put(JavaCore.COMPILER_PB_NULL_REFERENCE, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.WARNING);
		options.put(JavaCore.COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS, JavaCore.ENABLED);
		this.runConformTest(
				new String[] {
					"X2.java",
					"import java.util.LinkedList;\n" + 
					"\n" + 
					"import org.eclipse.jdt.annotation.NonNull;\n" + 
					"\n" + 
					"abstract class X1 {\n" + 
					"	protected @NonNull Object name = new Object();\n" + 
					"}\n" + 
					"\n" + 
					"public class X2 extends X1 {\n" + 
					"	void init () {\n" + 
					"		this.name = new Object ();\n" + 
					"		LinkedList<Character> l = new LinkedList<Character> ();\n" + 
					"		char[] cs = new char[l.size ()];\n" + 
					"		for (int i = 0; i < cs.length; i++) {\n" + 
					"			cs[i] = l.get (i).charValue ();\n" + 
					"		}\n" + 
					"		Object o2 = new Object();\n" + 
					"	}\n" + 
					"}\n",
				},
				"",
				getLibsWithNullAnnotations(ClassFileConstants.JDK1_7),
				true/*flush*/,
				null/*vmArgs*/,
				options,
				null/*requestor*/,
				true/*skipJavac*/);

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X2.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #6 ()V\n" + 
					"  // Stack: 4, Locals: 4\n" + 
					"  void init();\n" + 
					"     0  aload_0 [this]\n" + 
					"     1  new java.lang.Object [15]\n" + 
					"     4  dup\n" + 
					"     5  invokespecial java.lang.Object() [17]\n" + 
					"     8  putfield X2.name : java.lang.Object [18]\n" + 
					"    11  new java.util.LinkedList [22]\n" + 
					"    14  dup\n" + 
					"    15  invokespecial java.util.LinkedList() [24]\n" + 
					"    18  astore_1 [l]\n" + 
					"    19  aload_1 [l]\n" + 
					"    20  invokevirtual java.util.LinkedList.size() : int [25]\n" + 
					"    23  newarray char [5]\n" + 
					"    25  astore_2 [cs]\n" + 
					"    26  iconst_0\n" + 
					"    27  istore_3 [i]\n" + 
					"    28  goto 48\n" + 
					"    31  aload_2 [cs]\n" + 
					"    32  iload_3 [i]\n" + 
					"    33  aload_1 [l]\n" + 
					"    34  iload_3 [i]\n" + 
					"    35  invokevirtual java.util.LinkedList.get(int) : java.lang.Object [29]\n" + 
					"    38  checkcast java.lang.Character [33]\n" + 
					"    41  invokevirtual java.lang.Character.charValue() : char [35]\n" + 
					"    44  castore\n" + 
					"    45  iinc 3 1 [i]\n" + 
					"    48  iload_3 [i]\n" + 
					"    49  aload_2 [cs]\n" + 
					"    50  arraylength\n" + 
					"    51  if_icmplt 31\n" + 
					"    54  new java.lang.Object [15]\n" + 
					"    57  dup\n" + 
					"    58  invokespecial java.lang.Object() [17]\n" + 
					"    61  astore_3 [o2]\n" + 
					"    62  return\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 11]\n" + 
					"        [pc: 11, line: 12]\n" + 
					"        [pc: 19, line: 13]\n" + 
					"        [pc: 26, line: 14]\n" + 
					"        [pc: 31, line: 15]\n" + 
					"        [pc: 45, line: 14]\n" + 
					"        [pc: 54, line: 17]\n" + 
					"        [pc: 62, line: 18]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 63] local: this index: 0 type: X2\n" + 
					"        [pc: 19, pc: 63] local: l index: 1 type: java.util.LinkedList\n" + 
					"        [pc: 26, pc: 63] local: cs index: 2 type: char[]\n" + 
					"        [pc: 28, pc: 54] local: i index: 3 type: int\n" + 
					"        [pc: 62, pc: 63] local: o2 index: 3 type: java.lang.Object\n" + 
					"      Local variable type table:\n" + 
					"        [pc: 19, pc: 63] local: l index: 1 type: java.util.LinkedList<java.lang.Character>\n" + 
					"      Stack map table: number of frames 2\n" + 
					"        [pc: 31, append: {java.util.LinkedList, char[], int}]\n" + 
					"        [pc: 48, same]\n" + 
					"}";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}

	// https://bugs.eclipse.org/412203
	// yet simplified version - using SingleNameReference
	public void testBug412203_c() throws Exception {
		Map options = getCompilerOptions();
		options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
		options.put(JavaCore.COMPILER_PB_NULL_REFERENCE, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION, JavaCore.ERROR);
		options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.WARNING);
		options.put(JavaCore.COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS, JavaCore.ENABLED);
		this.runConformTest(
				new String[] {
					"X2.java",
					"import java.util.LinkedList;\n" + 
					"\n" + 
					"import org.eclipse.jdt.annotation.NonNull;\n" + 
					"\n" + 
					"abstract class X1 {\n" + 
					"	protected @NonNull Object name = new Object();\n" + 
					"}\n" + 
					"\n" + 
					"public class X2 extends X1 {\n" + 
					"	void init () {\n" + 
					"		name = new Object ();\n" + 
					"		LinkedList<Character> l = new LinkedList<Character> ();\n" + 
					"		char[] cs = new char[l.size ()];\n" + 
					"		for (int i = 0; i < cs.length; i++) {\n" + 
					"			cs[i] = l.get (i).charValue ();\n" + 
					"		}\n" + 
					"		Object o2 = new Object();\n" + 
					"	}\n" + 
					"}\n",
				},
				"",
				getLibsWithNullAnnotations(ClassFileConstants.JDK1_7),
				true/*flush*/,
				null/*vmArgs*/,
				options,
				null/*requestor*/,
				true/*skipJavac*/);

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X2.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);

			String expectedOutput =
					"  // Method descriptor #6 ()V\n" + 
					"  // Stack: 4, Locals: 4\n" + 
					"  void init();\n" + 
					"     0  aload_0 [this]\n" + 
					"     1  new java.lang.Object [15]\n" + 
					"     4  dup\n" + 
					"     5  invokespecial java.lang.Object() [17]\n" + 
					"     8  putfield X2.name : java.lang.Object [18]\n" + 
					"    11  new java.util.LinkedList [22]\n" + 
					"    14  dup\n" + 
					"    15  invokespecial java.util.LinkedList() [24]\n" + 
					"    18  astore_1 [l]\n" + 
					"    19  aload_1 [l]\n" + 
					"    20  invokevirtual java.util.LinkedList.size() : int [25]\n" + 
					"    23  newarray char [5]\n" + 
					"    25  astore_2 [cs]\n" + 
					"    26  iconst_0\n" + 
					"    27  istore_3 [i]\n" + 
					"    28  goto 48\n" + 
					"    31  aload_2 [cs]\n" + 
					"    32  iload_3 [i]\n" + 
					"    33  aload_1 [l]\n" + 
					"    34  iload_3 [i]\n" + 
					"    35  invokevirtual java.util.LinkedList.get(int) : java.lang.Object [29]\n" + 
					"    38  checkcast java.lang.Character [33]\n" + 
					"    41  invokevirtual java.lang.Character.charValue() : char [35]\n" + 
					"    44  castore\n" + 
					"    45  iinc 3 1 [i]\n" + 
					"    48  iload_3 [i]\n" + 
					"    49  aload_2 [cs]\n" + 
					"    50  arraylength\n" + 
					"    51  if_icmplt 31\n" + 
					"    54  new java.lang.Object [15]\n" + 
					"    57  dup\n" + 
					"    58  invokespecial java.lang.Object() [17]\n" + 
					"    61  astore_3 [o2]\n" + 
					"    62  return\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 11]\n" + 
					"        [pc: 11, line: 12]\n" + 
					"        [pc: 19, line: 13]\n" + 
					"        [pc: 26, line: 14]\n" + 
					"        [pc: 31, line: 15]\n" + 
					"        [pc: 45, line: 14]\n" + 
					"        [pc: 54, line: 17]\n" + 
					"        [pc: 62, line: 18]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 63] local: this index: 0 type: X2\n" + 
					"        [pc: 19, pc: 63] local: l index: 1 type: java.util.LinkedList\n" + 
					"        [pc: 26, pc: 63] local: cs index: 2 type: char[]\n" + 
					"        [pc: 28, pc: 54] local: i index: 3 type: int\n" + 
					"        [pc: 62, pc: 63] local: o2 index: 3 type: java.lang.Object\n" + 
					"      Local variable type table:\n" + 
					"        [pc: 19, pc: 63] local: l index: 1 type: java.util.LinkedList<java.lang.Character>\n" + 
					"      Stack map table: number of frames 2\n" + 
					"        [pc: 31, append: {java.util.LinkedList, char[], int}]\n" + 
					"        [pc: 48, same]\n" + 
					"}";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
	public void testBug5409021() throws Exception {
		this.runConformTest(
				new String[] {
					"X.java",
					"public class X {\n" + 
					"\n" + 
					"	public static void main(String[] args) {\n" + 
					"		X error = new X();\n" + 
					"		error.reproduce(\"hello\");\n" + 
					"		System.out.println(\"DONE\");\n" + 
					"	}\n" + 
					"	\n" + 
					"	public Object reproduce(Object param) throws RuntimeException {\n" + 
					"		Object local;\n" + 
					"		try {\n" + 
					"			return param; \n" + 
					"		} \n" + 
					"		catch (RuntimeException e) {\n" + 
					"			return null;\n" + 
					"		} \n" + 
					"		finally {\n" + 
					"			if (param != null) {\n" + 
					"				System.out.println(\"FINALLY\");\n" + 
					"			}\n" + 
					"			local = null;\n" + 
					"		}\n" + 
					"	}\n" + 
					"}\n" + 
					"",
				},
				"FINALLY\n" + 
				"DONE");

			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
			String actualOutput =
				disassembler.disassemble(
					classFileBytes,
					"\n",
					ClassFileBytesDisassembler.DETAILED);
			String expectedOutput =
					"  // Stack: 2, Locals: 6\n" + 
					"  public java.lang.Object reproduce(java.lang.Object param) throws java.lang.RuntimeException;\n" + 
					"     0  aload_1 [param]\n" + 
					"     1  astore 5\n" + 
					"     3  aload_1 [param]\n" + 
					"     4  ifnull 15\n" + 
					"     7  getstatic java.lang.System.out : java.io.PrintStream [23]\n" + 
					"    10  ldc <String \"FINALLY\"> [43]\n" + 
					"    12  invokevirtual java.io.PrintStream.println(java.lang.String) : void [31]\n" + 
					"    15  aconst_null\n" + 
					"    16  astore_2 [local]\n" + 
					"    17  aload 5\n" + 
					"    19  areturn\n" + 
					"    20  astore_3 [e]\n" + 
					"    21  aload_1 [param]\n" + 
					"    22  ifnull 33\n" + 
					"    25  getstatic java.lang.System.out : java.io.PrintStream [23]\n" + 
					"    28  ldc <String \"FINALLY\"> [43]\n" + 
					"    30  invokevirtual java.io.PrintStream.println(java.lang.String) : void [31]\n" + 
					"    33  aconst_null\n" + 
					"    34  astore_2 [local]\n" + 
					"    35  aconst_null\n" + 
					"    36  areturn\n" + 
					"    37  astore 4\n" + 
					"    39  aload_1 [param]\n" + 
					"    40  ifnull 51\n" + 
					"    43  getstatic java.lang.System.out : java.io.PrintStream [23]\n" + 
					"    46  ldc <String \"FINALLY\"> [43]\n" + 
					"    48  invokevirtual java.io.PrintStream.println(java.lang.String) : void [31]\n" + 
					"    51  aconst_null\n" + 
					"    52  astore_2 [local]\n" + 
					"    53  aload 4\n" + 
					"    55  athrow\n" + 
					"      Exception Table:\n" + 
					"        [pc: 0, pc: 3] -> 20 when : java.lang.RuntimeException\n" + 
					"        [pc: 0, pc: 3] -> 37 when : any\n" + 
					"        [pc: 20, pc: 21] -> 37 when : any\n" + 
					"      Line numbers:\n" + 
					"        [pc: 0, line: 12]\n" + 
					"        [pc: 3, line: 18]\n" + 
					"        [pc: 7, line: 19]\n" + 
					"        [pc: 15, line: 21]\n" + 
					"        [pc: 17, line: 12]\n" + 
					"        [pc: 20, line: 14]\n" + 
					"        [pc: 21, line: 18]\n" + 
					"        [pc: 25, line: 19]\n" + 
					"        [pc: 33, line: 21]\n" + 
					"        [pc: 35, line: 15]\n" + 
					"        [pc: 37, line: 17]\n" + 
					"        [pc: 39, line: 18]\n" + 
					"        [pc: 43, line: 19]\n" + 
					"        [pc: 51, line: 21]\n" + 
					"        [pc: 53, line: 22]\n" + 
					"      Local variable table:\n" + 
					"        [pc: 0, pc: 56] local: this index: 0 type: X\n" + 
					"        [pc: 0, pc: 56] local: param index: 1 type: java.lang.Object\n" + 
					"        [pc: 17, pc: 20] local: local index: 2 type: java.lang.Object\n" + 
					"        [pc: 35, pc: 37] local: local index: 2 type: java.lang.Object\n" + 
					"        [pc: 53, pc: 56] local: local index: 2 type: java.lang.Object\n" + 
					"        [pc: 21, pc: 37] local: e index: 3 type: java.lang.RuntimeException\n" + 
					"      Stack map table: number of frames 5\n" + 
					"        [pc: 15, full, stack: {}, locals: {X, java.lang.Object, _, _, _, java.lang.Object}]\n" + 
					"        [pc: 20, full, stack: {java.lang.RuntimeException}, locals: {X, java.lang.Object}]\n" + 
					"        [pc: 33, full, stack: {}, locals: {X, java.lang.Object, _, java.lang.RuntimeException}]\n" + 
					"        [pc: 37, full, stack: {java.lang.Throwable}, locals: {X, java.lang.Object}]\n" + 
					"        [pc: 51, full, stack: {}, locals: {X, java.lang.Object, _, _, java.lang.Throwable}]\n" + 
					"}";

			int index = actualOutput.indexOf(expectedOutput);
			if (index == -1 || expectedOutput.length() == 0) {
				System.out.println(Util.displayString(actualOutput, 2));
			}
			if (index == -1) {
				assertEquals("Wrong contents", expectedOutput, actualOutput);
			}
	}
}
