import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public class __2F_INCLUDES_TESTS_2F_cdata_2F_cdata_2E_jsp extends javax.servlet.http.HttpServlet{
public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
		throws java.io.IOException, javax.servlet.ServletException {
javax.servlet.jsp.PageContext pageContext = null;
javax.servlet.ServletContext application = null;
javax.servlet.ServletConfig config = null;
javax.servlet.jsp.JspWriter out = null;
Object page = null;
javax.servlet.http.HttpSession session = null;

try {

int a = 1;
if (a 
<
 2) {
 out.println("x");
} 
   
String test = "";


   
int a = 1;
if (a < 2) {   
 out.println("x");
}


 
 test.toUpperCase();
 } catch (java.lang.Exception e) {} 
}}