graphics_GLAPICheck: Delete X11 remnants

Delete X11 from graphics_GLAPICheck as all boards supported freon now.

BUG=chromium:655820
TEST=[1] test_that glimmer graphics_GLAPICheck
/tmp/test_that_results_PehkgJ/results-1-graphics_GLAPICheck [  PASSED  ]
------------------------------------------------------------------------
Total PASS: 2/2 (100%)
TEST=[2] ./build_packages --board=glimmer

Change-Id: Iff4d5748bed747a947f1f139a976fb7a01ae182b
Reviewed-on: https://chromium-review.googlesource.com/546844
Commit-Ready: Po-Hsien Wang <pwang@chromium.org>
Tested-by: Po-Hsien Wang <pwang@chromium.org>
Reviewed-by: Po-Hsien Wang <pwang@chromium.org>
diff --git a/client/site_tests/graphics_GLAPICheck/control b/client/site_tests/graphics_GLAPICheck/control
index 5154fc7..e77acd5 100644
--- a/client/site_tests/graphics_GLAPICheck/control
+++ b/client/site_tests/graphics_GLAPICheck/control
@@ -4,7 +4,7 @@
 
 NAME = 'graphics_GLAPICheck'
 AUTHOR = 'chromeos-gfx'
-PURPOSE = 'Verify correctness of OpenGL/GLES and X11 versions/extensions.'
+PURPOSE = 'Verify correctness of OpenGL/GLES.'
 CRITERIA = """
 This test will fail if:
   - GL version is less than 1.4
@@ -12,7 +12,6 @@
   - GLES version is less than 2
   - EGL version is less than 1.3
   - If GL extensions don't include needed extensions
-  - If X extensions don't include DAMAGE and Composite
 """
 ATTRIBUTES = "suite:bvt-perbuild, suite:graphics, suite:graphics_per-day, suite:graphics_system, suite:hwqual"
 TIME='SHORT'
@@ -25,8 +24,7 @@
 
 DOC = """
 This test will run some binary programs to extract various version strings from
-OpenGL/GLES and X11, and then parse those strings to compare with expected
-values.
+OpenGL/GLES, and then parse those strings to compare with expected values.
 """
 
 job.run_test('graphics_GLAPICheck')
diff --git a/client/site_tests/graphics_GLAPICheck/graphics_GLAPICheck.py b/client/site_tests/graphics_GLAPICheck/graphics_GLAPICheck.py
index 9d2a38d..86007ad 100644
--- a/client/site_tests/graphics_GLAPICheck/graphics_GLAPICheck.py
+++ b/client/site_tests/graphics_GLAPICheck/graphics_GLAPICheck.py
@@ -12,17 +12,11 @@
 
 class graphics_GLAPICheck(graphics_utils.GraphicsTest):
     """
-    Verify correctness of OpenGL/GLES and X11 versions/extensions.
+    Verify correctness of OpenGL/GLES.
     """
     version = 1
-    preserve_srcdir = True
     error_message = ''
 
-    def setup(self):
-        os.chdir(self.srcdir)
-        utils.make('clean')
-        utils.make('all')
-
     def __check_extensions(self, info, ext_entries):
         info_split = info.split()
         comply = True
