1 // Generated Code - DO NOT EDIT !! 2 // generated by 'emugen' 3 4 5 #include <string.h> 6 #include "renderControl_opcodes.h" 7 8 #include "renderControl_enc.h" 9 10 11 #include <stdio.h> 12 13 namespace { 14 15 void enc_unsupported() 16 { 17 ALOGE("Function is unsupported\n"); 18 } 19 20 GLint rcGetRendererVersion_enc(void *self ) 21 { 22 23 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 24 IOStream *stream = ctx->m_stream; 25 26 unsigned char *ptr; 27 const size_t packetSize = 8; 28 ptr = stream->alloc(packetSize); 29 int tmp = OP_rcGetRendererVersion;memcpy(ptr, &tmp, 4); ptr += 4; 30 memcpy(ptr, &packetSize, 4); ptr += 4; 31 32 33 GLint retval; 34 stream->readback(&retval, 4); 35 return retval; 36 } 37 38 EGLint rcGetEGLVersion_enc(void *self , EGLint* major, EGLint* minor) 39 { 40 41 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 42 IOStream *stream = ctx->m_stream; 43 44 const unsigned int __size_major = sizeof(EGLint); 45 const unsigned int __size_minor = sizeof(EGLint); 46 unsigned char *ptr; 47 const size_t packetSize = 8 + __size_major + __size_minor + 2*4; 48 ptr = stream->alloc(packetSize); 49 int tmp = OP_rcGetEGLVersion;memcpy(ptr, &tmp, 4); ptr += 4; 50 memcpy(ptr, &packetSize, 4); ptr += 4; 51 52 *(unsigned int *)(ptr) = __size_major; ptr += 4; 53 *(unsigned int *)(ptr) = __size_minor; ptr += 4; 54 stream->readback(major, __size_major); 55 stream->readback(minor, __size_minor); 56 57 EGLint retval; 58 stream->readback(&retval, 4); 59 return retval; 60 } 61 62 EGLint rcQueryEGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize) 63 { 64 65 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 66 IOStream *stream = ctx->m_stream; 67 68 const unsigned int __size_buffer = bufferSize; 69 unsigned char *ptr; 70 const size_t packetSize = 8 + 4 + __size_buffer + 4 + 1*4; 71 ptr = stream->alloc(packetSize); 72 int tmp = OP_rcQueryEGLString;memcpy(ptr, &tmp, 4); ptr += 4; 73 memcpy(ptr, &packetSize, 4); ptr += 4; 74 75 memcpy(ptr, &name, 4); ptr += 4; 76 *(unsigned int *)(ptr) = __size_buffer; ptr += 4; 77 memcpy(ptr, &bufferSize, 4); ptr += 4; 78 stream->readback(buffer, __size_buffer); 79 80 EGLint retval; 81 stream->readback(&retval, 4); 82 return retval; 83 } 84 85 EGLint rcGetGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize) 86 { 87 88 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 89 IOStream *stream = ctx->m_stream; 90 91 const unsigned int __size_buffer = bufferSize; 92 unsigned char *ptr; 93 const size_t packetSize = 8 + 4 + __size_buffer + 4 + 1*4; 94 ptr = stream->alloc(packetSize); 95 int tmp = OP_rcGetGLString;memcpy(ptr, &tmp, 4); ptr += 4; 96 memcpy(ptr, &packetSize, 4); ptr += 4; 97 98 memcpy(ptr, &name, 4); ptr += 4; 99 *(unsigned int *)(ptr) = __size_buffer; ptr += 4; 100 memcpy(ptr, &bufferSize, 4); ptr += 4; 101 stream->readback(buffer, __size_buffer); 102 103 EGLint retval; 104 stream->readback(&retval, 4); 105 return retval; 106 } 107 108 EGLint rcGetNumConfigs_enc(void *self , uint32_t* numAttribs) 109 { 110 111 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 112 IOStream *stream = ctx->m_stream; 113 114 const unsigned int __size_numAttribs = sizeof(uint32_t); 115 unsigned char *ptr; 116 const size_t packetSize = 8 + __size_numAttribs + 1*4; 117 ptr = stream->alloc(packetSize); 118 int tmp = OP_rcGetNumConfigs;memcpy(ptr, &tmp, 4); ptr += 4; 119 memcpy(ptr, &packetSize, 4); ptr += 4; 120 121 *(unsigned int *)(ptr) = __size_numAttribs; ptr += 4; 122 stream->readback(numAttribs, __size_numAttribs); 123 124 EGLint retval; 125 stream->readback(&retval, 4); 126 return retval; 127 } 128 129 EGLint rcGetConfigs_enc(void *self , uint32_t bufSize, GLuint* buffer) 130 { 131 132 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 133 IOStream *stream = ctx->m_stream; 134 135 const unsigned int __size_buffer = bufSize; 136 unsigned char *ptr; 137 const size_t packetSize = 8 + 4 + __size_buffer + 1*4; 138 ptr = stream->alloc(packetSize); 139 int tmp = OP_rcGetConfigs;memcpy(ptr, &tmp, 4); ptr += 4; 140 memcpy(ptr, &packetSize, 4); ptr += 4; 141 142 memcpy(ptr, &bufSize, 4); ptr += 4; 143 *(unsigned int *)(ptr) = __size_buffer; ptr += 4; 144 stream->readback(buffer, __size_buffer); 145 146 EGLint retval; 147 stream->readback(&retval, 4); 148 return retval; 149 } 150 151 EGLint rcChooseConfig_enc(void *self , EGLint* attribs, uint32_t attribs_size, uint32_t* configs, uint32_t configs_size) 152 { 153 154 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 155 IOStream *stream = ctx->m_stream; 156 157 const unsigned int __size_attribs = attribs_size; 158 const unsigned int __size_configs = ((configs != NULL) ? configs_size*sizeof(uint32_t) : 0); 159 unsigned char *ptr; 160 const size_t packetSize = 8 + __size_attribs + 4 + __size_configs + 4 + 2*4; 161 ptr = stream->alloc(packetSize); 162 int tmp = OP_rcChooseConfig;memcpy(ptr, &tmp, 4); ptr += 4; 163 memcpy(ptr, &packetSize, 4); ptr += 4; 164 165 *(unsigned int *)(ptr) = __size_attribs; ptr += 4; 166 memcpy(ptr, attribs, __size_attribs);ptr += __size_attribs; 167 memcpy(ptr, &attribs_size, 4); ptr += 4; 168 *(unsigned int *)(ptr) = __size_configs; ptr += 4; 169 memcpy(ptr, &configs_size, 4); ptr += 4; 170 if (configs != NULL) stream->readback(configs, __size_configs); 171 172 EGLint retval; 173 stream->readback(&retval, 4); 174 return retval; 175 } 176 177 EGLint rcGetFBParam_enc(void *self , EGLint param) 178 { 179 180 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 181 IOStream *stream = ctx->m_stream; 182 183 unsigned char *ptr; 184 const size_t packetSize = 8 + 4; 185 ptr = stream->alloc(packetSize); 186 int tmp = OP_rcGetFBParam;memcpy(ptr, &tmp, 4); ptr += 4; 187 memcpy(ptr, &packetSize, 4); ptr += 4; 188 189 memcpy(ptr, ¶m, 4); ptr += 4; 190 191 EGLint retval; 192 stream->readback(&retval, 4); 193 return retval; 194 } 195 196 uint32_t rcCreateContext_enc(void *self , uint32_t config, uint32_t share, uint32_t glVersion) 197 { 198 199 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 200 IOStream *stream = ctx->m_stream; 201 202 unsigned char *ptr; 203 const size_t packetSize = 8 + 4 + 4 + 4; 204 ptr = stream->alloc(packetSize); 205 int tmp = OP_rcCreateContext;memcpy(ptr, &tmp, 4); ptr += 4; 206 memcpy(ptr, &packetSize, 4); ptr += 4; 207 208 memcpy(ptr, &config, 4); ptr += 4; 209 memcpy(ptr, &share, 4); ptr += 4; 210 memcpy(ptr, &glVersion, 4); ptr += 4; 211 212 uint32_t retval; 213 stream->readback(&retval, 4); 214 return retval; 215 } 216 217 void rcDestroyContext_enc(void *self , uint32_t context) 218 { 219 220 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 221 IOStream *stream = ctx->m_stream; 222 223 unsigned char *ptr; 224 const size_t packetSize = 8 + 4; 225 ptr = stream->alloc(packetSize); 226 int tmp = OP_rcDestroyContext;memcpy(ptr, &tmp, 4); ptr += 4; 227 memcpy(ptr, &packetSize, 4); ptr += 4; 228 229 memcpy(ptr, &context, 4); ptr += 4; 230 } 231 232 uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width, uint32_t height) 233 { 234 235 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 236 IOStream *stream = ctx->m_stream; 237 238 unsigned char *ptr; 239 const size_t packetSize = 8 + 4 + 4 + 4; 240 ptr = stream->alloc(packetSize); 241 int tmp = OP_rcCreateWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4; 242 memcpy(ptr, &packetSize, 4); ptr += 4; 243 244 memcpy(ptr, &config, 4); ptr += 4; 245 memcpy(ptr, &width, 4); ptr += 4; 246 memcpy(ptr, &height, 4); ptr += 4; 247 248 uint32_t retval; 249 stream->readback(&retval, 4); 250 return retval; 251 } 252 253 void rcDestroyWindowSurface_enc(void *self , uint32_t windowSurface) 254 { 255 256 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 257 IOStream *stream = ctx->m_stream; 258 259 unsigned char *ptr; 260 const size_t packetSize = 8 + 4; 261 ptr = stream->alloc(packetSize); 262 int tmp = OP_rcDestroyWindowSurface;memcpy(ptr, &tmp, 4); ptr += 4; 263 memcpy(ptr, &packetSize, 4); ptr += 4; 264 265 memcpy(ptr, &windowSurface, 4); ptr += 4; 266 } 267 268 uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat) 269 { 270 271 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 272 IOStream *stream = ctx->m_stream; 273 274 unsigned char *ptr; 275 const size_t packetSize = 8 + 4 + 4 + 4; 276 ptr = stream->alloc(packetSize); 277 int tmp = OP_rcCreateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 278 memcpy(ptr, &packetSize, 4); ptr += 4; 279 280 memcpy(ptr, &width, 4); ptr += 4; 281 memcpy(ptr, &height, 4); ptr += 4; 282 memcpy(ptr, &internalFormat, 4); ptr += 4; 283 284 uint32_t retval; 285 stream->readback(&retval, 4); 286 return retval; 287 } 288 289 void rcOpenColorBuffer_enc(void *self , uint32_t colorbuffer) 290 { 291 292 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 293 IOStream *stream = ctx->m_stream; 294 295 unsigned char *ptr; 296 const size_t packetSize = 8 + 4; 297 ptr = stream->alloc(packetSize); 298 int tmp = OP_rcOpenColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 299 memcpy(ptr, &packetSize, 4); ptr += 4; 300 301 memcpy(ptr, &colorbuffer, 4); ptr += 4; 302 } 303 304 void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer) 305 { 306 307 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 308 IOStream *stream = ctx->m_stream; 309 310 unsigned char *ptr; 311 const size_t packetSize = 8 + 4; 312 ptr = stream->alloc(packetSize); 313 int tmp = OP_rcCloseColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 314 memcpy(ptr, &packetSize, 4); ptr += 4; 315 316 memcpy(ptr, &colorbuffer, 4); ptr += 4; 317 stream->flush(); 318 } 319 320 void rcSetWindowColorBuffer_enc(void *self , uint32_t windowSurface, uint32_t colorBuffer) 321 { 322 323 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 324 IOStream *stream = ctx->m_stream; 325 326 unsigned char *ptr; 327 const size_t packetSize = 8 + 4 + 4; 328 ptr = stream->alloc(packetSize); 329 int tmp = OP_rcSetWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 330 memcpy(ptr, &packetSize, 4); ptr += 4; 331 332 memcpy(ptr, &windowSurface, 4); ptr += 4; 333 memcpy(ptr, &colorBuffer, 4); ptr += 4; 334 } 335 336 int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface) 337 { 338 339 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 340 IOStream *stream = ctx->m_stream; 341 342 unsigned char *ptr; 343 const size_t packetSize = 8 + 4; 344 ptr = stream->alloc(packetSize); 345 int tmp = OP_rcFlushWindowColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 346 memcpy(ptr, &packetSize, 4); ptr += 4; 347 348 memcpy(ptr, &windowSurface, 4); ptr += 4; 349 350 int retval; 351 stream->readback(&retval, 4); 352 return retval; 353 } 354 355 EGLint rcMakeCurrent_enc(void *self , uint32_t context, uint32_t drawSurf, uint32_t readSurf) 356 { 357 358 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 359 IOStream *stream = ctx->m_stream; 360 361 unsigned char *ptr; 362 const size_t packetSize = 8 + 4 + 4 + 4; 363 ptr = stream->alloc(packetSize); 364 int tmp = OP_rcMakeCurrent;memcpy(ptr, &tmp, 4); ptr += 4; 365 memcpy(ptr, &packetSize, 4); ptr += 4; 366 367 memcpy(ptr, &context, 4); ptr += 4; 368 memcpy(ptr, &drawSurf, 4); ptr += 4; 369 memcpy(ptr, &readSurf, 4); ptr += 4; 370 371 EGLint retval; 372 stream->readback(&retval, 4); 373 return retval; 374 } 375 376 void rcFBPost_enc(void *self , uint32_t colorBuffer) 377 { 378 379 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 380 IOStream *stream = ctx->m_stream; 381 382 unsigned char *ptr; 383 const size_t packetSize = 8 + 4; 384 ptr = stream->alloc(packetSize); 385 int tmp = OP_rcFBPost;memcpy(ptr, &tmp, 4); ptr += 4; 386 memcpy(ptr, &packetSize, 4); ptr += 4; 387 388 memcpy(ptr, &colorBuffer, 4); ptr += 4; 389 } 390 391 void rcFBSetSwapInterval_enc(void *self , EGLint interval) 392 { 393 394 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 395 IOStream *stream = ctx->m_stream; 396 397 unsigned char *ptr; 398 const size_t packetSize = 8 + 4; 399 ptr = stream->alloc(packetSize); 400 int tmp = OP_rcFBSetSwapInterval;memcpy(ptr, &tmp, 4); ptr += 4; 401 memcpy(ptr, &packetSize, 4); ptr += 4; 402 403 memcpy(ptr, &interval, 4); ptr += 4; 404 } 405 406 void rcBindTexture_enc(void *self , uint32_t colorBuffer) 407 { 408 409 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 410 IOStream *stream = ctx->m_stream; 411 412 unsigned char *ptr; 413 const size_t packetSize = 8 + 4; 414 ptr = stream->alloc(packetSize); 415 int tmp = OP_rcBindTexture;memcpy(ptr, &tmp, 4); ptr += 4; 416 memcpy(ptr, &packetSize, 4); ptr += 4; 417 418 memcpy(ptr, &colorBuffer, 4); ptr += 4; 419 } 420 421 void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer) 422 { 423 424 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 425 IOStream *stream = ctx->m_stream; 426 427 unsigned char *ptr; 428 const size_t packetSize = 8 + 4; 429 ptr = stream->alloc(packetSize); 430 int tmp = OP_rcBindRenderbuffer;memcpy(ptr, &tmp, 4); ptr += 4; 431 memcpy(ptr, &packetSize, 4); ptr += 4; 432 433 memcpy(ptr, &colorBuffer, 4); ptr += 4; 434 } 435 436 EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint postCount, int forRead) 437 { 438 439 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 440 IOStream *stream = ctx->m_stream; 441 442 unsigned char *ptr; 443 const size_t packetSize = 8 + 4 + 4 + 4; 444 ptr = stream->alloc(packetSize); 445 int tmp = OP_rcColorBufferCacheFlush;memcpy(ptr, &tmp, 4); ptr += 4; 446 memcpy(ptr, &packetSize, 4); ptr += 4; 447 448 memcpy(ptr, &colorbuffer, 4); ptr += 4; 449 memcpy(ptr, &postCount, 4); ptr += 4; 450 memcpy(ptr, &forRead, 4); ptr += 4; 451 452 EGLint retval; 453 stream->readback(&retval, 4); 454 return retval; 455 } 456 457 void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels) 458 { 459 460 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 461 IOStream *stream = ctx->m_stream; 462 463 const unsigned int __size_pixels = (((glUtilsPixelBitSize(format, type) * width) >> 3) * height); 464 unsigned char *ptr; 465 const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; 466 ptr = stream->alloc(packetSize); 467 int tmp = OP_rcReadColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 468 memcpy(ptr, &packetSize, 4); ptr += 4; 469 470 memcpy(ptr, &colorbuffer, 4); ptr += 4; 471 memcpy(ptr, &x, 4); ptr += 4; 472 memcpy(ptr, &y, 4); ptr += 4; 473 memcpy(ptr, &width, 4); ptr += 4; 474 memcpy(ptr, &height, 4); ptr += 4; 475 memcpy(ptr, &format, 4); ptr += 4; 476 memcpy(ptr, &type, 4); ptr += 4; 477 *(unsigned int *)(ptr) = __size_pixels; ptr += 4; 478 stream->readback(pixels, __size_pixels); 479 } 480 481 int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels) 482 { 483 484 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 485 IOStream *stream = ctx->m_stream; 486 487 const unsigned int __size_pixels = (((glUtilsPixelBitSize(format, type) * width) >> 3) * height); 488 unsigned char *ptr; 489 const size_t packetSize = 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + __size_pixels + 1*4; 490 ptr = stream->alloc(8 + 4 + 4 + 4 + 4 + 4 + 4 + 4); 491 int tmp = OP_rcUpdateColorBuffer;memcpy(ptr, &tmp, 4); ptr += 4; 492 memcpy(ptr, &packetSize, 4); ptr += 4; 493 494 memcpy(ptr, &colorbuffer, 4); ptr += 4; 495 memcpy(ptr, &x, 4); ptr += 4; 496 memcpy(ptr, &y, 4); ptr += 4; 497 memcpy(ptr, &width, 4); ptr += 4; 498 memcpy(ptr, &height, 4); ptr += 4; 499 memcpy(ptr, &format, 4); ptr += 4; 500 memcpy(ptr, &type, 4); ptr += 4; 501 stream->flush(); 502 stream->writeFully(&__size_pixels,4); 503 stream->writeFully(pixels, __size_pixels); 504 505 int retval; 506 stream->readback(&retval, 4); 507 return retval; 508 } 509 510 int rcOpenColorBuffer2_enc(void *self , uint32_t colorbuffer) 511 { 512 513 renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self; 514 IOStream *stream = ctx->m_stream; 515 516 unsigned char *ptr; 517 const size_t packetSize = 8 + 4; 518 ptr = stream->alloc(packetSize); 519 int tmp = OP_rcOpenColorBuffer2;memcpy(ptr, &tmp, 4); ptr += 4; 520 memcpy(ptr, &packetSize, 4); ptr += 4; 521 522 memcpy(ptr, &colorbuffer, 4); ptr += 4; 523 524 int retval; 525 stream->readback(&retval, 4); 526 return retval; 527 } 528 529 } // namespace 530 531 renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *stream) 532 { 533 m_stream = stream; 534 535 this->rcGetRendererVersion = &rcGetRendererVersion_enc; 536 this->rcGetEGLVersion = &rcGetEGLVersion_enc; 537 this->rcQueryEGLString = &rcQueryEGLString_enc; 538 this->rcGetGLString = &rcGetGLString_enc; 539 this->rcGetNumConfigs = &rcGetNumConfigs_enc; 540 this->rcGetConfigs = &rcGetConfigs_enc; 541 this->rcChooseConfig = &rcChooseConfig_enc; 542 this->rcGetFBParam = &rcGetFBParam_enc; 543 this->rcCreateContext = &rcCreateContext_enc; 544 this->rcDestroyContext = &rcDestroyContext_enc; 545 this->rcCreateWindowSurface = &rcCreateWindowSurface_enc; 546 this->rcDestroyWindowSurface = &rcDestroyWindowSurface_enc; 547 this->rcCreateColorBuffer = &rcCreateColorBuffer_enc; 548 this->rcOpenColorBuffer = &rcOpenColorBuffer_enc; 549 this->rcCloseColorBuffer = &rcCloseColorBuffer_enc; 550 this->rcSetWindowColorBuffer = &rcSetWindowColorBuffer_enc; 551 this->rcFlushWindowColorBuffer = &rcFlushWindowColorBuffer_enc; 552 this->rcMakeCurrent = &rcMakeCurrent_enc; 553 this->rcFBPost = &rcFBPost_enc; 554 this->rcFBSetSwapInterval = &rcFBSetSwapInterval_enc; 555 this->rcBindTexture = &rcBindTexture_enc; 556 this->rcBindRenderbuffer = &rcBindRenderbuffer_enc; 557 this->rcColorBufferCacheFlush = &rcColorBufferCacheFlush_enc; 558 this->rcReadColorBuffer = &rcReadColorBuffer_enc; 559 this->rcUpdateColorBuffer = &rcUpdateColorBuffer_enc; 560 this->rcOpenColorBuffer2 = &rcOpenColorBuffer2_enc; 561 } 562 563