diff --git a/client/site_tests/graphics_GLAPICheck/src/Makefile b/client/site_tests/graphics_GLAPICheck/src/Makefile
deleted file mode 100644
index 5aabf4b..0000000
--- a/client/site_tests/graphics_GLAPICheck/src/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-TARGET_GL = ../gl_APICheck
-TARGET_ES = ../gles_APICheck
-
-ifeq ($(GRAPHICS_BACKEND), OPENGLES)
-    LDFLAGS = -lX11 -lm -ldl
-    SRCS = gles_APICheck.cc
-    TARGET = $(TARGET_ES)
-else ifeq ($(GRAPHICS_BACKEND), OPENGL)
-    LDFLAGS = -lX11 -lm -lGL
-    SRCS = gl_APICheck.cc
-    TARGET = $(TARGET_GL)
-else
-    $(error GRAPHICS_BACKEND has to be either OPENGL or OPENGLES)
-endif
-
-all: $(TARGET)
-
-$(TARGET): $(SRCS)
-	$(CXX) -O3 -o $@ $^ -Wall $(LDFLAGS)
-
-clean:
-	$(RM) $(TARGET_GL)
-	$(RM) $(TARGET_ES)
diff --git a/client/site_tests/graphics_GLAPICheck/src/gl_APICheck.cc b/client/site_tests/graphics_GLAPICheck/src/gl_APICheck.cc
deleted file mode 100644
index a2df8b1..0000000
--- a/client/site_tests/graphics_GLAPICheck/src/gl_APICheck.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-#include <GL/gl.h>
-#include <GL/glx.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-
-#include <string>
-
-bool InitGraphics(Display** display,
-                  Window* window,
-                  GLXContext* context) {
-  const int kWindowWidth = 100;
-  const int kWindowHeight = 100;
-
-  *display = XOpenDisplay(NULL);
-  if (*display == NULL) {
-    printf("ERROR: XOpenDisplay failed\n");
-    return false;
-  }
-
-  Window root_window = DefaultRootWindow(*display);
-  GLint att[] = { GLX_RGBA,
-                  GLX_DEPTH_SIZE,
-                  24,
-                  None };
-  XVisualInfo* vi = glXChooseVisual(*display, 0, att);
-  if (vi == NULL) {
-    printf("ERROR: glXChooseVisual failed\n");
-    return false;
-  }
-
-  XSetWindowAttributes swa;
-  swa.colormap = XCreateColormap(*display,
-                                 root_window,
-                                 vi->visual,
-                                 AllocNone);
-  *window = XCreateWindow(*display, root_window,
-                          0, 0, kWindowWidth, kWindowHeight,
-                          0, vi->depth, InputOutput, vi->visual,
-                          CWColormap,
-                          &swa);
-  XMapWindow(*display, *window);
-
-  *context = glXCreateContext(*display, vi, NULL, GL_TRUE);
-  if (*context == NULL) {
-    printf("ERROR: glXCreateContext failed\n");
-  } else {
-    glXMakeCurrent(*display, *window, *context);
-  }
-
-  XFree(vi);
-  return (*context != NULL);
-}
-
-void ExitGraphics(Display* display,
-                  Window window,
-                  GLXContext context) {
-  if (display != NULL) {
-    glXMakeCurrent(display, None, NULL);
-    if (context != NULL)
-      glXDestroyContext(display, context);
-    XDestroyWindow(display, window);
-    XCloseDisplay(display);
-  }
-}
-
-bool GetGLVersion() {
-  const GLubyte* version_string = glGetString(GL_VERSION);
-  if (version_string == NULL) {
-    printf("ERROR: glGetString(GL_VERSION) failed\n");
-    return false;
-  }
-  printf("GL_VERSION = %s\n", version_string);
-  return true;
-}
-
-bool GetGLExtensions() {
-  const GLubyte* ext_string = glGetString(GL_EXTENSIONS);
-  if (ext_string == NULL) {
-    printf("ERROR: glGetString(GL_EXTENSIONS) failed\n");
-    return false;
-  }
-  printf("GL_EXTENSIONS = %s\n", ext_string);
-  return true;
-}
-
-bool GetGLXExtensions(Display* display) {
-  const char* ext_string = glXQueryExtensionsString(display, 0);
-  if (ext_string == NULL) {
-    printf("ERROR: glXQueryExtensionsString failed\n");
-    return false;
-  }
-  printf("GLX_EXTENSIONS = %s\n", ext_string);
-  return true;
-}
-
-bool GetXExtensions(Display* display) {
-  int ext_num;
-  char** ext_list = XListExtensions(display, &ext_num);
-  printf("X_EXTENSIONS =");
-  for (int i = 0; i < ext_num; ++i) {
-    printf(" %s", ext_list[i]);
-  }
-  printf("\n");
-  XFreeExtensionList(ext_list);
-  return true;
-}
-
-int main(int argc, char* argv[]) {
-  // Initialize graphics.
-  Display* display = NULL;
-  Window window = 0;
-  GLXContext context = NULL;
-  bool rt_code = InitGraphics(&display, &window, &context);
-
-  // Get OpenGL major/minor version number.
-  if (rt_code)
-    rt_code = GetGLVersion();
-
-  // Get OpenGL extentions.
-  if (rt_code)
-    rt_code = GetGLExtensions();
-
-  // Get GLX extensions.
-  if (rt_code)
-    rt_code = GetGLXExtensions(display);
-
-  // Get X11 extensions.
-  if (rt_code)
-    rt_code = GetXExtensions(display);
-
-  ExitGraphics(display, window, context);
-  printf("SUCCEED: run to the end\n");
-  return 0;
-}
-
diff --git a/client/site_tests/graphics_GLAPICheck/src/gles_APICheck.cc b/client/site_tests/graphics_GLAPICheck/src/gles_APICheck.cc
deleted file mode 100644
index 5422cea..0000000
--- a/client/site_tests/graphics_GLAPICheck/src/gles_APICheck.cc
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// To use runtime linking, uncomment the #define OPENGL_ES_IMPORT_FUNCTIONS,
-// and pass libGLESxx.so libEGLxx.so in the command line as input
-// parameters.
-// Otherwise, comment out #define OPENGL_ES_IMPORT_FUNCTIONS and pass no
-// parameters in the command line.
-
-#include <stdio.h>
-
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-
-#define OPENGL_ES_IMPORT_FUNCTIONS
-
-#ifdef OPENGL_ES_IMPORT_FUNCTIONS
-
-#include <dlfcn.h>
-
-EGLDisplay (*FP_eglGetDisplay)(NativeDisplayType display) = NULL;
-EGLBoolean (*FP_eglInitialize)(EGLDisplay dpy,
-                               EGLint* major,
-                               EGLint* minor) = NULL;
-EGLBoolean (*FP_eglGetConfigs)(EGLDisplay dpy,
-                               EGLConfig* configs,
-                               EGLint config_size,
-                               EGLint* num_config) = NULL;
-EGLBoolean (*FP_eglChooseConfig)(EGLDisplay dpy,
-                                 const EGLint* attrib_list,
-                                 EGLConfig* configs,
-                                 EGLint config_size,
-                                 EGLint* num_config) = NULL;
-EGLContext (*FP_eglCreateContext)(EGLDisplay dpy,
-                                  EGLConfig config,
-                                  EGLContext share_list,
-                                  const EGLint* attrib_list) = NULL;
-EGLBoolean (*FP_eglGetConfigAttrib)(EGLDisplay dpy,
-                                    EGLConfig config,
-                                    EGLint attribute,
-                                    EGLint* value) = NULL;
-EGLSurface (*FP_eglCreateWindowSurface)(EGLDisplay dpy,
-                                        EGLConfig config,
-                                        NativeWindowType window,
-                                        const EGLint* attrib_list) = NULL;
-EGLBoolean (*FP_eglMakeCurrent)(EGLDisplay dpy,
-                                EGLSurface draw,
-                                EGLSurface read,
-                                EGLContext ctx) = NULL;
-EGLBoolean (*FP_eglDestroyContext)(EGLDisplay dpy, EGLContext ctx) = NULL;
-EGLBoolean (*FP_eglDestroySurface)(EGLDisplay dpy, EGLSurface surface) = NULL;
-EGLBoolean (*FP_eglTerminate)(EGLDisplay dpy) = NULL;
-const char* (*FP_eglQueryString)(EGLDisplay dpy, EGLint name) = NULL;
-const GLubyte* (*FP_glGetString)(GLenum name) = NULL;
-
-#define eglGetDisplay FP_eglGetDisplay
-#define eglInitialize FP_eglInitialize
-#define eglGetConfigs FP_eglGetConfigs
-#define eglChooseConfig FP_eglChooseConfig
-#define eglCreateContext FP_eglCreateContext
-#define eglGetConfigAttrib FP_eglGetConfigAttrib
-#define eglCreateWindowSurface FP_eglCreateWindowSurface
-#define eglMakeCurrent FP_eglMakeCurrent
-#define eglDestroyContext FP_eglDestroyContext
-#define eglDestroySurface FP_eglDestroySurface
-#define eglTerminate FP_eglTerminate
-#define eglQueryString FP_eglQueryString
-#define glGetString FP_glGetString
-
-typedef EGLDisplay (*FT_eglGetDisplay)(NativeDisplayType);
-typedef EGLBoolean (*FT_eglInitialize)(EGLDisplay, EGLint*, EGLint*);
-typedef EGLBoolean (*FT_eglGetConfigs)(EGLDisplay, EGLConfig*,
-                                       EGLint, EGLint*);
-typedef EGLBoolean (*FT_eglChooseConfig)(EGLDisplay, const EGLint*,
-                                         EGLConfig*, EGLint, EGLint*);
-typedef EGLContext (*FT_eglCreateContext)(EGLDisplay, EGLConfig,
-                                          EGLContext, const EGLint*);
-typedef EGLBoolean (*FT_eglGetConfigAttrib)(EGLDisplay, EGLConfig,
-                                            EGLint, EGLint*);
-typedef EGLSurface (*FT_eglCreateWindowSurface)(EGLDisplay, EGLConfig,
-                                                NativeWindowType,
-                                                const EGLint*);
-typedef EGLBoolean (*FT_eglMakeCurrent)(EGLDisplay, EGLSurface,
-                                        EGLSurface, EGLContext);
-typedef EGLBoolean (*FT_eglDestroyContext)(EGLDisplay, EGLContext);
-typedef EGLBoolean (*FT_eglDestroySurface)(EGLDisplay, EGLSurface);
-typedef EGLBoolean (*FT_eglTerminate)(EGLDisplay);
-typedef const char* (*FT_eglQueryString)(EGLDisplay, EGLint);
-typedef const GLubyte* (*FT_glGetString)(GLenum);
-
-bool LoadDLFunction(void** func_handle,
-                    const char* func_name,
-                    void* dl_handle) {
-  *func_handle = dlsym(dl_handle, func_name);
-  if (*func_handle == NULL) {
-    printf("ERROR: fail to load %s\n", func_name);
-    return false;
-  }
-  return true;
-}
-
-bool EntryImportGL(char* lib_gles, char* lib_egl,
-                   void** handle_gles, void** handle_egl) {
-  *handle_gles = dlopen(lib_gles, RTLD_LAZY);
-  if (*handle_gles == NULL) {
-    printf("ERROR: %s\n", dlerror());
-    return false;
-  }
-  *handle_egl = dlopen(lib_egl, RTLD_LAZY);
-  if (*handle_egl == NULL) {
-    printf("ERROR: %s\n", dlerror());
-    return false;
-  }
-
-  bool rt = true;
-  void* tmp;
-  rt &= LoadDLFunction(&tmp, "eglGetDisplay", *handle_egl);
-  FP_eglGetDisplay = reinterpret_cast<FT_eglGetDisplay>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglInitialize", *handle_egl);
-  FP_eglInitialize = reinterpret_cast<FT_eglInitialize>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglGetConfigs", *handle_egl);
-  FP_eglGetConfigs = reinterpret_cast<FT_eglGetConfigs>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglChooseConfig", *handle_egl);
-  FP_eglChooseConfig = reinterpret_cast<FT_eglChooseConfig>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglCreateContext", *handle_egl);
-  FP_eglCreateContext = reinterpret_cast<FT_eglCreateContext>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglGetConfigAttrib", *handle_egl);
-  FP_eglGetConfigAttrib = reinterpret_cast<FT_eglGetConfigAttrib>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglCreateWindowSurface", *handle_egl);
-  FP_eglCreateWindowSurface = reinterpret_cast<FT_eglCreateWindowSurface>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglMakeCurrent", *handle_egl);
-  FP_eglMakeCurrent = reinterpret_cast<FT_eglMakeCurrent>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglDestroyContext", *handle_egl);
-  FP_eglDestroyContext = reinterpret_cast<FT_eglDestroyContext>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglDestroySurface", *handle_egl);
-  FP_eglDestroySurface = reinterpret_cast<FT_eglDestroySurface>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglTerminate", *handle_egl);
-  FP_eglTerminate = reinterpret_cast<FT_eglTerminate>(tmp);
-  rt &= LoadDLFunction(&tmp, "eglQueryString", *handle_egl);
-  FP_eglQueryString = reinterpret_cast<FT_eglQueryString>(tmp);
-  rt &= LoadDLFunction(&tmp, "glGetString", *handle_gles);
-  FP_glGetString = reinterpret_cast<FT_glGetString>(tmp);
-  return rt;
-}
-
-void ExitImportGL(void* handle_gles, void* handle_egl) {
-  if (handle_gles != NULL)
-    dlclose(handle_gles);
-  if (handle_egl != NULL)
-    dlclose(handle_egl);
-}
-
-#endif  // OPENGL_ES_IMPORT_FUNCTIONS
-
-bool InitGraphics(Display** display,
-                  EGLDisplay* egl_display,
-                  EGLContext* egl_context,
-                  EGLSurface* egl_surface) {
-  const int kWindowWidth = 100;
-  const int kWindowHeight = 100;
-  const EGLint config_attribs[] = {
-    EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
-    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
-    EGL_NONE
-  };
-  const EGLint context_attribs[] = {
-    EGL_CONTEXT_CLIENT_VERSION, 2,
-    EGL_NONE
-  };
-
-  // XWindow init.
-  *display = XOpenDisplay(NULL);
-  if (*display == NULL) {
-    printf("ERROR: XOpenDisplay failed\n");
-    return false;
-  }
-
-  int screen = XDefaultScreen(*display);
-  Window window = XCreateSimpleWindow(*display, RootWindow(*display, screen),
-                                      0, 0, kWindowWidth, kWindowHeight,
-                                      0, 0, WhitePixel(*display, screen));
-  XMapWindow(*display, window);
-  XSync(*display, True);
-
-  // EGL init.
-  *egl_display = eglGetDisplay((EGLNativeDisplayType)*display);
-  EGLint no_major, no_minor;
-  EGLBoolean rt_code = eglInitialize(*egl_display, &no_major, &no_minor);
-  if (rt_code == EGL_FALSE) {
-    printf("ERROR: eglInitialize failed\n");
-    return false;
-  }
-  // Print out version info.
-  printf("EGL_VERSION = %d.%d\n",
-         static_cast<int>(no_major),
-         static_cast<int>(no_minor));
-  // Config.
-  EGLint num_configs;
-  EGLConfig egl_config;
-  rt_code = eglChooseConfig(*egl_display, config_attribs,
-                            &egl_config, 1, &num_configs);
-  if (rt_code == EGL_FALSE || num_configs != 1) {
-    printf("ERROR: eglChooseConfig failed\n");
-    return false;
-  }
-  // Surface.
-  *egl_surface = eglCreateWindowSurface(*egl_display, egl_config,
-                                        (NativeWindowType)window, NULL);
-  if (*egl_surface == EGL_NO_SURFACE) {
-    printf("ERROR: eglCreateWindowSurface failed\n");
-    return false;
-  }
-  // Context.
-  *egl_context = eglCreateContext(*egl_display, egl_config, EGL_NO_CONTEXT,
-                                  context_attribs);
-  if (*egl_context == EGL_NO_CONTEXT) {
-    printf("ERROR: eglCreateContext failed\n");
-    return false;
-  }
-  // Make current.
-  rt_code = eglMakeCurrent(*egl_display, *egl_surface,
-                           *egl_surface, *egl_context);
-  if (rt_code == EGL_FALSE) {
-    printf("ERROR: eglMakeCurrent failed\n");
-    return false;
-  }
-  return true;
-}
-
-void ExitGraphics(EGLDisplay egl_display,
-                  EGLContext egl_context,
-                  EGLSurface egl_surface) {
-  if (egl_display != EGL_NO_DISPLAY) {
-    eglMakeCurrent(egl_display, NULL, NULL, NULL);
-    if (egl_context != EGL_NO_CONTEXT)
-      eglDestroyContext(egl_display, egl_context);
-    if (egl_surface != EGL_NO_SURFACE)
-      eglDestroySurface(egl_display, egl_surface);
-    eglTerminate(egl_display);
-  }
-}
-
-bool GetGLESVersion() {
-  const GLubyte* version_string = glGetString(GL_VERSION);
-  if (version_string == NULL) {
-    printf("ERROR: glGetString(GL_VERSION) failed\n");
-    return false;
-  }
-  printf("GLES_VERSION = %s\n", version_string);
-  return true;
-}
-
-bool GetGLESExtensions() {
-  const GLubyte* ext_string = glGetString(GL_EXTENSIONS);
-  if (ext_string == NULL) {
-    printf("ERROR: glGetString(GL_EXTENSIONS) failed\n");
-    return false;
-  }
-  printf("GLES_EXTENSIONS = %s\n", ext_string);
-  return true;
-}
-
-bool GetEGLExtensions(EGLDisplay egl_display) {
-  const char* ext_string = eglQueryString(egl_display, EGL_EXTENSIONS);
-  if (ext_string == NULL) {
-    printf("ERROR: eglQueryString(EGL_EXTENSIONS) failed\n");
-    return false;
-  }
-  printf("EGL_EXTENSIONS = %s\n", ext_string);
-  return true;
-}
-
-bool GetXExtensions(Display* display) {
-  int ext_num;
-  char** ext_list = XListExtensions(display, &ext_num);
-  printf("X_EXTENSIONS =");
-  for (int i = 0; i < ext_num; ++i) {
-    printf(" %s", ext_list[i]);
-  }
-  printf("\n");
-  XFreeExtensionList(ext_list);
-  return true;
-}
-
-int main(int argc, char* argv[]) {
-  // Initialize graphics.
-  Display* display;
-  EGLDisplay egl_display = EGL_NO_DISPLAY;
-  EGLContext egl_context = EGL_NO_CONTEXT;
-  EGLSurface egl_surface = EGL_NO_SURFACE;
-
-  bool rt_code = true;
-
-#ifdef OPENGL_ES_IMPORT_FUNCTIONS
-  if (argc != 3) {
-    printf("ERROR: Usage: gles_APICheck libGLESxx.so libEGLxx.so\n");
-    return 0;
-  }
-  void* handle_gles = NULL;
-  void* handle_egl = NULL;
-  rt_code = EntryImportGL(argv[1], argv[2], &handle_gles, &handle_egl);
-#endif  // OPENGL_ES_IMPORT_FUNCTIONS
-
-  // EGL version is printed out in InitGraphics
-  if (rt_code)
-    rt_code = InitGraphics(&display, &egl_display,
-                           &egl_context, &egl_surface);
-
-  // Get GLES version.
-  if (rt_code)
-    rt_code = GetGLESVersion();
-
-  // Get GLES extentions.
-  if (rt_code)
-    rt_code = GetGLESExtensions();
-
-  // Get EGL extentions.
-  if (rt_code)
-    rt_code = GetEGLExtensions(egl_display);
-
-  // Get X11 extensions.
-  if (rt_code)
-    rt_code = GetXExtensions(display);
-
-  ExitGraphics(egl_display, egl_context, egl_surface);
-#ifdef OPENGL_ES_IMPORT_FUNCTIONS
-  ExitImportGL(handle_gles, handle_egl);
-#endif  // OPENGL_ES_IMPORT_FUNCTIONS
-  printf("SUCCEED: run to the end\n");
-  return 0;
-}
-